【发布时间】:2013-12-04 08:47:43
【问题描述】:
我正在大量使用随机数编写物理模拟,我只是第一次分析我的代码,所以我在读取输出时可能有误,但我看到这条线首先出现:
% cumulative self self total
time seconds seconds calls ms/call ms/call name
90.09 21.88 21.88 265536 0.08 0.08 std::mersenne_twister_engine<unsigned long, 32ul, 624ul, 397ul, 31ul, 2567483615ul, 11ul, 4294967295ul, 7ul, 2636928640ul, 15ul, 4022730752ul, 18ul, 1812433253ul>::operator()()
这似乎意味着生成数字生成器需要 90% 的时间。 我已经写过一篇文章,询问是否不在每个循环中构建随机概率分布是否可以节省我的时间,但在尝试和计时之后它并没有帮助(Is defining a probability distribution costly?)。是否有优化随机数生成的常用选项?
提前感谢您,我的模拟(在当前状态下)运行了几天,因此减少 90% 的计算时间将是一个重大进展。
【问题讨论】:
-
这取决于您关心的是什么,对于不同的情况有大量不同的 PRNG,您想要线性的还是不线性的?适用于无符号整数、浮点数、int ... 的东西?
-
你考虑过/正在使用线程吗?
-
您是否考虑过在运行模拟之前生成随机数或者这不可能?
-
@claptrap:是的,我考虑过这一点,但不幸的是,这似乎不可能,因为我不知道我需要多少随机数以及我的概率密度边界在模拟过程中会发生变化.
-
@MSalters 呃,你说的线程是什么意思?并行化?
标签: c++ optimization c++11 random