Julia:将 pmap 与矩阵一起使用
Julia: use of pmap with matrices
我对pmap的使用有疑问。我认为这是一个 simple/obvious 的答案,但仍然无法弄清楚!我目前 运行 一个循环,其中 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。
提前致谢。
大卫
这对我有用。
@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)
我对pmap的使用有疑问。我认为这是一个 simple/obvious 的答案,但仍然无法弄清楚!我目前 运行 一个循环,其中 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。
提前致谢。
大卫
这对我有用。
@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)