sliced().array compatibility with parallel?

Jay Norwood via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Jan 9 15:20:00 PST 2016


I'm playing around with win32, v2.069.2 dmd and "dip80-ndslice": 
"~>0.8.8".  If I convert the 2D slice with .array(), should that 
first dimension then be compatible with parallel foreach?

I find that without using parallel, all the means get computed, 
but with parallel, only about  half of them are computed in this 
example.  The others remain NaN, examined in the debugger in 
Visual D.

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

enum testCount = 1;
double[1000] means;
double[] data;

void f1() {
  import std.parallelism;
  auto sl = data.sliced(1000,100_000);
  auto sla = sl.array();
  foreach(i,vec; parallel(sla)){
   double v=vec.sum(0.0);
   means[i] = v / 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;}
  auto r = benchmark!(f1)(testCount);
  auto f0Result = to!Duration(r[0] / testCount);
  f0Result.writeln;
  writeln(means[0]);
}


More information about the Digitalmars-d-learn mailing list