有没有一种可移植的方法来进行分支预测提示?考虑下面的例子:
if (unlikely_condition) {
/* ..A.. */
} else {
/* ..B.. */
}
这与做下面的操作有什么不同:
if (!unlikely_condition) {
/* ..B.. */
} else {
/* ..A.. */
}
还有其他方法可以达到类似于GCC中的 __builtin_expect 这样的编译器特定提示吗?
编译器是否会根据条件的顺序不同而对 if
条件进行不同的处理?
if(likely(...))
废物,我认为这真的很糟糕。首先,在英语中它不太自然——听起来像是“如果这个条件可能为真”,而不是“如果这个条件为真,那么它可能是”。另外,这只是杂乱无章的东西。除非你有大量的性能关键条件语句无法编译到cmov
或类似指令,否则可以忽略分支预测提示。 - R.. GitHub STOP HELPING ICEif(unlikely(...))
。他们更喜欢早期退出,使代码流程更容易跟踪。如果他们不这样做,那么静态分支预测将总是失败。 - Oskar N.