On Tuesday, 10 March 2015 at 22:34:34 UTC, Ali Çehreli wrote:
It is possible by accessing the actual range by chunks:
import std.stdio;
import std.algorithm;
import std.parallelism;
import std.range;
import std.conv;
void main()
{
const size_t elementCount = 895640;
int[] a = iota(elementCount)
.map!(i => i.to!int)
.array;
const chunkSize = a.length / taskPool.size;
auto chunks = a.chunks(chunkSize);
bool[] results = chunks.taskPool.map!(chunk =>
chunk.canFind(895639));
writeln(results.canFind(true) ? "Yes" : "No");
}
We can hope to make it simpler by taking advantage of parallel
map but it requires a static local function or a global
function (a lambda cannot be used):
static bool canFindIt(Range)(Range range)
{
return range.canFind(895639);
}
auto results = taskPool.map!canFindIt(chunks);
Thanks.