1

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/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
4

1 に答える 1

1

コピーが発生しないかどうかは完全にはわかりませんが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()"

この方法で分散配列に割り当てることができるかどうかはわかりませんが、おそらく新しい配列を作成する必要があります(ピースごとに)。これがセルオートマトンの例で行われていることです。

于 2014-07-14T03:45:54.343 に答える