我正在阅读CURAND Library API,我是CUDA的新手,我想看看是否有人能够真正向我展示一个使用CURAND库生成随机数的简单代码。我正在研究生成大量数字以用于离散事件模拟。我的任务是开发算法以使用GPGPU来加速随机数生成。我在标准C语言编程中实现了LCG,Multiplicative和Fibonacci方法。但是,我想将这些代码“移植”到CUDA中,并利用线程和块来加速生成随机数的过程。
链接1:http://adnanboz.wordpress.com/tag/nvidia-curand/
那个人有两种我需要的方法(LCG和Mersenne Twister),但代码没有提供太多细节。我想知道是否有人可以扩展这些初始实现,实际上指出我正确的方向如何正确使用它们。
谢谢!
答案 0 :(得分:4)
您的问题具有误导性 - 您说“使用cuRAND Library for Dummies”但您实际上并不想使用cuRAND。如果我理解正确,您实际上想要从头开始实施您自己的 RNG,而不是使用cuRAND中提供的优化RNG。
作为旁注,请记住,虽然简单的LCG快速且易于跳过,但它们通常具有fairly poor statistical properties,尤其是在使用大量绘图时。当你说你需要“Mersenne Twister”时,我认为你的意思是MT19937。引用的Gems书讨论了并行化MT19937,但原始开发人员创建了MTGP生成器(也在上面引用),因为MT19937实现跳过是相当复杂的。
另外,另一方面注意,仅使用不同的种子实现并行化通常是一个坏主意,从统计上来说,您无法确保独立性。您需要跳过或跳跃,或者使用其他技术(例如DCMT)来确保序列之间没有相关性。