Ho bisogno di parallelizzare un determinato compito su un numero di lavoratori. A tale scopo ho bisogno che tutti i lavoratori abbiano accesso a una matrice che memorizza i dati.Utilizzo dell'array condiviso in Julia
Ho pensato che la matrice di dati potesse essere implementata come una matrice condivisa al fine di ridurre al minimo lo spostamento dei dati.
Per farmi iniziare con le matrici condivise, sto cercando il seguente esempio molto semplice che mi dà, quello che penso è, un comportamento imprevisto:
julia -p 2
# the data matrix
D = SharedArray(Float64, 2, 3)
# initialise the data matrix with dummy values
for ii=1:length(D)
D[ii] = rand()
end
# Define some kind of dummy computation involving the shared array
f = x -> x + sum(D)
# call function on worker
@time fetch(@spawnat 2 f(1.0))
L'ultimo comando mi dà il seguente errore:
ERROR: On worker 2:
UndefVarError: D not defined
in anonymous at none:1
in anonymous at multi.jl:1358
in anonymous at multi.jl:904
in run_work_thunk at multi.jl:645
in run_work_thunk at multi.jl:654
in anonymous at task.jl:58
in remotecall_fetch at multi.jl:731
in call_on_owner at multi.jl:777
in fetch at multi.jl:795
Ho pensato che l'array D condiviso dovrebbe essere visibile a tutti i lavoratori? Mi manca chiaramente qualcosa di base. Grazie in anticipo.
tua spiegazione di condividere la _declaration_ è molto utile. Grazie. – user1438310