Parallelization of a large array

anonymous via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Mar 10 14:17:56 PDT 2015


On Tuesday, 10 March 2015 at 20:41:14 UTC, Dennis Ritchie wrote:
> Hi.
> How to parallelize a large array to check for the presence of 
> an element matching the value with the data?
>
> std.stdio;
> std.algorithm;
> std.parallelism;

You forgot a couple "import"s here.

>
> void main() {
>
> 	int[] a = new int[1000000];
>
> 	foreach (i, ref elem; a)
> 		elem = i;

Type mismatch here. i is a size_t, but elem is an int.

>
> 	/*if (find(parallel(a), 895639).length != 0)
> 		writeln("Yes");
> 	else
> 		writeln("No");*/
> }

I guess you'd have to write your own "find". Since 
std.algorithm.find is just linear search, that shouldn't be hard. 
Something like this:

bool found = false;
foreach(x; parallel(a))
{
     if(x == 895639)
     {
         found = true;
         /* Maybe figure out how to break all parallel loops. */
     }
}

std.algorithm.find would work on mere input ranges, and it would 
return the tail of the range and not just a bool. Both of those 
don't make sense with a parallel search, though.

Also, with a trivial predicate like integer equality, 
parallelization might not buy you anything.


More information about the Digitalmars-d-learn mailing list