分支预测器和分支目标缓冲区如何共存?

fya*_*g29 1 cpu cpu-architecture

我的问题是它们如何在现代CPU架构中共存和协同工作?

Tay*_*r R 8

你有点逆转.在每次获取时,您都会索引到分支预测器,它会告诉您刚刚收到的指令是否会被解码为已采用的分支.如果没有,则获取下一个顺序地址.但是如果你的分支预测器说它将是一个被采用的分支,你不知道接下来要取哪条指令,因为你还没有解码这条指令.因此,为了不浪费等待分支解析的周期,您将使用分支目标缓冲区(或BTB).BTB存储先前的地址,其中分支重定向控制流.使用此机制,您试图预测此次控制流将被重定向到何处.当与返回地址堆栈配对时,此技术对于无条件分支,函数调用和返回具有100%的成功率.在条件分支上,成功率略低,但鉴于分支目标的高时间局部性,仍然非常好.作为示例,您可以考虑循环的向后分支,它将始终分支到同一位置.

当分支指令实际被解析时(通常在管道的Decode或Execute阶段,具体取决于实现),您将调整分支预测器和BTB中的值,以便获得更多有关未来预测的最新信息.

以下是BTB查找和更新如何发生的图示说明:

http://www-ee.eng.hawaii.edu/~tep/EE461/Notes/ILP/buffer.html