【发布时间】:2019-04-14 23:02:47
【问题描述】:
如果我有以下结构:
if( condition() ){
doA();
} else {
doB();
}
那么分支预测对我有什么帮助?即使分支 A 被正确预测,我仍然需要评估 doA() 和 condition() - 只是不是按这个顺序。还是并行执行分支预测?在这种情况下,它会与其他线程竞争 CPU 时间吗?一般来说,分支预测的最大预期加速是多少?
【问题讨论】:
-
阅读stackoverflow.com/a/11227902/367273。它的 Java 倾向并不重要,因为分支预测是一个跨编程语言的较低级别的概念。
-
指令在执行之前被加载到堆栈中。如果没有分支预测,
if条件之后的指令将无法加载,并且会在条件评估后浪费 CPU 周期。