写入同一文件的并行模拟

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().

生成的所有结果组成的数组