使用GPU随机数

时间:2010-06-26 18:58:53

标签: c cuda gpu gsl

我正在研究使用nvidia GPU进行蒙特卡罗模拟。但是,我想使用gsl随机数生成器以及并行随机数生成器,如SPRNG。有谁知道这是否可行?

更新

我使用GPU玩过RNG。目前还没有一个很好的解决方案。 SDK附带的Mersenne Twister并不适合(我的)Monte-Carlo模拟,因为生成种子需要相当长的时间。

NAG库更有前景。您可以批量生成RN,也可以在单个线程中生成RN。但是,目前仅支持少量分布 - Uniform,exponential和Normal。

7 个答案:

答案 0 :(得分:5)

GPU需要大规模并行随机生成是一个难题。这是一个活跃的研究课题。你必须要小心,不仅要有一个好的顺序随机生成器(你在文献中找到),而是要保证它们独立。成对独立性不足以进行良好的蒙特卡罗模拟。 AFAIK没有好的公共域代码。

答案 1 :(得分:5)

GSL手册recommends the Mersenne Twister

Mersenne Twister的作者有一个version for Nvidia GPUs。我考虑将此移植到R包gputools,但发现我需要过多的绘图(数百万,我认为)之前'生成GPU并使R可用'的组合比仅仅绘制更快R(仅使用CPU)。

这实际上是一种计算/通信权衡。

答案 2 :(得分:5)

我和我的同事preprint, to appear in the SC11 conference重新考虑了一种替代技术,用于生成非常适合GPU的随机数。这个想法是第n个随机数是:

x_n = f(n) 

与传统方法相比

x_n = f(x_{n-1})

Source code可用,它实现了几个不同的生成器。提供2 ^ 64或更多的流,每个流的周期为2 ^ 128或更多。所有这些都通过了各种各样的测试(TestU01 Crush和BigCrush套件),包括流内和流间统计独立性。该库还包括允许您在GSL框架中使用我们的生成器的适配器。

答案 3 :(得分:2)

我刚刚发现NAG提供了一些RNG routines。这些图书馆免费供学者使用。

答案 4 :(得分:0)

使用CUDA SDK中提供的Mersenne Twister PRNG。

答案 5 :(得分:0)

这里我们在GPU上使用sobol序列。

答案 6 :(得分:-2)

您必须自己实施。