GPU上的蒙特卡洛

MPę*_*ski 5 random gpu seed montecarlo

今天我和我的一个朋友谈过,告诉我他试图用GPU进行一些蒙特卡罗模拟.有趣的是,他告诉我,他想在不同的处理器上随机抽取数字,并假设存在不相关的数字.但他们不是.

问题是,是否存在在多个GPU上绘制独立数字集的方法?他认为为每个人拿一个不同的种子可以解决问题,但事实并非如此.

如果需要任何澄清请告诉我,我会请他提供更多细节.

csg*_*pie 5

要生成完全独立的随机数,您需要使用并行随机数生成器.基本上,您选择单个种子并生成M个独立的随机数流.因此,在每个M GPU上,您可以从独立流生成随机数.

处理多个GPU时,您需要注意以下内容:

  • GPU内的独立流(如果每个GPU生成RN)
  • GPU之间的独立流.

事实证明,在每个GPU内核上生成随机数很棘手(请参阅我回答过的问题).当我一直在玩GPU和RN时,如果你一次生成大数字,你只能在GPU上随机生成加速.

相反,我会在CPU上生成随机数,因为:

  • 在CPU上生成它们并进行传输更容易,有时更快.
  • 您可以使用经过良好测试的并行随机数生成器
  • 可用于GPU的现成随机数发生器的类型非常有限.
  • 当前GPU随机数库仅从少量分布生成RN.

在评论中回答你的问题:随机数取决于什么?

非常基本的随机数发生器是线性同余发生器.尽管这种发生器已被新方法所超越,但它应该让您了解它们的工作原理.基本上,第i个随机数取决于(i-1)随机数.正如您所指出的,如果您运行两个足够长的流,它们重叠.最大的问题是,你不知道什么时候会重叠.