This is a simple merge sorting implementation, a[0] and a[1] are the two halves of the array to be sorted, split into an int[][2] a array. This was done because I wanted to try parallel but that gives these errors:

        foreach(ref i;parallel(a))
                mergeSort(i);

Error: template std.array.popFront(A) if (!isNarrowString!(A) && isDynamicArray!(A) && isMutable!(A) && !is(A == void[])) does not match any function template declaration

Error 2 Error: template std.array.popFront(A) if (!isNarrowString!(A) && isDynamicArray!(A) && isMutable!(A) && !is(A == void[])) cannot deduce template function from argument types !()(int[][2u])

Without parallel it works as intended in a single threaded way. The same error is given using sort(i).

So I tried (and have probably misunderstood the correct syntax/steps required) using task as so:

        auto task1 = task!(mergeSort)(a[0]);
        task1.executeInNewThread();
        //taskPool.put(task1);
        mergeSort(a[1]);
        a[0] = task1.yieldForce();

I tried both the taskPool.put and executeInNewThread() versions, they both sort the numbers correctly but it's 3-4 times slower than doing it single-threaded. My processor is a Core 2 Duo and reports 2 with totalCPUs. I've also used multi-threading successfully with C++ before. What am I doing wrong?

Reply via email to