== Quote from dsimcha (dsim...@yahoo.com)'s article
> == Quote from Dan (dsstruth...@yahoo.com)'s article
> > I have a question regarding performance issue I am seeing on multicore 
> > Windows
> systems.  I am creating many threads to do parallel tasks, and on multicore
> Windows systems the performance is abysmal.  If I use task manager to set the
> processor affinity to a single CPU, the program runs as I would expect.  
> Without
> that, it takes about 10 times as long to complete.
> > Am I doing something wrong?  I have tried DMD 2.0.37 and DMD 1.0.53 with the
> same results, running the binary on both a dual-core P4 and a newer Core2 duo.
> > Any help is greatly appreciated!
> I've seen this happen before.  Without knowing the details of your code, my 
> best
> guess is that you're getting a lot of contention for the GC lock.  (It could 
> also
> be some other lock, but if it were, there's a good chance you'd already know 
> it
> because it wouldn't be hidden.)  The current GC design isn't very
> multithreading-friendly yet.  It requires a lock on every allocation.
> Furthermore, the array append operator (~=) currently takes the GC lock on 
> **every
> append** to query the GC for info about the memory block that the array 
> points to.
>  There's been plenty of talk about what should be done to eliminate this, but
> nothing has been implemented so far.
> Assuming I am right about why your code is so slow, here's how to deal with 
> it:
> 1.  Cut down on unnecessary memory allocations.  Use structs instead of 
> classes
> where it makes sense.
> 2.  Try to stack allocate stuff.  alloca is your friend.
> 3.  Pre-allocate arrays if you know ahead of time how long they're supposed 
> to be.
>  If you don't know how long they're supposed to be, use std.array.Appender 
> (in D2)
> for now until a better solution gets implemented.  Never use ~= in 
> multithreaded
> code that gets executed a lot.

Yes, I've seen this before, too. But in my muti-threads, the alloc operations
aren't avoiding, so the D's GC should improve it's performance for 
multi-threads.

Reply via email to