Re: Linking with a non-default druntime

2018-10-09 Thread Per Nordlöw via Digitalmars-d-learn

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.326.07.523.8 31.2   31.3  
 29.1
   16  33.6  23.112.74.713.0 16.5   14.9  
 16.0
   32  15.5  13.5 6.72.9 7.0  8.2   10.2  
  9.6
   64  11.5   9.7 4.11.8 3.9  6.45.2  
  4.8
  128   9.3   6.9 2.61.6 2.5  4.23.8  
  3.0
  256   8.8   5.4 1.91.4 1.9  3.22.9  
  2.2
  512   7.6   4.3 1.61.3 1.5  2.62.8  
  1.7
 1024   7.3   4.1 1.51.3 1.4  2.22.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.739.18.942.1 28.8   32.1  
 39.6
   16  32.0  27.518.64.620.9 15.2   17.0  
 20.1
   32  15.7  16.010.52.912.3  9.0   10.7  
 11.0
   64  10.2   9.0 7.71.9 6.2  5.36.3  
  6.6
  128   7.9   6.0 5.01.5 4.2  4.53.8  
  4.8
  256   6.1   4.7 2.91.3 3.4  3.22.9  
  3.6
  512   5.6   3.5 3.01.3 3.0  2.62.8  
  2.8
 1024   5.0   2.9 2.51.2 2.6  2.32.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


Re: Linking with a non-default druntime

2018-10-02 Thread Per Nordlöw via Digitalmars-d-learn

On Tuesday, 2 October 2018 at 16:20:52 UTC, Basile B. wrote:
This works https://github.com/BBasile/druntime/pull/1. Not sure 
if it will be useful.


Ahh, thanks!

I've just found my own way of iterating via a script at

https://github.com/nordlow/scripts/blob/master/dmd-own

that (re)compiles druntime and phobos and then compiles my GC 
test application using toolchain in around 7 secs on my 2 year 
old laptop. I'll stick to that for now.


This assumes the home-directory structure

~/Work/dmd ~master
   druntime ~dmitry-gc
   phobos ~master

. The playground for my GC experiments will be

https://github.com/nordlow/druntime/blob/dmitry-gc/src/gc/impl/dmitry/gc.d

So far I've only described my plan and added a set of debug 
prints.


You're very welcome to comment and destroy my plan. I'm uncertain 
of what kinds of locking (if any) that is needed for a 
thread-local GC allocation (non-mutex I suppose). Please 
elaborate on the subject if you have any experience with 
thread-local GCs.


Would you be interested in making this a druntime PR so you can 
make comments?


Contents of `dmd-own` follows:

#!/usr/bin/env bash

function dmd-own_fn()
{
local DLANG_SRC_ROOT=${HOME}/Work
local DMD_ROOT=${DLANG_SRC_ROOT}/dmd
local DRUNTIME_ROOT=${DLANG_SRC_ROOT}/druntime
local PHOBOS_ROOT=${DLANG_SRC_ROOT}/phobos
local BUILD="debug"

if type clang++ &> /dev/null; then
local HOST_CXX=clang++
else
local HOST_CXX=g++-8
fi
HOST_CXX=g++-8 # use g++ for now because building DMD with 
clang++ seems to generate a dmd binary that segfauls


# rebuild dmd, druntime, phobos on Linux
command make -f posix.mak BUILD=${BUILD} -C ${DMD_ROOT} 
HOST_CXX=${HOST_CXX} > /dev/null 2> /dev/null
# command make -f posix.mak BUILD=${BUILD} -C 
${DRUNTIME_ROOT} > /dev/null
command make -f posix.mak BUILD=${BUILD} -C ${PHOBOS_ROOT} > 
/dev/null


if [ $# = 0 ]; then
echo -e "Usage: $FUNCNAME D_SOURCE_FILE ARG
Example: dmd-own gctester.d --DRT-gcopt=gc:dmitry"
else
local FILE="$1"
local out=$(mktemp)
local ARG="$2"
local NEW_DMD=${DMD_ROOT}/generated/linux/${BUILD}/64/dmd
${NEW_DMD} -debug -unittest -wi -vcolumns ${PWD}/${FILE} 
-of$out

$out ${ARG}
fi
}

dmd-own_fn "$@"


Re: Linking with a non-default druntime

2018-10-02 Thread Basile B. via Digitalmars-d-learn

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 ?


This works https://github.com/BBasile/druntime/pull/1. Not sure 
if it will be useful.


Re: Linking with a non-default druntime

2018-10-02 Thread Basile B. via Digitalmars-d-learn

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 ?


Re: Linking with a non-default druntime

2018-10-01 Thread Per Nordlöw via Digitalmars-d-learn

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!


Re: Linking with a non-default druntime

2018-10-01 Thread Basile B. via Digitalmars-d-learn

On Monday, 1 October 2018 at 07:17:59 UTC, Per Nordlöw wrote:

On Sunday, 30 September 2018 at 19:53:02 UTC, Basile B. wrote:
this way you can very easily change-compile-test, without 
recompiling the whole runtime and phobos each time.


Ok, thanks.

Is it possible to register an extra GC in a separate program by 
overriding the logic in `gc.proxy` in druntime?


That would be the most effective way.


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.


Re: Linking with a non-default druntime

2018-10-01 Thread Per Nordlöw via Digitalmars-d-learn

On Sunday, 30 September 2018 at 19:53:02 UTC, Basile B. wrote:
this way you can very easily change-compile-test, without 
recompiling the whole runtime and phobos each time.


Ok, thanks.

Is it possible to register an extra GC in a separate program by 
overriding the logic in `gc.proxy` in druntime?


That would be the most effective way.


Re: Linking with a non-default druntime

2018-09-30 Thread Basile B. via Digitalmars-d-learn

On Sunday, 30 September 2018 at 19:03:17 UTC, Per Nordlöw wrote:
How can I link my dmd-compiled program with a specific version 
of the druntime?


druntime is within libphobos. So you must change this.



I need this when experimenting with a new GC.


Did you try what i proposed earlier ? Until the handlers are 
plugged there can be a fallback to the manual allocs.


For example you start with the manual implementation and add 
handlers + fallback for every functions, like here for malloc


```
__gshared void* function(size_t, uint, const TypeInfo) 
nothrow mallocHandler;
void* malloc(size_t size, uint bits, const TypeInfo ti) 
nothrow

{
if (mallocHandler) // experimental stuff
{
return mallocHandler(size, bits, ti);
}
else // fallback until handler is assigned
{
void* p = cstdlib.malloc(size);
if (size && p is null)
onOutOfMemoryError();
return p;
}
}
```

this way you can very easily change-compile-test, without 
recompiling the whole runtime and phobos each time.


Linking with a non-default druntime

2018-09-30 Thread Per Nordlöw via Digitalmars-d-learn
How can I link my dmd-compiled program with a specific version of 
the druntime?


I need this when experimenting with a new GC.