On Tuesday, 2 October 2018 at 13:07:04 UTC, Basile B. wrote:
On Monday, 1 October 2018 at 11:10:07 UTC, Per Nordlöw wrote:
On Monday, 1 October 2018 at 08:27:54 UTC, Basile B. wrote:
I think so. Apparently it's registered with a string, e.g
"manual" and you pass a special druntime option with your
program to select.
Actually i would be interested to make the interface with
assignable handlers since you don't seem to be very hot.
Maybe tomorrow i can try. I'm almost sure that this could
work but cant be 100% sure. Maybe there'll be issues with
privacy and events to assign.
Be my guest :)
Thanks!
I see other related topics, did you already start something ?
Yes!
I'm making interesting progress here:
https://github.com/nordlow/druntime/blob/fastalloc-gc/src/gc/impl/fastalloc/gc.d
I'm currently writing the spec in a comment and experimenting
with faster (both global and thread-local) allocations
using
https://github.com/nordlow/phobos-next/blob/master/snippets/gctester.d
as a benchmark, compiled with
https://github.com/nordlow/scripts/blob/master/dmd-own
which gives
[per:~/Work/knet/phobos-next/snippets] 12s $ dmd-own gctester.d
--DRT-gcopt=gc:fastalloc
size new-C new-S GC.malloc gc_tlmalloc_N GC.calloc malloc calloc
FreeList!(GCAllocator)
8 46.8 58.3 26.0 7.5 23.8 31.2 31.3
29.1
16 33.6 23.1 12.7 4.7 13.0 16.5 14.9
16.0
32 15.5 13.5 6.7 2.9 7.0 8.2 10.2
9.6
64 11.5 9.7 4.1 1.8 3.9 6.4 5.2
4.8
128 9.3 6.9 2.6 1.6 2.5 4.2 3.8
3.0
256 8.8 5.4 1.9 1.4 1.9 3.2 2.9
2.2
512 7.6 4.3 1.6 1.3 1.5 2.6 2.8
1.7
1024 7.3 4.1 1.5 1.3 1.4 2.2 2.5
1.5
ns/w: nanoseconds per word
vs
[per:~/Work/knet/phobos-next/snippets] 4s $ dmd-own gctester.d
--DRT-gcopt=gc:conservative
size new-C new-S GC.malloc gc_tlmalloc_N GC.calloc malloc calloc
FreeList!(GCAllocator)
8 75.4 54.7 39.1 8.9 42.1 28.8 32.1
39.6
16 32.0 27.5 18.6 4.6 20.9 15.2 17.0
20.1
32 15.7 16.0 10.5 2.9 12.3 9.0 10.7
11.0
64 10.2 9.0 7.7 1.9 6.2 5.3 6.3
6.6
128 7.9 6.0 5.0 1.5 4.2 4.5 3.8
4.8
256 6.1 4.7 2.9 1.3 3.4 3.2 2.9
3.6
512 5.6 3.5 3.0 1.3 3.0 2.6 2.8
2.8
1024 5.0 2.9 2.5 1.2 2.6 2.3 2.5
2.5
ns/w: nanoseconds per word
Note that gc_tlmalloc_N uses the new allocator in both cases. I
haven't bothered branching the benchmark on type of GC config.
I'm planning on making it sweep-free as described in
https://github.com/golang/proposal/blob/master/design/12800-sweep-free-alloc.md