Wil*_*ado 3 cuda gpu gpgpu prng
我正在阅读 CURAND 库 API,我是 CUDA 的新手,我想看看是否有人能真正向我展示一个使用 CURAND 库生成随机数的简单代码。我正在考虑生成大量数字以用于离散事件模拟。我的任务只是开发算法以使用 GPGPU 来加速随机数生成。我已经在标准 C 语言编程中实现了 LCG、乘法和斐波那契方法。然而,我想将这些代码“移植”到 CUDA 中,并利用线程和块来加速生成随机数的过程。
链接1: http: //adnanboz.wordpress.com/tag/nvidia-curand/
那个人有我需要的两种方法(LCG 和 Mersenne Twister),但代码没有提供太多细节。我想知道是否有人可以扩展这些最初的实现,以实际为我指明如何正确使用它们的正确方向。
谢谢!
您的问题具有误导性 - 您说“使用 cuRAND 傻瓜库”,但您实际上并不想使用 cuRAND。如果我理解正确的话,您实际上想从头开始实现自己的RNG,而不是使用 cuRAND 中提供的优化 RNG。
附带说明一下,请记住,虽然简单的 LCG 速度快且易于跳过,但它们通常具有相当差的统计特性,尤其是在使用大量抽奖时。当您说您需要“Mersenne Twister”时,我假设您指的是 MT19937。引用的 Gems 书籍讨论了并行化 MT19937,但最初的开发人员创建了 MTGP 生成器(上面也提到了),因为 MT19937 实现跳过相当复杂。
另外,作为另一个旁注,仅使用不同的种子来实现并行化通常是一个坏主意,从统计角度来看,您无法保证独立性。您要么需要向前跳过或蛙跳,要么使用其他一些技术(例如DCMT)来确保序列之间不存在相关性。