我正在尝试优化用于生物信息学目的的基于 C 的代码。它使用蒙特卡洛迭代进行主要部分计算。它之前使用 ran2() 生成随机数,这使得它非常慢。经过深入研究,我发现 mersenne twister 和 sfmt 是更高效的随机数生成器。但是,我尝试在我的代码中使用它们,它们似乎对速度没有太大影响。鉴于程序每次迭代使用生成器 10 次以上,我无法弄清楚为什么更改生成器对速度没有影响。
谁能告诉我我哪里可能出错了?
我正在尝试优化用于生物信息学目的的基于 C 的代码。它使用蒙特卡洛迭代进行主要部分计算。它之前使用 ran2() 生成随机数,这使得它非常慢。经过深入研究,我发现 mersenne twister 和 sfmt 是更高效的随机数生成器。但是,我尝试在我的代码中使用它们,它们似乎对速度没有太大影响。鉴于程序每次迭代使用生成器 10 次以上,我无法弄清楚为什么更改生成器对速度没有影响。
谁能告诉我我哪里可能出错了?
选择随机数生成器始终是质量(它们生成的数字)和速度之间的平衡。线性同余生成器通常是最快的,但它们不适合任何严肃的蒙特卡罗工作。
根据经验,我会说 mersenne twister 很好 --- 它不是超慢的,你不必担心质量。只要瓶颈在生成器中,我会说在单个核心上您无能为力。
话虽如此,这里是几个生成器的比较:http: //www.boost.org/doc/libs/1_48_0/doc/html/boost_random/performance.html