有一些关于分支预测的疑问我无法自信地弄清楚。假设我必须使用静态分支预测器。
- 分支预测应该发生在管道的哪个阶段?
- 如何知道预测出错了?数据路径如何知道发生了错误预测?
- 如果它知道发生了错误预测,它如何发送信号以占用未占用的分支?
- 出了问题后,我必须占用之前未占用的地址。与此同时,如果发生了一些内存写入或寄存器写入怎么办?如何预防它的发生?
即使建议了一些带有数据路径的正确参考,这也会非常有帮助。提前致谢。
我猜想可能有许多不同的机制,但有一些快速的答案:
- 在指令解码之前,在取指阶段,分支预测肯定需要发生。否则,您将解码不正确的指令。
- 您通常会通过预测的分支指令提供额外的信息,例如预测的目标。该分支将被执行,如果真实目标与预测目标不匹配,则需要刷新管道。
- 这实际上取决于实施。如果分支被执行,您可以使用真实的目标,就像未预测的分支一样。
- 你当然需要一种机制来恢复,或者等待分支被解析,直到你写入结果。这会损失一些时间,但不会像未预测到的分支那样多。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)