我对使用pmap有疑问。我认为这是一个简单/明显的答案,但仍然无法弄清楚!我目前正在运行一个循环,其中50个迭代中的每一个都是独立的,因此应该可以并行运行它并且应该提高速度。它使用具有多个输入和输出的函数,它们都是向量和标量的混合。我需要为50次迭代中的每次迭代保存函数的输出以供以后使用。以下是不并行时代码的基础知识。
A=Array(Float64, 500,50)
b=Array(Float64,50)
for i in 1:50
A[:,i],b[i] = func(i,x,y,z)
end
关于如何实现这一点的任何建议都是平行的?我正在使用v0.3 Julia。
提前致谢。
大卫
答案 0 :(得分:1)
这对我有用。
@everywhere x,y,z = 1,2,3
@everywhere function f(i,x,y,z)
sleep(1)
return(ones(500)*i, i+x+y+z)
end
naive = @time map(i -> f(i,x,y,z), 1:50)
parallel = @time pmap(i -> f(i,x,y,z), 1:50)
A = [x[1] for x in parallel]
b = [x[2] for x in parallel]
让我知道是否有人可以建议一种更优雅的方式来获取由pmap生成的元组数组中的A和b。
时间(在8个进程上运行时)正如我们所期望的那样
elapsed time: 5.063214725 seconds (94436 bytes allocated)
elapsed time: 0.815228485 seconds (288864 bytes allocated)