【问题标题】:Monte carlo on GPUGPU 上的蒙特卡罗
【发布时间】:2014-02-02 22:08:29
【问题描述】:

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

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

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

【问题讨论】:

  • 你是如何确定它们不相关的?
  • 不是我,但据我了解,他正在计算在 不同 核心上生成的 随机 数之间的普通相关性显卡。我不太了解如何生成随机数,所以另一个问题是“随机”数取决于什么?像 cpu/gpu 循环还是什么?
  • 他可以从硬件或某些软件中生成随机数。可能是一个伪随机生成器,他在其中提供种子。他可以声称相关性,但他需要证明相关性在统计上不同于 0,并且样本量非常大。
  • 但是,例如,如果一个数字的随机性取决于 CPU。然后在每个 GPU 上设置不同的种子将无济于事,因为它只会占用相同序列的另一部分 - 据我了解设置种子的想法。
  • 他可能会在每个种子上设置不同的种子,以确保序列不相同。

标签: random gpu seed montecarlo


【解决方案1】:

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

在处理多个 GPU 时,您需要知道自己想要什么:

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

事实证明,在每个 GPU 内核上生成随机数是很棘手的(请参阅 this question 我不久前问过)。当我一直在玩 GPU 和 RN 时,如果你一次生成大量数字,你只能在 GPU 上生成随机数。

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

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

在 cmets 中回答您的问题:随机数取决于什么?

一个非常基本的随机数生成器是linear congruential generator。尽管这个生成器已经被更新的方法所超越,它应该让你了解它们是如何工作的。基本上,第 i 个随机数取决于 (i-1) 个随机数。正如您所指出的,如果您运行两个流的时间足够长,它们重叠。最大的问题是,你不知道它们什么时候会重叠。

【讨论】:

    【解决方案2】:

    要生成 iid 统一变量,您只需使用不同的种子初始化生成器。借助 Cuda,您可以使用实现 Mersenne Twister 生成器的 NVIDIA Curand 库。

    例如,下面的代码由 100 个内核并行执行,将抽取 10 个 (R^10)-uniform 的样本

    __global__ void setup_kernel(curandState *state,int pseed)
    {
        int id =  blockIdx.x * blockDim.x + threadIdx.x;
        int seed = id%10+pseed;
    
        /* 10 differents seed for uncorrelated rv, 
        a different sequence number,    no offset */
        curand_init(seed, id, 0, &state[id]);
    }
    

    【讨论】:

    • “并行 100 个内核”是指并行 100 个线程吗?
    【解决方案3】:

    如果您使用任何“好的”生成器(例如 Mersenne Twister 等),具有不同随机种子的两个序列将不相关,无论是在 GPU 还是 CPU 上。因此,我不确定您所说的在不同的 GPU 上采用不同的种子是什么意思是不够的。你能详细说明一下吗?

    【讨论】:

      猜你喜欢
      • 2018-04-28
      • 1970-01-01
      • 2020-03-26
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 2020-05-18
      • 2023-03-02
      • 2019-10-07
      相关资源
      最近更新 更多