I'm trying to understand the most Julian way to perform a particular
parallel programming task. Suppose I need function foo from module.jl to be
available everywhere. Let's call the following code map_foo.jl:
@everywhere include("module.jl")
@everywhere using MyModule
pmap(foo,1:100)
That works fine, except when module.jl itself has other dependencies on
other modules:
module MyModule
using DataStructures
export foo
function foo(i)
return Queue(i)
end
end # module
In this case, it works to call
julia map_foo.jl
but when I call
julia -p 2 map_foo.jl
I get the following error
Warning: requiring "DataStructures" did not define a corresponding module.
Warning: requiring "DataStructures" did not define a corresponding module.
exception on exception on 2: 3: ERROR: ERROR: Queue not definedQueue not
defined
in
in foo at /Users/madeleineudell/Dropbox/pestilli_icme_life
(1)/src/julia/questions/module.jl:7
in anonymous at multi.jl:834
in run_work_thunk at multi.jl:575
in anonymous at task.jl:834
foo at /Users/madeleineudell/Dropbox/pestilli_icme_life
(1)/src/julia/questions/module.jl:7
in anonymous at multi.jl:834
in run_work_thunk at multi.jl:575
in anonymous at task.jl:834
Does anyone know how I can successfully chain dependencies like this when
using parallelism? Calling @everywhere on the import call in module.jl also
doesn't fix the problem, strangely enough.
Of course, if I could put all my code into shared memory, I'd be much
happier. I just saw an update <https://github.com/JuliaLang/julia/pull/4939>
adding
shared memory arrays, but I don't know if there's a way to get shared
memory code!