【发布时间】:2016-10-06 10:48:20
【问题描述】:
我找到了这篇文章 - Shared array usage in Julia,显然很接近,但我仍然不明白在我的情况下该怎么做。
我正在尝试将共享数组传递给我定义的函数,并使用@everywhere 调用该函数。以下没有共享数组的工作:
@everywhere mat = rand(3,3)
@everywhere foo1(x::Array) = det(x)
那么这个
@everywhere println(foo1(mat))
正确地从每个工人那里产生不同的结果。现在让我包含一个共享数组:
test = SharedArray(Float64,10)
@everywhere foo2(x::Array,y::SharedArray) = det(x) + sum(y)
那么这个
@everywhere println(foo2(mat,test))
工人失败了。
ERROR: On worker 2:
UndefVarError: test not defined
等等。我可以像这样得到我想要的:
for w in procs()
@spawnat w println(foo2(eval(:mat),test))
end
这行得通 - 但它是最优的吗?有没有办法让它与@everywhere 一起工作?
【问题讨论】:
-
你试过@everywhere test =...吗?
-
您能否发布一个可重现的示例,说明您在使用
@spawn时遇到了性能问题?我认为您使用@spawn发布的示例末尾没有任何问题,我也无法重现它的性能问题。 -
在玩更多的东西时,我开始相信,@aireties,性能问题与任何地方的使用无关。我想我在进行比较时混合了其他一些代码差异。所以我为这个不当的帖子道歉。不确定现在应该采取什么正确措施 - 删除帖子?
-
我认为您不需要删除该帖子,只需稍微编辑一下即可。您报告的最初错误是我认为其他用户可能会遇到的错误,@tholy 的回答对此很有用。我只想删除帖子中对减速的引用,并留下有关错误消息的信息。实际上,我认为您最初提出的问题很好。