1

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

4

1 回答 1

12

你已经把它稍微颠倒了。在每次获取时,您都会索引到分支预测器,它会告诉您刚刚收到的指令是否解码成一个被占用的分支。如果不是,则获取下一个顺序地址。但是,如果您的分支预测器说它将是一个采用的分支,那么您不知道接下来要获取哪条指令,因为您还没有解码这条指令。因此,为了不浪费等待分支解决的周期,您将使用分支目标缓冲区(或 BTB)。BTB 存储分支重定向控制流的先前地址。使用这种机制,您试图预测这次控制流将被重定向到哪里。当与返回地址堆栈配对时,这种技术对于无条件分支、函数调用和返回具有 100% 的成功率。在条件分支上,成功率略低,但考虑到分支目标的高时间局部性,仍然非常好。

当分支指令被实际解析时(通常在管道的解码或执行阶段,取决于实现),您将调整分支预测器和 BTB 中的值,以便为未来的预测提供更多最新信息。

这是 BTB 查找和更新如何发生的图解说明:

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

于 2014-07-29T06:53:22.643 回答