Parallelism Map and Reduce
Ali Çehreli
acehreli at yahoo.com
Wed Dec 12 07:12:11 PST 2012
On 12/12/2012 05:47 AM, Zardoz wrote:
> On Tuesday, 11 December 2012 at 17:50:31 UTC, Ali Çehreli wrote:
>> On 12/11/2012 08:12 AM, Zardoz wrote:
>>
>>
>> Could you please move MapIntegrator() to module-level. Then it should
>> work.
>>
>> Ali
>
> I try it and now even with normal Map function give me errors with dmd !
>
> public Entity MapIntegrator ( Entity me) {
> me.Integrador3Orden ();
> return me;
> }
>
> void main() {
> Entity[] objects;
> ...
> objects = array( map!MapIntegrator(objects) );
> ...
> }
>
> With this error :
> dmd -w -wi -version=SReduction simulator.d entity.d vector.d -ofreduceSim
> simulator.d(194): Error: template std.algorithm.map!(MapIntegrator).map
> does not match any function template declaration
> /usr/include/dmd/phobos/std/algorithm.d(369): Error: template
> std.algorithm.map!(MapIntegrator).map(Range) if
> (isInputRange!(Unqual!(Range))) cannot deduce template function from
> argument types !()(Entity[])
Strange. The following program works for me with dmd 2.060. It uses both
the regular and parallel versions of map and reduce:
import std.array;
import std.algorithm;
import std.parallelism;
struct Entity
{
void Integrador3Orden()
{}
}
public Entity MapIntegrator ( Entity me) {
me.Integrador3Orden ();
return me;
}
void main() {
Entity[] objects;
objects = array( map!MapIntegrator(objects) );
objects = array(taskPool.map!MapIntegrator(objects));
int[] acelByObjs;
int reduced = reduce!"a + b"(0, acelByObjs);
reduced = taskPool.reduce!"a + b"(0, acelByObjs);
}
Ali
More information about the Digitalmars-d-learn
mailing list