【发布时间】:2016-06-26 13:57:58
【问题描述】:
请考虑以下代码:
void error_handling();
bool method_impl();
bool method()
{
const bool res = method_impl();
if (res == false) {
error_handling();
return false;
}
return true;
}
我知道method_impl() 将返回true 99.999%(是的,三位小数)的时间,但我的编译器没有。 method() 在时间消耗方面是部分关键。
- 我是否应该重写
method()(并使其可读性降低)以确保只有在method_impl()返回false时才会发生跳转?如果是,怎么做? - 我应该让编译器为我完成这项工作吗?
- 我应该让我的 CPU 的分支预测为我完成这项工作吗?
【问题讨论】:
-
标题的“优化分支预测”怎么样,因为它与错误处理无关?我很确定答案类似于use likely/unlikely macros,但这是特定于编译器的。
-
您应该反转逻辑,以便正常情况下是失败,异常情况是隐含的
else。这不会破坏可读性。你现在拥有它的方式是 99.999% 的时间都有一个分支。 -
您可以使用 __builtin_expect 提示编译器提出您的建议:stackoverflow.com/questions/1851299/…
-
底层硬件已经执行了这个优化。第一次预测它会“失败”,但之后它会命中正确的选项en.wikipedia.org/wiki/Branch_predictor
-
@Nadir 你认为分支预测可以和使用 GCC 扩展
__builtin_expect一样好吗?
标签: c++ c optimization compiler-optimization