我正在尝试优化用于生物信息学目的的基于C的代码。它使用Monte Carlo迭代进行计算的主要部分。之前它使用ran2()生成随机数,这使它变得非常慢。经过深入研究,我发现mersenne twister和sfmt是更有效的随机数生成器。但是,我尝试在代码中使用它们,它们的速度似乎并没有太大差异。鉴于该程序每次迭代都会使用生成器10次以上,因此我无法弄清楚为什么更改生成器对速度没有影响。
谁能告诉我我可能在哪里错了?
最佳答案
选择随机数生成器始终是质量(生成的数字)和速度之间的平衡。线性同余生成器通常是最快的,但是它们不适合任何严肃的蒙特卡洛工作。
根据经验,我会说mersenne捻线器就很好---它不是太慢,您不必担心质量。只要瓶颈在生成器中,我想说在一个内核上您无能为力。
话虽这么说,这里是几种发电机的比较:
http://www.boost.org/doc/libs/1_48_0/doc/html/boost_random/performance.html
关于c - SFMT与Mersenne Twister和Ran2的比较,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8559778/