分支预测单元的输入?

时间:2014-02-09 06:40:29

标签: x86 cpu cpu-architecture branch-prediction

我在这里看幻灯片13:

http://research.engineering.wustl.edu/~songtian/pdf/intel-haswell.pdf

(它应显示Haswell的大型框图)

在顶部有一个叫做“分支预测器”的块,有两个箭头出现。我有点不确定这里的流程的正确排序是什么?首先,“分支预测变量”块没有任何输入?!

有人可以尝试解释(使用图表)分支预测器如何与其他元素连接吗?

另外,图中的哪些元素会将Branch Target(Predictor)Buffer接口与?是否与分支预测器相同的两个(橙色和紫色)​​?

1 个答案:

答案 0 :(得分:3)

英特尔对其分支预测器的细节并不特别关注。引用Agner Fog的The microarchitecture of Intel, AMD and VIA CPUs(2013-09-04版):“分支预测器似乎在Haswell中进行了重新设计,但对其构造知之甚少。”

很可能是全局历史字符串(例如,指示最后N个分支采用/不采用的一个比特)或可能是路径历史(类似于全局历史字符串,但通常使用指令地址的散列) )用于寻址一个或多个分支预测表,可能与指令地址有关。这可能与模糊地相似,但比gshare预测器更复杂。 (人们可能会将此历史视为分支预测器的一部分,而不是作为输入。)

指令地址也可能用于索引分支目标缓冲区(可能使用另一个表进行间接调用和跳转,这可能会使用某些全局历史信息)。指令地址也可能用于预测任何分支的性质(分支标识),以便使用适当的目标预测器。对于使用专门预测器(例如函数返回目标)的情况,分支识别尤为重要。

对于分支类型,目标或分支方向的任何误预测,将在管道中稍后导出的正确信息传递给预测器。 (确认正确的预测可能会有所帮助。)对于普通的分支和跳跃,可以在前端(分支条件评估之前)计算目标,以纠正所采取情况的目标误预测。类似地,在指令解码之后可以修复分支错误识别。如果对间接控制流的分支方向或目标的误预测,可以从管道的后期提供正确的信息。