sliced().array compatibility with parallel?

Jay Norwood via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Jan 9 18:43:05 PST 2016


On Sunday, 10 January 2016 at 01:54:18 UTC, Jay Norwood wrote:
> ok, thanks.  That works. I'll go back to trying ndslice now.

The parallel time for this case is about a 2x speed-up on my 
corei5 laptop, debug build in windows32, dmd.

D:\ec_mars_ddt\workspace\nd8>nd8.exe
parallel time msec:2495
non_parallel msec:5093

===========
import std.array : array;
import std.algorithm;
import std.datetime;
import std.conv : to;
import std.stdio;
import std.experimental.ndslice;

shared double[1000] means;
double[] data;

void f1() {
     import std.parallelism;
     auto sl = data.sliced(1000,100_000);
     foreach(i,vec; parallel(sl)){
         means[i] = vec.sum / 100_000;
     }
}

void f2() {
     auto sl = data.sliced(1000,100_000);
     foreach(i,vec; sl.array){
         means[i] = vec.sum / 100_000;
     }
}

void main() {
     data = new double[100_000_000];
     for(int i=0;i<100_000_000;i++){ data[i] = i/100_000_000.0;}
     StopWatch sw1, sw2;
     sw1.start();
     f1() ;
     auto r1 = sw1.peek().msecs;
     sw2.start();
     f2();
     auto r2 = sw2.peek().msecs;

     writeln("parallel time msec:",r1);
     writeln("non_parallel msec:", r2);
}




More information about the Digitalmars-d-learn mailing list