2014-07-13 2 views
1

에 함수에 DArray 액세스 나는 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 
+0

문제를 열면 답변을 얻을 가능성이 더 높다고 생각합니다. – StefanKarpinski

답변

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()" 

이 방법으로 분산 된 배열에 할당 할 수 있는지 여부를 나는 확실하지, 당신은 아마 새로운 하나를 (조각별로 조각) 만들; 이것은 cellular automaton example에서 이루어진 것입니다.