gpt4 book ai didi

CUDA - 为傻瓜使用 CURAND 库

转载 作者:行者123 更新时间:2023-12-01 02:40:51 25 4
gpt4 key购买 nike

我正在阅读 CURAND 库 API,我是 CUDA 的新手,我想看看是否有人真的可以向我展示一个使用 CURAND 库生成随机数的简单代码。我正在研究生成大量数字以用于离散事件模拟。我的任务只是开发使用 GPGPU 加速随机数生成的算法。我已经在标准 C 语言编程中实现了 LCG、乘法和 Fibonacci 方法。但是我想将这些代码“移植”到 CUDA 中并利用线程和 block 来加速生成随机数的过程。

链接 1:http://adnanboz.wordpress.com/tag/nvidia-curand/

那个人有我需要的两种方法(LCG 和 Mersenne Twister),但代码没有提供太多细节。我想知道是否有人可以扩展这些初始实现,从而为我指明正确使用它们的正确方向。

谢谢!

最佳答案

您的问题具有误导性 - 您说“为傻瓜使用 cuRAND 库”,但您实际上并不想使用 cuRAND。如果我理解正确的话,您实际上想要从头开始实现您自己的 RNG,而不是使用 cuRAND 中可用的优化 RNG。

  1. 第一个建议是重新审视您使用自己的 RNG 的决定,为什么不使用 cuRAND?如果统计属性适合您的应用程序,那么您最好使用 cuRAND,因为它已针对所有世代的 GPU 进行了调整。它包括 Marsaglia 的 XORWOW、l'Ecuyer 的 MRG32k3a 和 MTGP32 Mersenne Twister(以及用于 Quasi-RNG 的 Sobol)。
  2. 您还可以查看 Thrust ,其中有一些简单的 RNG,例如请参阅 Monte Carlo sample .
  3. 如果您真的需要创建自己的生成器,那么GPU Computing Gems 中有一些有用的技术。 ( Jade 版,第 16 章:随机数生成器的并行化技术)。

作为旁注,请记住虽然简单的 LCG 快速且易于跳过,但它们通常具有 fairly poor statistical properties特别是在使用大量绘图时。当您说您需要“Mersenne Twister”时,我假设您指的是 MT19937。引用的 Gems 书讨论了并行化 MT19937,但最初的开发人员创建了 MTGP 生成器(也在上面引用),因为 MT19937 实现跳过相当复杂。

另请注意,仅使用不同的种子来实现并行化通常不是一个好主意,从统计上讲,您无法保证独立性。您需要跳过或蛙跳,或者使用其他一些技术(例如 DCMT )来确保序列之间没有相关性。

关于CUDA - 为傻瓜使用 CURAND 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11728714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com