IRC channel logs

2022-10-03.log

back to list of logs

<spk121>Hi, A locale question. In France, for 100 EUR, it is more common to write 100<euro sign> or <euro sign>100
<daviid>spk121: 100e
<lloda>civodul: i pushed a test
<lloda>there are probably a few more bugs like that in Guile, and who knows in user code. We should remove the SCM_DEBUG_TYPING_STRICTNESS stuff and just use the first definition. I'd eat my hat if that has any meaningful performance impact
<civodul>yeah, could be
<spk121>On a CI build for a project, I enabled SCM_DEBUG_TYPING_STRICTNESS = 2 for the sake of type checking. That still works and did find a bad cast in the code. It has some utility, though not necessarily enough to justify the burden of keeping it.
<wingo>wooooo
<wingo>i have conservative roots + evacuation + parallelism working nicely in whippet
<wingo>for 8 mutator threads and 8 collector threads on mt-gcbench benchmark, i see 14x reduction in elapsed time (!)
<antipode>wingo: IIUC, the reachability tracking now has three states: unreachable, reachable, don't know (because partially conservative GC)
<wingo>relative to bdw-gc
<antipode>In a library I write, there are some tests for making sure an object becomes unreachable.
<antipode>But because of conservativeness, it's somewhat bogus, it should check for 'unreachable OR can't be determined' instead.
<antipode>Is there some method for Scheme programs to determine whether an object 'unreachable OR can't be determined'?
<wingo>so i am working on a slot-in replacement for guile's use of bdw-gc. therefore conservative roots are needed. whippet can be configured to run in precise mode, though, so at some point if all roots became enumerable precisely we wouldn't have to change gc
<antipode>(I used weak references or guardians for that, but that's a bit bogus because of the conservaticveness)
<wingo>antipode: for guile, no. all you have is "definitely unreachable"
<wingo>maybe at some point in the future. but not right now.
<antipode>OK.
<wingo>gosh. v delighted that conservative roots just seems to work
<wingo>and is not slow
<wingo>and doesn't prevent compaction
<dthompson>wingo: 14x! we're not worthy!
<sneek>dthompson, you have 3 messages!
<sneek>dthompson, daviid says: there is indeed no way to ... in a script, you must call (default-duplicate-binding-handler
<sneek>dthompson, daviid says: that is _after_ a first use-modules incantation (use-modules (oop goops)) - therefore, especially if your script is distributed (that might/will be run by users you do not have control on their guile settings, pre-using goops in particular, I always and recommend to do as in [as an example] all g-golf examples (which are scripts) -
<sneek>dthompson, daviid says: the template being https://paste.debian.net/1255735/
<dthompson>whoa sneek geez
<dthompson>daviid: thanks for the tipz
<wingo>dthompson: you can test if you like :) https://github.com/wingo/whippet-gc, make, then difference of "time ./conservative-parallel-whippet-mt-gcbench 3 8 8" and time ./bdw-mt-gcbench 3 8 8"
<wingo>for some reason in that test case, it's the conservative-parallel-generational collector that does best. generational collection is not always good for mt-gcbench tho. weird
<dthompson>wingo: looks like I just need gcc and bdw-gc to build and run this?
<wingo>guix environment --ad-hoc gcc-toolchain libgc pkg-config -- make
<dthompson>excellent, thanks :)
<wingo>my fingers have not yet learned about guix shell :)
<dthompson>wingo: guix shell gcc-toolchain libgc pkg-config -- make
<wingo>tx
<dthompson>np
<dthompson>whippet: 1.125s real, bdw: 6.646s real
<dthompson>wingo: ^
<wingo>on what kind of machine?
<wingo>also try "time ./conservative-parallel-generational-whippet-mt-gcbench 3 8 8"
<dthompson>thinkpad x1 carbon (forget which gen) with a core i7-8650U. 4 cores, 1.90GHz
<dthompson>wingo: that benchmark took 1.246s
<wingo>i guess 4 physical cores, 8 threads?
<dthompson>wingo: yes
<wingo>i was testing on a dual-xeon silver 4114 system, fwiw; 2x10 cores, then 2 threads/core
<wingo>did a taskset to keep things local to socket 0 tho
<wingo>anyway, good
<dthompson>that's a beefy machine
<wingo>v good. this should speed up multithreaded guix code
<wingo>yeah, good for compiling llvm in debug mode :P has like 200g ram or something
<dthompson>I'm excited about it for a number of reasons. faster gc will help so many things.
<wingo>right!
<wingo>and, it actually manages to compact, despite conservative roots
<dthompson>and a modern gc that other people have a better chance of making contributions to is nice.
<wingo>every time i open bdwgc's source code i want to claw my eyes out :P every other line is a preprocessor directive
<wingo>i am hoping for a while that guile can choose bdw-gc or whippet as a compile option
<wingo>lowers the risk to change
<dthompson>yeah that makes good sense for a transition
<wingo>a few things left to do tho (finalizers etc)
<dthompson>I've been (slowly) working my way through "an incremental approach to compiler construction", a paper from 2006, to demystify compilers for myself. it leaves gc as a future exercise, but offers a pointer to make a simple copying collector to learn the basics. I'll see if I get there. ;)
<dthompson>I've been trying to follow along with your whippet progress blog posts, as well.
<wingo>you might enjoy https://github.com/wingo/wasm-jit
<wingo>includes a simple copying collector
<dthompson>oh cool. I will bookmark this. thanks!
<dthompson>the paper has 24 steps, each building on the previous. I'm about halfway, but it's been very enlightening so far.
<wingo>yes it's quite a lovely paper. prompted chez to rewrite its compiler in the same style
<dthompson>having never done most of this stuff before it feels really cool when you finally make something work. getting closures to work was so cool.
<dthompson>and basic (inefficient) tail calls
<old>Would that new GC helps false positive roots (from C)? For example could we be sure that finalizers are called when all references are lost for an object?
<rekado>on my machine it’s real 9.825s (bdw) vs 1.798s (whippet, conservative parallel); Intel(R) Xeon(R) CPU E7-4870 v2 @ 2.30GHz with 120 cores (4 sockets, 15 cores per socket, 2 threads per core)
<rekado>conservative-parallel-generational-whippet-mt-gcbench finishes in 2.117s / 2.203s / 2.408s (three runs)
<rekado>another run of the bdw benchmark: 12.492s
<rekado>quite a wide range
*chris wonders how fast guile-next will complete an infinite loop!
***maximed is now known as antipode
<wingo>moo
<dthompson>buk buk buk (chicken)
<wingo>i miss having chickens, they are funny animals
<dthompson>I enjoyed your chicken pictures back in the day
<KREYREN>i miss fishies u.u
<KREYREN>damn you now i will be designing an aquarium the whole weekend
<KREYREN>grr
<dthompson>I currently have 5 chickens. very funny little things.