Muszę wykonać paralelne określone zadanie dla wielu pracowników. W tym celu potrzebuję wszystkich pracowników, aby mieli dostęp do macierzy przechowującej dane.Współdzielone użycie macierzy w Julii
Myślałem, że matryca danych może być zaimplementowana jako współdzielona macierz w celu zminimalizowania ruchu danych.
W celu zaczynaj mi ze Wspólną tablic, próbuję następujący bardzo prosty przykład, który daje mi, co ja myślę, nieoczekiwane zachowanie:
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))
Ostatnia komenda daje mi następujący błąd:
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
Myślałem, że wspólna tablica D powinna być widoczna dla wszystkich pracowników? Ja wyraźnie brakuje czegoś podstawowego. Z góry dziękuję.
Twoje wyjaśnienie dotyczące dzielenia się _deklaracją_ jest bardzo pomocne. Dzięki. – user1438310