Thank you very much, that's exactly what I need!

On 24 April 2015 at 19:41, Jameson Nash <vtjn...@gmail.com> wrote:
> Julia's parallel constructs assume that globals are available on all
> processors, but will copy any locals used to every processor. So one way to
> fix your example is:
>
> julia> A = let t3=t3; pmap(i -> test2(t3[i], t, t2), 1:3); end
>
> On Fri, Apr 24, 2015 at 9:57 AM Archibald Pontier
> <archibald.pont...@gmail.com> wrote:
>>
>> Hi everyone,
>>
>> I have the following problem which originates from the fact that
>> SharedArray doesn't seem to accept composite types as argument. Consider the
>> following sequence (I started julia with -p 2):
>>
>> julia> @everywhere type T
>>        t::Array{Float64, 1}
>>        end
>>
>> julia> @everywhere type T2
>>        t::Array{Float64, 1}
>>        end
>>
>> julia> @everywhere type T3
>>        t::Array{Float64, 1}
>>        end
>>
>> julia> @everywhere function test(t::T, t2::T2, i)
>>        return T3([t.t[i], t2.t[i]]);
>>        end
>>
>> julia> @everywhere t = T(rand(3))
>>
>> julia> @everywhere t2 = T2(rand(3))
>>
>> julia> t3 = pmap(i -> test(t, t2, i), 1:3)
>> 3-element Array{Any,1}:
>>  T3([0.521706,0.0155359])
>>  T3([0.112277,0.59876])
>>  T3([0.0399843,0.373688])
>>
>> julia> @everywhere function test2(t3::T3, t::T, t2::T2)
>>        t.t[1] += t3.t[1];
>>        t2.t[2] += t3.t[2];
>>        return (t, t2);
>>        end
>>
>> julia> A = pmap(i -> test2(t3[i], t, t2), 1:3)
>> exception on exception on 2: 3: ERROR: t3 not defined
>>  in anonymous at none:1
>>  in anonymous at multi.jl:855
>>  in run_work_thunk at multi.jl:621
>>  in anonymous at task.jl:855
>> ERROR: t3 not defined
>>  in anonymous at none:1
>>  in anonymous at multi.jl:855
>>  in run_work_thunk at multi.jl:621
>>  in anonymous at task.jl:855
>> 2-element Array{Any,1}:
>>  UndefVarError(:t3)
>>  UndefVarError(:t3)
>>
>> The problem solves itself if I do @everywhere t3 = pmap(...), however from
>> my understanding this would only lead to every operation done on every
>> process, which defeats the purpose of doing things in parallel in the first
>> place. Am I wrong with this conclusion?
>>
>> Regards,
>> Archibald

Reply via email to