【发布时间】:2017-04-12 12:56:45
【问题描述】:
假设我有
void f(const bool condition) {
if (condition) {
f2();
else {
f3();
}
f4();
if (condition) {
f5();
} else {
f6();
}
}
由于condition永远不会改变,上面可以简化为下面
void f(const bool condition) {
if (condition) {
f2();
f4();
f5();
} else {
f3();
f4();
f5();
}
}
请注意,f4() 在第二个代码中重复,但第二个代码部分的 if 分支较少。我试图分析 2 个代码 sn-ps 但在我看来性能几乎相同。想象一下,在现实生活中,上面的代码 sn-ps 在相同条件下可以有更多if。所以我想知道现代 x86/64 处理器:
- 拥有 2 个巨大的
if语句而不是许多基于相同条件的小语句是否有任何性能提升? -
const关键字会帮助编译器/处理器生成更好的分支预测吗?
【问题讨论】:
-
恕我直言,第一个看起来更好,如果您需要更改
f4(),您只需执行一次而不是两次,这可能会导致错误。我首先编程是为了可读性和可维护性。在分析之后,我确定代码是一个瓶颈,那么我是否会考虑进行此类优化。 -
“const 关键字会帮助编译器/处理器生成更好的分支预测吗?”可能是最好的答案,这取决于你的编译器。
-
在具有多 GHz 处理器的台式计算机上,单个 if 语句需要极少的时间。并且优化编译器也可能会看到条件没有改变,并为您进行转换。将时间花在其他地方可能会更好,前提是程序运行速度不够快。
-
真正的问题是 - 在你所处的阶段你真的需要它吗? 可能不需要,那么谁在乎呢?
-
你的意思是
f6在第二个 sn-p 的 else 块中吗?
标签: c++ optimization branch-prediction