Dynamic Closure + Lazy Arguments = Performance Killer?

Jason House jason.james.house at gmail.com
Fri Oct 24 15:04:34 PDT 2008


Gregor Richards Wrote:

> Jason House wrote:
> > I ported some monte carlo simulation code from Java to D2, and performance is horrible.
> > 
> > 34% of the execution time is used by std.random.uniform. To my great surprise, 25% of the execution  time is memory allocation (and collection) from that random call. The only candidate source I see is a call to ensure with lazy arguments. The memory allocation occurs at the start of the UniformDistribution call. I assume this is dynamic closure kicking in.
> > 
> > Can anyone verify that this is the case?
> > 
> > 600000 memory allocations per second really kills performance!
> 
> Java has a much better garbage collector than D, as it doesn't need to 
> be conservative.
> 
>   - Gregor Richards

The code is written to explicitly avoid memory allocation, especially in tight loops. Without this dynamic closure, the garbage collecor would never run. This case is especially pathetic since the call to ensure will never trigger. 

This is part of a mini language shootout. The Java version I cloned runs 4x faster. This is only one piece of a much bigger problem.



More information about the Digitalmars-d mailing list