On 03/08/2012 07:52 AM, bearophile wrote:
ixid:

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)

You are trying to do popFront on a fixed sized array. Try to use
int[][] instead of int[][2].

Bye,
bearophile

Indeed. Both of the following work for me:

import std.stdio;
import std.algorithm;
import std.parallelism;

void main()
{
    int[] array = [ 6, 3, -5, 9, 0, -1, 10 ];
    int[][] slices = [ array[0 .. $/2], array[$/2 .. $] ];

    foreach(slice; parallel(slices)) {
        sort(slice);
    }

    writeln("Note: Only partially sorted: ", array);
}

import std.stdio;
import std.algorithm;
import std.parallelism;

void main()
{
    int[] array = [ 6, 3, -5, 9, 0, -1, 10 ];

    auto tasks = [ task!sort(array[0 .. $/2]) ];
    tasks ~= task!sort(array[$/2 .. $]);

    foreach (task; tasks) {
        task.executeInNewThread();
    }

    foreach (task; tasks) {
        task.yieldForce();
    }

    writeln("Note: Only partially sorted: ", array);
}

Ali

Reply via email to