【发布时间】:2014-03-19 20:54:13
【问题描述】:
我正在尝试使用 Julia 并行实现代码。我正在使用 @everywhere 宏来让所有进程从 RemoteRef 获取数据。
是否可以使用仅在 @everywhere 表达式中的第一个进程上定义的变量名,并以某种方式指定我希望它向所有进程发送该变量的值,而不是变量名?
例子:
r = RemoteRef()
put(r, data)
@everywhere data = fetch(r)
这会返回一个错误,因为r 没有在所有进程上定义。
我应该如何将数据移动到所有进程?
另外,我可以告诉 Julia 在表达式中放入值而不是变量名吗?
类似于name = "John"; println("Hello, $name") 将如何打印"Hello, John"
【问题讨论】:
-
还有这个问题吗?我相信你可以做你想做的事,但是有很多问题,我不确定要解决哪个/如何解决。
-
我想我已经找到了一个解决方案,将数据作为一个函数的参数,我可以@spawnat 各种进程,但这不是一个很好的解决方案。任何帮助将非常感激。我需要告诉你什么?
-
很高兴您看到如何将数据作为
@spawnat的参数。如果可以在任何地方复制您的数据,还有其他选择……如果您使用的是 Linux,您也可以使用SharedArray。需要将数据移动保持在最低限度以提高效率。也许如果你写了一些关于你的“大图”,并行化选项可能会更清楚一些。 -
我正在尝试制作一个并行受限的 Boltzman 机器。每个进程拥有一部分训练示例。我想向每个进程发送权重矩阵,允许他们根据训练示例确定权重的更新,并将该更新发送回主进程。然后主进程计算新的权重矩阵并将其发送回所有其他进程,以便它们可以再次训练。
-
我刚刚回答了一个相关问题here 我认为我发布的功能应该可以帮助您完成所需的工作。
标签: multithreading parallel-processing julia