并行MonteCarlo:可重复性还是真实随机性?

时间:2015-03-11 15:51:00

标签: multithreading random parallel-processing montecarlo

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

  • MPI用于在多台机器上运行代码
  • OpenMP在单台计算机内运行并行仿真

现在出现了一个问题:我希望按需执行任务。 最快的计算机必须能够在较慢的计算机上执行更多的工作。 问题分区是通过主工作循环完成的,因此实现此结果并没有实际的困难。

由于工人执行的任务数量(一组n个电子模拟)未事先确定,我有两条道路要遵循:

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

  2. 每个电子都有自己的种子,无论哪个工人执行单个任务,都可以重现模拟。必须有更好的RNG。

  3. 让我们对此进行调查。你的建议是什么?

    玩得开心

    GF

1 个答案:

答案 0 :(得分:2)

这里要点什么?

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

众所周知的蒙特卡罗代码MCNP5 +使用此方案,在多核和MPI上运行。要实现它,您需要具有快速跳过(a.k.a.piapfrog或discard)功能的RNG。其中有不少。它们基于快速指数计算,F.Brown撰写的论文,"随机数生成与任意步幅",Trans。上午。核酸研究SOC。 (1994年11月)。基本上,跳过是使用Brown方法的log(N)。

与MCNP5大致相同的最简单版本https://github.com/Iwan-Zotow/LCG-PLE63

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