Re: [Gc] parallel speedup
"Daniel R. Grayson" <[email protected]> Wed, 2 Jul 2014 13:01:48 -0400
| Newsgroups | gmane.comp.programming.garbage-collection.boehmgc |
|---|---|
| Message-ID | <CABWu70G0ykyH0kVpdoHBkJRa+7+cYccdh2oWdAtsitPaRz3Zqg@mail.gmail.com> |
Here is some more information, sorry for the delay. The test program allocates small chunks of memory, some of which contain pointers, and some of which do not (gmp integers). The latter are allocated with GC_MALLOC_ATOMIC. Here is how the program is spending its time, in a test with 4 client threads, according to gprof: % cumulative self self total time seconds seconds calls s/call s/call name 19.95 2.19 2.19 1259020 0.00 0.00 GC_generic_lock 14.75 3.81 1.62 2772367 0.00 0.00 evaluate_eval 11.29 5.05 1.24 54417 0.00 0.00 GC_mark_from 7.56 5.88 0.83 8614697 0.00 0.00 GC_malloc 7.01 6.65 0.77 1658054 0.00 0.00 GC_allochblk 4.37 7.13 0.48 1371704 0.00 0.00 GC_generic_malloc_many 3.55 7.52 0.39 3292481 0.00 0.00 GC_malloc_atomic 2.50 7.80 0.28 3299072 0.00 0.00 gmp_toInteger 2.37 8.06 0.26 2292490 0.00 0.00 GC_header_cache_miss 2.37 8.32 0.26 58155 0.00 0.00 GC_reclaim_clear 2.37 8.58 0.26 49848 0.00 0.00 GC_build_fl 2.14 8.81 0.24 15034505 0.00 0.00 TS_Get_Local 1.64 8.99 0.18 3110502 0.00 0.00 GC_allochblk_nth 1.64 9.17 0.18 24769 0.00 0.00 getmem_atomic 1.46 9.33 0.16 80 0.00 0.01 GC_apply_to_all_blocks 1.18 9.46 0.13 1717544 0.00 0.00 GC_generic_malloc_inner Here is config.log's idea of how gc was configured: ./configure --prefix=/home/dan/src/M2/trunk-git/M2/BUILD/dan/builds.tmp/ubuntu64.profile/libraries/final --enable-cplusplus --enable-threads=posix --enable-parallel-mark --enable-large-config --disable-gcj-support --disable-java-finalization --build=x86_64-unknown-linux-gnu --cache-file=/dev/null I was unaware of thread local allocation, as described in the link you provide! In particular, I was unaware I had to do anything to get it to be activated. Perhaps that is the next thing to try. On Tue, Jun 24, 2014 at 8:48 PM, Bruce Hoult <[email protected]> wrote: > > Hi Daniel, > > Unfortunately you haven't given us much to go on. We don't know how you've built the GC, and we don't know how you are using it. > > Are you spending your time in allocation, or in marking? > > Have you read http://www.hboehm.info/gc/scale.html ? What from there have you done? > > As you can see, the information there is not very recent. I'm not aware of any serious work carried out with regard to scalability on modern 6 or 8 or 12 core CPUs. > > The thread local allocation stuff *should* take care of lock contention, even with quite a few CPU cores. > > Marking is a more difficult problem. If the structures allocated by different cores have pointers into structures allocated by other cores (or it's just generally one big ball of mud) then marking will inevitably cause a lot of cross-CPU cache traffic. If the different threads' data structures are mostly disjoint then parallel marking *could* work very well. *Could*. I really don't know in practice as I've never tried it. > > On another track .. are your objects mostly pointers or mostly data? If you have, for example, big arrays filled with numbers, are you using GC_malloc_atomic() so that the GC knows they don't need to be scanned? > > > > On Wed, Jun 25, 2014 at 11:46 AM, Daniel R. Grayson < [email protected]> wrote: >> >> In our application that uses libgc (see http://macaulay2.com/) I observe no >> speedup when running tasks in parallel, if the tasks allocate memory using >> libgc. Perhaps I'm doing something wrong. Are there any commonly observed >> situations where no speedup occurs? >> >> A glance at the source code shows that mutex locks lock down the world on >> almost every occasion, so it's hard to see why there would ever be any speedup >> when using threads. >> >> >> >> -- >> This message has been scanned for viruses and >> dangerous content by MailScanner, and is >> believed to be clean. >> _______________________________________________ >> bdwgc mailing list >> [email protected] >> https://lists.opendylan.org/mailman/listinfo/bdwgc > > _______________________________________________ bdwgc mailing list [email protected] https://lists.opendylan.org/mailman/listinfo/bdwgc