常量条件的分支预测
Branch prediction for const condition
我有一个在编译时不知道的条件,但一旦初始化,在程序期间不会改变。我的程序看起来像这样
void cond_func(const int cond){
switch(cond){...}
}
void loop_func(const Some_class& param){
for(...) cond_func(param.cond);
}
分支预测是否能够判断cond
应始终计算为相同的值?还是最好在循环之前编写switch
,然后调用适当的函数(这将导致代码的可读性降低,并带有多个代码重复)。或者我可以做一些事情来给编译器提示这个条件将保持不变,比如在循环之前提取const int cond = param.cond)
的值?如果我还将循环期间的const Some_class& param
传递给其他一些函数,从而理论上通过一些奇怪的指针和/或const_cast
(尽管我不是)更改cond
的值,会有什么变化吗?
我的循环通常有数百万甚至更长,所以我对预测分支的前几次调用并不感兴趣,但是在每个周期中在某些条件评估中花费的每一毫秒都很重要......
我认为检查一次条件并循环数百万次胜过循环数百万次并每次检查,即使有分支预测也是如此。
也许你的设计不是最好的。例如,根据开关,切换、循环和调用具有不同参数的函数。我真的不能说,我不知道你在那里做什么。
相关文章:
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- std::shared_ptr vs std::make_shared:意外的缓存未命中和分支预测
- 如何禁用分支预测C++/Mac/英特尔
- 最佳无分支有条件选择两个SSE2填充双打
- C++ 中的可移植分支预测提示
- 常量条件的分支预测
- 分支预测和分支目标预测之间的性能差异
- 分支预测与分支目标预测
- 分支预测优化
- 分支预测的加速是否取决于谓词的复杂性?
- 我可以在现代英特尔酷睿CPU上测量分支预测故障吗
- 分支预测变量结果是否在流程使用其时间片后保存
- 分支预测 - 全球份额实施说明
- 为什么我不是分支预测的受害者
- 函数指针上的分支预测
- 分支预测及分支目标预测优化
- 为什么GCC没有尽可能地优化这组分支和条件?
- 分支预测与除零
- c++分支预测算法比较
- 是否有可能帮助分支预测