我一直致力于物理模拟,需要生成大量的随机数(如果你想要一个想法,至少需要10 ^ 13)。我一直在使用Mersenne twister的C ++ 11实现。我还读到,同一算法的GPU实现现在是Cuda库的一部分,并且GPU在此任务中可以非常高效;但我找不到明确的数字或基准比较。例如,与8核i7相比,上一代的Nvidia卡在生成随机数方面更具性能吗?如果是,价格范围是多少和多少?
我认为我的模拟可以通过让GPU生成大量随机数而CPU完成其余工作来获得。
答案 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秒。