As a convention, one should not normally call `map` with a function that
mutates it's inputs,
Map comes from the world of functional programming, so assumes to run on
pure functions (ie those without side-effects -- such as changing the
inputs).
Now in the julia implementation of map, it is basically a forloop so nonput
functions work fine.
The implementation of pmap on the other hand is not a forloop.
copys chunks of the input vector to other processes,
and then asks each section to call the function on these copies, and return
a vector of the functions return results.
So the copies are modified and then discared on each process.
The function will return `a,a+b*c`
---
On Tuesday, 16 June 2015 22:49:10 UTC+8, Chris wrote:
>
> Hello,
>
> I am having some issues using pmap(). I constructed a basic example that
> illustrates the problem I'm seeing:
>
> *in "partest.jl":*
> module MyMod
> type mytype
> a::Float64
> b::Int64
> c::Float64
> end
>
> function myfun!(a,b,c)
> a.a += b*c
> end
>
> function mywrapper!(s)
> pmap( x->myfun!(x,1.,1.), s )
> end
> end
>
> *In the Julia REPL:*
> include("partest.jl")
> addprocs(4)
> @everywhere using MyMod
> v = [MyMod.mytype(randn(i)[1],i,0.) for i = 1:1000];
> MyMod.mywrapper!(v);
>
> I expect the elements of v to be changed according to the operation in
> myfun!, but they are not. What am I doing wrong here?
>
> Thanks,
> Chris
>