我注意到如果在if-else语句中定义了此函数的参数,则在@sync @parallel for
循环内运行函数会有问题。
示例1 :它无法正常工作
@everywhere function test_fun(arg)
println(arg);
end
flag = 1;
if flag == 1
asd = 123;
@sync @parallel for i=1:10
test_fun(asd);
end
end
示例2 :有效
@everywhere function test_fun(arg)
println(arg);
end
asd = 123;
@sync @parallel for i=1:10
test_fun(asd);
end
@everywhere asd = 123;
修复了上面定义的示例的问题,但在定义SharedArray时它不起作用:
示例3 :它不适用于@everywhere asd
@everywhere function test_fun(arg)
println(arg);
end
flag = 1;
if flag == 1
@everywhere asd = 123;
arr = SharedArray{Float64}(asd);
@sync @parallel for i=1:10
test_fun(arr);
end
end
有任何解决此问题的建议吗?