分支预测与分支目标预测

10

我理解正确吗,if语句更依赖于分支预测,而v-table查找更依赖于分支目标预测?关于v-tables,没有“分支预测”,只有目标预测吗?

试图理解CPU如何处理v-table。


1
让我们关闭一个问题,因为它只有4行...... - user997112
那是一个相当讽刺的评论,我理解没有注释的关闭动作可能看起来不公平,但选择的选项(太宽泛)有(某种程度上的)记录,并且您没有被投票否决,这表明投票者认为这个问题在StackOverflow上无法有效地解决,这与StackOverflow本身和您的问题无关。据我所知,您的推断是正确的:if和一般循环使用分支预测(布尔输出),而函数指针/虚函数使用分支目标预测(目标输出)。 - Matthieu M.
我如何查看关闭的原因?这不能是一个广泛的问题 - 有两个相关且具体的问题?(但我感谢您通过评论回答我的问题) - user997112
啊!您可能没有足够的声望来访问“关闭”对话框 :x - Matthieu M.
1个回答

9
分支预测是预测分支是否会被采用。分支目标预测是预测分支的去向。这两个方面是独立的,可以以各种组合方式出现。
例如:
无条件分支,固定目标
- 无限循环 - goto语句 - breakcontinue语句 - if/else语句的“then”子句结束(跳过else子句) - 非虚函数调用
无条件分支,可变目标
- 从函数返回 - 虚函数调用 - 函数指针调用 - switch语句(如果编译成跳转表)
有条件分支,固定目标
- if语句 - switch语句(如果编译成一系列if/else语句) - 循环条件测试 - &&|| 操作符 - 三元?:运算符
有条件分支,可变目标
- 在正常情况下不太可能出现,但编译器可能会将两种情况组合优化而生成一个。例如,在x86上,由于尾调用优化,编译器可以将类似 if (condition) { obj->VirtualFunctionCall(); } 的代码优化为条件间接跳转,如 jne *%eax,如果它出现在函数末尾。

只是看一下这个:http://research.engineering.wustl.edu/~songtian/pdf/intel-haswell.pdf 如果你跳到第13页,分支目标预测器在哪里? - user997112
1
@user997112 这很可能是上部左侧块的一部分,称为“分支预测器”,否则你怎么将目标输入到取指单元中呢? - Leeor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接