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