用于集群环境的伪随机数发生器

Cha*_*net 10 random parallel-processing prng mersenne-twister

如何在集群上生成独立的伪随机数,例如蒙特卡罗模拟?我可以有很多计算节点(例如100),我需要在每个节点上生成数百万个数字.我需要保证一个节点上的PRN序列不会与另一个节点上的PRN序列重叠.

  • 我可以在根节点上生成所有PRN,然后将它们发送到其他节点.但这太慢了.
  • 我可以在每个节点上跳到序列中的已知距离.但对于Mersenne-Twister或任何其他优秀的PRNG,是否有这样的算法,可以在合理的时间和内存下完成?
  • 我可以在每个节点上使用不同的生成器.但是有没有像Mersenne-Twister这样的优秀发电机?怎么可能呢?
  • 还有其他吗?

jop*_*rat 11

您永远不应该使用从相同原始流获取的可能重叠的随机流.如果您尚未测试生成的交错流,则不了解其统计质量.

幸运的是,Mersenne Twister(MT)将帮助您完成分发任务.使用其专用算法,称为Dynamic Creator(以下称为DC),您可以创建独立的随机数生成器,以生成高度独立的随机流.

将在将使用它的节点上创建每个流.基本上,将DC视为面向对象范例中的构造函数,它创建了不同的MT实例.每个不同的实例被设计为产生高度独立的随机序列.

你可以在这里找到DC:http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/DC/dc.html
它非常简单易用,你可以修复不同的参数,例如您想要获取的不同MT实例的数量或这些MT的周期.根据其输入参数,DC将运行时将更改.

除了DC附带的自述文件外,还可以查看example/new_example2.cDC存档中的文件.它显示了在给定不同输入标识符的情况下获取独立序列的调用示例,这基本上是您必须识别集群作业的内容.

最后,如果您打算进一步了解如何在并行或分布式环境中使用PRNG,我建议您阅读以下科学文章:

用于随机高性能计算的随机流的实际分布,David RC Hill,2010年高性能计算与仿真国际会议(HPCS)

  • 我希望有一个数学证明.不幸的是,没有!我正在高性能环境中进行随机模拟的博士学位,所以我已经广泛研究了这个问题.基本上,如果您没有内存限制(MT的族状态向量非常大),这种方法实际上是确保序列之间高度独立性的最佳方法.我在上面引用的吹笛者中调查了其他方法,但作者支持DCMT的参数化方法. (2认同)