Julia pmap:如何有效地将辅助函数发送给其他工人?

Jay*_*Ren 6 parallel-processing julia

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

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

hck*_*ckr 3

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

然而,有更好的方法来发送您需要的所有函数,而不是@everywhere在每个函数之前添加 。

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

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

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
Run Code Online (Sandbox Code Playgroud)

您还可以创建模块/包并仅使用单个@eveywhere using MyNewModule. 如果您在包外部使用模块,则还应该在各处包含该模块的定义/文件。

您可能会发现阅读相关手册条目很有用。