分支预测与分支目标预测

时间:2014-02-06 16:45:02

标签: c++ performance polymorphism cpu branch-prediction

我是否理解这一点,if语句更依赖于分支预测,而v-table查找更依赖于分支目标预测?关于v表,没有“分支预测”,只有目标预测?

试图理解CPU如何处理v表。

1 个答案:

答案 0 :(得分:8)

分支预测是预测分支是否采取。分支目标预测是分支所在的预测 。这两件事是独立的,可以在所有组合中出现。

这些例子可能是:

无条件分支,固定目标

  • 无限循环
  • goto声明
  • breakcontinue声明
  • if/else语句的'then'子句结束(跳过else子句)
  • 非虚拟功能调用

无条件分支,变量目标

  • 从函数返回
  • 虚拟函数调用
  • 函数指针调用
  • switch语句(如果编译成跳转表)

条件分支,固定目标

  • if声明
  • switch语句(如果编译成一系列if/else语句)
  • 循环条件测试
  • &&||运营商
  • 三元?:运算符

条件分支,变量目标

  • 在正常情况下不太可能出现,但编译器可能会综合一个作为优化,结合上述两种情况。例如,在x86上,编译器可能会将像if (condition) { obj->VirtualFunctionCall(); }这样的代码优化为条件间接跳转,如jne *%eax,如果由于尾调用优化而出现在函数末尾。