顺序种子生成并行的伪随机数流

时间:2013-10-02 21:04:28

标签: r random cluster-computing openmpi montecarlo

我需要以可复制的方式生成数百万个随机数组。阵列将在与OpenMPI连接的机器集群上生成。每个“任务”都需要一个包含数千个随机整数的独立数组。

我希望能够执行多次运行,以便可以复制任何给定的运行。该代码目前在R中,但我对多台机器上并行PRNG生成的一般原则比对OpenMPI或R细节更感兴趣。

理论上我可以在'master'上生成所有随机系列,然后将整个系列与任务一起发送给'slave',但这感觉很笨重。相反,我想在收到任务后在slave上生成随机序列。

目前,我在命令行上提供了一个随机数种子,主人用它来为从属生成一系列种子。为每个任务分配从该流顺序获取的种子。此种子将与任务详细信息一起发送给从属服务器。

主人:

srand(commandLineArg)
runParameters = stuff
for (1 .. numTasks) {
    slaveSeed =  rand()
    scheduleTask(slaveSeed, runParameters)
}

从(一个或多个):

srand(slaveSeed) 
for n (1 .. numPoints) {
    data[n] = rand()
}
return doStuff(data)
  1. 这是一种安全的方法吗?是百万系列产生的 从一百万种子流中读取一千个随机数 独立和随机顺序读取百万系列的一个 一个种子流中的一千个数字?

  2. 是否需要让master生成一系列随机slave 种子,或者使用简单的同样有效 奴隶系列(1..numTasks)?我宁可不加假 如果这一步只是一个游戏,那么安全感。

  3. 是否有可重复生成的最佳实践 以这种方式伪随机样本?我见过参考SPRNG 和L'Ecuyer接近。这些方法是否有益处 我已经描述过?

  4. 谢谢!

0 个答案:

没有答案