【问题标题】:Julia pmap: How to effectively send helper functions to other workers?Julia pmap:如何有效地将辅助函数发送给其他工作人员?
【发布时间】:2019-03-10 17:41:49
【问题描述】:

使用pmap 函数时,如果该函数未在任何工作进程上定义,则会发生错误。但是,当函数调用其他函数或在另一个.jl文件中使用其他函数时,在每个相关函数上使用@everywhere宏肯定不是一个好的解决方案。

有没有一种简洁的方法可以有效地将函数及其助手发送给所有可用的工作人员?

【问题讨论】:

  • 来吧#parallel-processing 伙计们 - 这是一个非常好的问题,有一个很好的答案。我们必须搁置它吗?

标签: parallel-processing julia


【解决方案1】:

我认为没有一个宏可以与函数定义一起使用来将其所有辅助函数的定义发送到所有工作进程。

但是,有更好的方法来发送您需要的所有函数,而不是在每个函数前面加上 @everywhere

您可以将所有这些函数放在一个文件中,并使用@everywhere include("mynewfile.jl") 在任何地方使用include。如果您的函数在另一个 .jl 文件中使用其他函数,则将另一个文件的 include 语句也放入 mynewfile.jl 中。如果您正在使用其他文件中的模块,请将 usingimport 语句放入 mynewfile.jl

以类似的方式,您可以使用@everywhere begin...end 块代替文件。将所有这些函数、usingimport 语句、includes 等放入一个begin...end 块中,并在begin 之前放置一个@everywhere。如果您正在使用 IJulia 笔记本,这将特别有用。

julia> @everywhere begin
           g(x) = x^2
           f(x) = g(x)*2
       end

julia> pmap(f, 1:5)
5-element Array{Int64,1}:
  2
  8
 18
 32
 50

您还可以创建模块/包并只使用一个@eveywhere using MyNewModule。如果您在包外使用模块,您还应该在任何地方包含该模块的定义/文件。

您可能会发现阅读the relevant manual entry. 很有用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 2016-05-29
    • 2021-04-20
    • 1970-01-01
    • 2012-05-18
    • 2017-11-06
    相关资源
    最近更新 更多