dsimcha Wrote:

> == Quote from Steven Schveighoffer (schvei...@yahoo.com)'s article
> > Maybe I'm wrong, is there a good test case to prove it is worse on
> > multiple cores?
> > -Steve
> 
> This is a synthetic, extreme corner case benchmark, but I think it hammers 
> home
> the point that such problems are at least plausible.  Tested on a Core 2 Quad 
> with
> -O -inline -release:
> 
> import std.stdio, std.perf, core.thread;
> 
> void main() {
>     writeln("Set affinity, then press enter.");
>     readln();
> 
>     auto pc = new PerformanceCounter;
>     pc.start;
> 
>     enum nThreads = 4;
>     auto threads = new Thread[nThreads];
>     foreach(ref thread; threads) {
>         thread = new Thread(&doAppending);
>         thread.start();
>     }
> 
>     foreach(thread; threads) {
>         thread.join();
>     }
> 
>     pc.stop;
>     writeln(pc.milliseconds);
> }
> 
> void doAppending() {
>     uint[] arr;
>     foreach(i; 0..1_000_000) {
>         arr ~= i;
>     }
> }
> 
> Timing with affinity for all 4 CPUs:  28390 milliseconds
> 
> Timing with affinity for only 1 CPU:  533 milliseconds

My code does do considerable array appending, and I see exactly the same issue 
as dsimcha points out above.  I would expect it is GC related, but why for 
multiple cores only, I cannot fathom.

Thanks for the repro, dsimcha!  My code snippet would not have been as 
straight-forward.

Reply via email to