并行蒙特卡洛:再现性还是真正的随机性?

Parallel MonteCarlo: reproducibility or real randomness?

我正在准备并行计算的大学考试。 主要目的是尽可能地加速关于地球磁场中电子漂移的蒙特卡洛模拟。 我已经开发了具有两层并行化的东西:

问题来了:我想保持按需执行任务。 最快的计算机必须能够执行比较慢的计算机更多的工作。 问题划分是通过master-worker循环完成的,所以实现这个结果没有实际的斗争。

由于工人执行的任务数量(要模拟的 n 个电子块)没有事先定义,我有两条路可走:

  1. 每个 worker 中的每个线程都有自己的 RNG,用随机生成的种子(不同的生成方法)初始化。集群的不平衡会改变结果,但在这种方法中,结果尽可能随意。

  2. 每个电子都有自己的种子,尽管哪个工人 运行 是单一任务,但仍能保证模拟的可重复性。必须有更好的RNG。

让我们对此进行投票。你有什么建议?

玩得开心

女朋友

这里要投票什么?

显然,只有方法 2 是可行的。每个源粒子都从它自己的稳定种子开始。它使结果可重现和可调试(因为缺少更好的词)。

众所周知的 Monte Carlo 代码 MCNP5+ 很好地使用了这个方案,在多核和 MPI 上运行。要实现它,您需要具有快速向前跳过(a.k.a。蛙跳或丢弃)功能的 RNG。他们中有很多。它们基于快速指数计算,F. Brown 的论文,"Random Number Generation with Arbitrary Stride",Trans。是。核素。社会。 (1994 年 11 月)。基本上,向前跳过是使用 Brown 方法的 log(N)。

这里是最简单的版本,和MCNP5差不多https://github.com/Iwan-Zotow/LCG-PLE63

更复杂(更慢,但质量更高)的 RNG 在这里 http://www.pcg-random.org/