"Stephan Schiffels" wrote in message news:[email protected]...

I see several ways how to improve my code:
1.) Is there a way to tell the GC the maximum heap size allowed before it initiates a collection cycle? Cranking that up would cause fewer collection cycles and hence spend more time in my multithreaded code?

Yes, sort of. You can use http://dlang.org/phobos/core_memory.html#.GC.reserve to have the GC grab a big chunk of memory, and collections won't run until that is exhausted. As it is only allocating virtual memory, it should be more or less equivalent to setting the max heap size.

2.) Is there a way to "pause" the GC collection for the parallel part of my program, deliberately accepting higher memory usage?

Yes, with GC.enable and GC.diable

3.) Most of the memory is used in one huge array, perhaps I should simply use malloc and free for that particular array to avoid the GC from running so often.

Yes, this may work if it's a reasonable design for your application. Other options like re-using one GC buffer per thread might work too.

I am a bit surprised that there is no command line option for dmd to control GC maximum heap size. Who determines how often the GC is run? For example, in Haskell I can simply set the maximum heap size to 10Mb in GHC using -A10m, which I used in the past to help exactly the same problem and dramatically reduce the frequency of GC collection cycles.

Being able to configure the GC at run-time is something that's currently being worked on. I assume this will be possible rather soon, probably in the next release.

Reply via email to