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

时间:2013-12-02 17:01:39

标签: cpu cpu-architecture

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

1 个答案:

答案 0 :(得分:8)

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

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

以下是BTB查找和更新的图解说明:

  

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