9

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

更新

我玩过使用 GPU 的 RNG。目前没有很好的解决方案。SDK 附带的 Mersenne Twister 并不真正适合(我的)蒙特卡罗模拟,因为生成种子需要非常长的时间。

NAG 库更有希望。您可以批量或在单个线程中生成 RN。但是,目前仅支持少数分布 - 均匀、指数和正态。

4

7 回答 7

7

GSL 手册推荐使用 Mersenne Twister

Mersenne Twister 作者有一个适用于 Nvidia GPU 的版本。我考虑将它移植到 R 包gputools中,但发现在“生成 GPU 并提供给 R”的组合比仅在 R 中绘图(仅使用中央处理器)。

这确实是计算/通信的权衡。

于 2010-06-29T16:24:46.767 回答
6

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

x_n = f(n) 

与传统方法相比,其中

x_n = f(x_{n-1})

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

于 2011-10-11T14:11:28.107 回答
5

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

于 2010-06-26T20:57:10.707 回答
2

我刚刚发现 NAG 提供了一些 RNG例程。这些图书馆对学者免费。

于 2010-06-28T08:41:16.260 回答
0

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

于 2010-06-29T16:16:18.207 回答
0

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

于 2010-06-29T16:13:46.930 回答
-2

您必须自己实施它们。

于 2010-06-26T19:11:12.327 回答