Parallelization issues
Ali Çehreli
acehreli at yahoo.com
Thu Mar 8 12:55:23 PST 2012
On 03/08/2012 12:09 PM, ixid wrote:
> Changing a[][2] to a[][] as suggested made it work. It's not clear to me
> why it should matter that it's not dynamic in that axis or are arrays
> simply static or dynamic globally?
The reason is that fixed-length arrays cannot be ranges themselves
because popFront() cannot be implemented on them. Luckily though, we can
very easily take a whole slice of a fixed-length array and that would be
a range.
The following code has the same problem as yours:
// WARNING: Cannot be compiled
import std.stdio;
import std.parallelism;
void main()
{
int[2] array = [ 1, 2 ];
foreach (element; parallel(array)) {
writeln(element);
}
}
The fix is to pass a slice of array to parallel(). Now it works:
foreach (element; parallel(array[])) { // <-- note []
}
Now parallel() will consume the temporary slice that is passed to it.
Ali
More information about the Digitalmars-d-learn
mailing list