Tôi cần phải song song một tác vụ nhất định đối với một số công nhân. Với mục đích đó, tôi cần tất cả các công nhân để có quyền truy cập vào một ma trận lưu trữ dữ liệu.Sử dụng mảng được chia sẻ trong Julia
Tôi nghĩ rằng ma trận dữ liệu có thể được triển khai như một mảng được chia sẻ để giảm thiểu chuyển động dữ liệu.
Để cho tôi bắt đầu với Shared Mảng, tôi đang cố gắng như sau ví dụ rất đơn giản mà mang lại cho tôi, những gì tôi nghĩ là, hành vi bất ngờ:
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ệnh cuối cùng mang lại cho tôi những lỗi sau:
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
Tôi nghĩ rằng mảng chung D sẽ hiển thị cho tất cả công nhân? Tôi rõ ràng thiếu một cái gì đó cơ bản. Cảm ơn trước.
Giải thích của bạn về việc chia sẻ _declaration_ rất hữu ích. Cảm ơn. – user1438310