分支预测与分支目标预测



我理解正确吗,if语句更依赖于分支预测,而v表查找更依赖于分支目标预测?关于对向表,没有"分支预测",只有目标预测?

试图了解 CPU 如何处理向量表。

分支预测是预测是否将采用分支。分支目标预测是预测分支要去哪里。 这两件事是独立的,可以在所有组合中发生。

这些示例可能是:

无条件分支,固定目标

  • 无限循环
  • goto声明
  • breakcontinue声明
  • if/else语句的"then"子句的结尾(跳过else子句)
  • 非虚函数调用

无条件分支,可变目标

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

条件分支,固定目标

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

条件分支,变量目标

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

相关内容

  • 没有找到相关文章

最新更新