Parallel processing 朱莉娅:在处理器上的函数中访问DArray
我创建了一个DArray:Parallel processing 朱莉娅:在处理器上的函数中访问DArray,parallel-processing,julia,pmap,Parallel Processing,Julia,Pmap,我创建了一个DArray: d = dzeros(3) 现在我想使用pmap并行运行一个函数。我希望该函数能够访问当前处理器上本地的d的任何部分。差不多 function foo() global d a = localpart(d) a[1] = 1 end 然而,我明白了 exception on 2: exception on 4: ERROR: d not defined in mcmc_sub! at /home/benjamin/.julia/v0.3/
d = dzeros(3)
现在我想使用pmap并行运行一个函数。我希望该函数能够访问当前处理器上本地的d的任何部分。差不多
function foo()
global d
a = localpart(d)
a[1] = 1
end
然而,我明白了
exception on 2: exception on 4: ERROR: d not defined
in mcmc_sub! at /home/benjamin/.julia/v0.3/Mamba/src/model/mcmc.jl:67
in anonymous at multi.jl:847
in run_work_thunk at multi.jl:613
in anonymous at task.jl:847
在每个过程中
应在每个处理器上定义d。例如,这样的代码可以工作:
julia> d = dzeros(3)
3-element DArray{Float64,1,Array{Float64,1}}:
0.0
0.0
0.0
julia> @spawnat(2, (a = localpart(d); a[1]=1;))
RemoteRef(2,1,65)
julia> d
3-element DArray{Float64,1,Array{Float64,1}}:
1.0
0.0
0.0
我不完全确定是否会发生复制,但我的理解是,您可以将
d
作为参数传递(它是对整个事件的引用,传递它不会移动数据)
简单的例子:
function foo(d, u)
r, = myindexes(d)
return u * 100000 + sum(d[r])
end
function main()
d = distribute(1:100)
show(pmap(x-> foo(d, x), 1:10))
end
# julia -p 2 -L test.jl -e "main()"
我不确定您是否可以通过这种方式分配给分布式阵列,您可能希望创建一个新阵列(逐块);这就是在中所做的。我认为如果你打开一个问题,你更有可能得到答案。