我在这里看幻灯片13:
http://research.engineering.wustl.edu/~宋天/pdf/intel-haswell.pdf
(应该显示Haswell的大方框图)
在顶部,它有一个名为"分支预测器"的块,其中有两个箭头。我有点不确定这里流程的正确顺序是什么?首先,"分支预测器"块没有任何输入?!
有人能试着解释一下(使用图表)Branch预测器是如何与其他元素交互的吗?
此外,分支目标(预测器)缓冲区与图中的哪些元素接口?它会是从分支预测器上箭头所指的两个(橙色和紫色)吗?
英特尔并没有特别公开其分支预测器的细节。引用Agner Fog的《英特尔、AMD和VIA CPU的微体系结构》(2013-09-04版):"分支预测器似乎在Haswell中进行了重新设计,但对其结构知之甚少。">
最有可能的是,全局历史字符串(例如,指示最后N个分支的已采取/未采取的一位)或可能的路径历史(类似于全局历史字符串,但通常使用指令地址的散列)被用于寻址一个或多个分支预测表,可能具有指令地址。这可能与有点相似,但比gshare预测器更复杂。(可以将此历史视为分支预测器的一部分,而不是输入。)
指令地址也可能用于索引分支目标缓冲区(可能与另一个表一起用于间接调用和跳转,后者可能使用一些全局历史信息)。指令地址也可能用于预测任何分支的性质(分支标识),以便使用适当的目标预测器。分支识别对于使用专门预测器(如函数返回目标)的情况尤为重要。
对于分支类型、目标或分支方向的任何错误预测,稍后在管道中导出的正确信息都会传递给预测器。(确认正确的预测可能会有所帮助。)对于普通分支和跳跃,可以在前端计算目标(在分支条件评估之前),以纠正所采取案例的目标预测错误。类似地,分支错误识别可以在指令解码后修复。在间接控制流的分支方向或目标预测错误的情况下,可以从稍后的管道中提供正确的信息。