You’ll need to evaluate the type definition on all processes, using the
macro
@everywhere type parms
...
end
*after* adding the worker process. If I do that, I can run your code
without error. (However, k seems to be unchanged - you might have to use a
DArray (distributed array) in order to get the changes back to the main
thread…)
// T
On Tuesday, June 17, 2014 12:27:52 PM UTC+2, Jon Norberg wrote:
I have:
>
> type parms
> r::Float64
> K::Float64
> end
>
> k=Array(parms,20)
>
> for i =1:20 k[i]=parms(1.1,2.2) end
>
> addprocs(1)
>
> nprocs() -> 2
>
> @parallel for i=1:20 k[i].r=2.0 end
>
> gives error:
>
> julia> @parallel for i=1:20 k[i].r=2.0 end
> fatal error on 2:
> julia> ERROR: parms not defined
> in deserialize at serialize.jl:470
> in handle_deserialize at serialize.jl:327
> in deserialize at serialize.jl:398
> in handle_deserialize at serialize.jl:327
> in deserialize at serialize.jl:310
> in anonymous at serialize.jl:330
> in ntuple at tuple.jl:30
> in deserialize_tuple at serialize.jl:330
> in handle_deserialize at serialize.jl:322
> in deserialize at serialize.jl:368
> in handle_deserialize at serialize.jl:327
> in deserialize at serialize.jl:310
> in anonymous at serialize.jl:330
> in ntuple at tuple.jl:30
> in deserialize_tuple at serialize.jl:330
> in handle_deserialize at serialize.jl:322
> in deserialize at serialize.jl:368
> in handle_deserialize at serialize.jl:327
> in anonymous at task.jl:835
> Worker 2 terminated.
>
> Do I need to share the k array or somehow let the parallel code know how
> to handle an array of type parms?
>
> Thanks for any help here!
>
> Jon
>