如果我有以下 Julia 代码片段,有什么方法可以运行具有多个进程的 for
循环,而无需将complicated
放入额外的文件中并执行类似 @everywhere include("complicated.jl")
的操作?
否则,进程似乎无法找到该功能。
function complicated(x)
# long and complicated computation
x^2
end
function run()
results = []
for i in 1:4
push!(results, @spawn complicated(3))
end
return mean(results)
end
只需使用宏注释要在
所有处理器中定义的表达式@everywhere
(在 Julia 中,一切都是表达式(:
julia> addprocs(Sys.CPU_CORES)
12-element Array{Int64,1}:
2
3
4
5
6
7
8
9
10
11
12
13
julia> @everywhere function complicated(x)
# long and complicated computation
x^2
end
julia> function main()
@sync results = @parallel vcat for i in 1:4
complicated(3)
end
return mean(results)
end
main (generic function with 1 method)
julia> main()
9.0
注意:run
是 Base
中已经存在的函数。