写入同一文件的并行模拟
Parallel simulations writing on the same file
我的目标是 运行 在集群上并行进行 10,000 次左右的 Julia 编码模拟(每个模拟都独立于所有其他模拟)。每个模拟都有一个要输出的数字(以及关于哪个模拟产生了这个数字的 3 列信息)。因此,强制每个模拟打印在一个单独的文件上对我来说听起来有点愚蠢。
我能否安全地要求所有这些模拟写入同一个文件,或者如果两个模拟碰巧同时写入文件,这可能会导致错误吗?最佳解决方案是什么?
这里是一个简单的例子,其中一组 10000 个独立模拟可以在 Julia 中并行设置为 运行,使用 pmap()
:
@everywhere function simulate(i)
# we compute the simulation results here. In this case we just return
# the simulation number and a random value
x = rand()
return (i,x)
end
x = pmap(simulate,1:10000)
# x is the array of tuples returned from all the simulations
showall(x)
# ... or we could write x to a file or do something else with it
需要 @everywhere
来确保 simulate()
函数对所有进程可用,而不仅仅是一个进程可用。 pmap()
为第二个参数中的每个值并行调用 simulate()
一次,returns 由 simulate()
.
生成的所有结果组成的数组
我的目标是 运行 在集群上并行进行 10,000 次左右的 Julia 编码模拟(每个模拟都独立于所有其他模拟)。每个模拟都有一个要输出的数字(以及关于哪个模拟产生了这个数字的 3 列信息)。因此,强制每个模拟打印在一个单独的文件上对我来说听起来有点愚蠢。
我能否安全地要求所有这些模拟写入同一个文件,或者如果两个模拟碰巧同时写入文件,这可能会导致错误吗?最佳解决方案是什么?
这里是一个简单的例子,其中一组 10000 个独立模拟可以在 Julia 中并行设置为 运行,使用 pmap()
:
@everywhere function simulate(i)
# we compute the simulation results here. In this case we just return
# the simulation number and a random value
x = rand()
return (i,x)
end
x = pmap(simulate,1:10000)
# x is the array of tuples returned from all the simulations
showall(x)
# ... or we could write x to a file or do something else with it
需要 @everywhere
来确保 simulate()
函数对所有进程可用,而不仅仅是一个进程可用。 pmap()
为第二个参数中的每个值并行调用 simulate()
一次,returns 由 simulate()
.