生成随机数:CPU与GPU,目前胜出?

时间:2014-01-07 11:37:42

标签: c++ optimization random cuda hardware

我一直致力于物理模拟,需要生成大量的随机数(如果你想要一个想法,至少需要10 ^ 13)。我一直在使用Mersenne twister的C ++ 11实现。我还读到,同一算法的GPU实现现在是Cuda库的一部分,并且GPU在此任务中可以非常高效;但我找不到明确的数字或​​基准比较。例如,与8核i7相比,上一代的Nvidia卡在生成随机数方面更具性能吗?如果是,价格范围是多少和多少?

我认为我的模拟可以通过让GPU生成大量随机数而CPU完成其余工作来获得。

2 个答案:

答案 0 :(得分:5)

可在此处找到一些比较: https://developer.nvidia.com/cuRAND

答案 1 :(得分:1)

如果您有足够新的Intel CPU(IvyBridge或更新版本),则可以使用RDRAND指令。

这可以通过_rdrand16_step(), _rdrand32_step() and _rdrand64_step()内在函数使用。

可通过VS2012 / 13,英特尔编译器和gcc。

获得

生成的随机数最初是在真实随机数上播种的。专为 NIST SP 800-90A 合规而设计,其随机性非常高。

一些数字供参考:

在配备HT(2.3GHz)的IvyBridge双核笔记本电脑上,2 ^ 32(4 Gigs)随机32位数字单线程为5.7秒,OpenMP为1.7秒。