我的目标是在群集上并行运行10,000个左右的Julia编码模拟(每个模拟独立于所有其他模拟)。每个模拟都有一个数字输出(以及有关哪个模拟产生此数字的3列信息)。因此,强制每个模拟在单独的文件上打印对我来说听起来有点愚蠢。
我可以安全地要求所有这些模拟在相同的文件上写入,或者如果两次模拟恰好在同一时间写入文件,这可能会导致错误吗?什么是最好的解决方案?
答案 0 :(得分:4)
以下是使用pmap()
设置一组10000个独立模拟以在Julia中并行运行的一种方式的简短示例:
@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()
一次,并返回由simulate()
生成的所有结果的数组。