使用GPU随机数

csg*_*pie 9 c cuda gpu gsl

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

更新

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

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

Dir*_*tel 6

GSL手册推荐Mersenne Twister.

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

它实际上是一种计算/通信权衡.


jks*_*jks 6

我的同事和我有一个预印本,出现在SC11会议上,重新审视了一种替代技术,用于生成非常适合GPU的随机数.这个想法是第n个随机数是:

x_n = f(n) 
Run Code Online (Sandbox Code Playgroud)

与传统方法相比

x_n = f(x_{n-1})
Run Code Online (Sandbox Code Playgroud)

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


Jen*_*edt 5

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