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.

Reply via email to