c++ - 定义概率分布成本高吗?

标签 c++ optimization probability

我正在编写物理模拟代码,现在觉得需要对其进行优化。我正在考虑改进一点:我类的一个方法(在几种情况下我称之为十亿次)每次都定义概率分布。这是代码:

void myClass::myMethod(){ //called billions of times in several cases
uniform_real_distribution<> probd(0,1);
uniform_int_distribution<> probh(1,h-2);
uniform_int_distribution<> probv(1,v-2);
    //rest of the code
}

我能否将分布作为类的成员传递,这样我就不必每次都定义它们了?并在构造函数中初始化它们并在 h 和 v 更改时重新定义它们?能不能算是一个好的优化进度?最后一个问题,当使用标志 -O3 或 -O2 编译时,它是否已经被编译器(在我的例子中是 g++)更正了?

提前致谢!

更新:我对它进行了编码并为两者计时:程序实际上变慢了一点(百分之几)所以我回到了我开始的地方:在每个循环中创建概率分布

最佳答案

答案A:我不应该这么认为,对于均匀分布来说,它只是将参数值复制到位,可能需要少量的运算,并且会得到很好的优化。

但是,我相信分布对象可以有状态。他们可以使用来自对生成器的调用的部分随机数据,并允许保存剩余的随机性以在下次使用分布时使用,以减少对生成器的调用总数。因此,当您销毁分发对象时,您可能会丢弃一些可能代价高昂的随机数据。

答案B:停止猜测并测试它。

为您的代码计时,然后将 static 添加到 probd 的定义中,然后再次计时。

关于c++ - 定义概率分布成本高吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19706129/

相关文章:

c++ - typedef 具有静态自定义删除器的 shared_ptr 类型,类似于 unique_ptr

C++ 语法/语义问题 : Reference to Function and typedef keyword

c++ - 在变量中存储一个大数字并循环

sql - MySQL:优化 JOIN 查询

python - 确定性退火法

JavaScript:document.getElementById 性能低下?

c++ - gcc:带有 Wextra 和成员初始化的 weffc++

validation - Rand 和 Jaccard 相似度指数之间的区别?

machine-learning - 无监督朴素贝叶斯 - 它是如何工作的?

php - 最有效的制作方式和赔率系统是什么?