朱莉娅:使用带有矩阵的pmap

时间:2015-04-23 10:03:51

标签: parallel-processing julia

我对使用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。

提前致谢。

大卫

1 个答案:

答案 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)