You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This generates the following compile error if I uncomment the taskPool.amap line. The TR definition causes the amap error for either struct or Tuple definitions.
Ali Cehreli did some analysis in the thread:
http://forum.dlang.org/post/dtebpnktznzdusnontkn@forum.dlang.org
Severity Code Description Project File Line
Error Error: static assert "Wrong buffer type." C:\D\dmd2\src\phobos\std\parallelism.d 1668
Error instantiated from here: amap!(MapResult!(getTerm, Result), Tuple!(TR, "L1_MISS", TR, "L1D_ACCESS")[]) d:\visd\dmapbug\dmapbug\main.d 40
import std.algorithm, std.parallelism, std.range;
import std.typecons;
import std.meta;
import std.stdio;
// define some input measurement sample tuples and output metric tuples
struct TR { long raw; double per_cyc;}
//alias TR = Tuple!(long, "raw", double, "per_cyc");
alias TI = Tuple!(long, "L1I_MISS",long, "L1D_MISS", long, "L1D_READ", long, "L1D_WRITE", long, "cycles" );
alias TO = Tuple!(TR, "L1_MISS", TR, "L1D_ACCESS");
// various metric definitions
// using Tuples with defined names for each member, and use the names here in the metrics.
TR met_l1_miss ( ref TI m){ TR rv; rv.raw = m.L1I_MISS+m.L1D_MISS; rv.per_cyc = cast(double)rv.raw/m.cycles; return rv; }
TR met_l1_access ( ref TI m){ TR rv; rv.raw = m.L1D_READ+m.L1D_WRITE; rv.per_cyc = cast(double)rv.raw/m.cycles; return rv; }
// a convenience to use all the metrics above as a list
alias Metrics = AliasSeq!(met_l1_miss, met_l1_access);
void main(string[] argv)
{
auto samples = iota(100);
auto meas = new TI[samples.length];
auto results = new TO[samples.length];
// Initialize some values for the measured samplesforeach(i, ref m; meas){ m.L1D_MISS= 100+i; m.L1I_MISS=100-i; m.L1D_READ= 200+i; m.L1D_WRITE=200-i; m.cycles= 10+i;}ref TI getTerm(int i){ return meas[i];}// compute the metric results for the above measured sample values in parallel//taskPool.amap!(Metrics)(std.algorithm.map!getTerm(samples),results);TR rv1 = met_l1_miss( meas[1]);TR rv2 = met_l1_access( meas[1]);writeln("measurements:", meas[1]);writeln("rv1:", rv1);writeln("rv2:", rv2);writeln("results:", results[1]);
}
The text was updated successfully, but these errors were encountered:
jayn reported this on 2015-10-01T20:33:52Z
Transfered from https://issues.dlang.org/show_bug.cgi?id=15135
Description
The text was updated successfully, but these errors were encountered: