我正在学习流水线,并且正在阅读《计算机组织与设计:硬件/软件接口(MIPS 版)》一书中的控制风险。书中(第4.6章)有一段让我百思不得其解:
假设我们放入了足够多的额外硬件,以便我们可以在流水线的第二阶段测试寄存器、计算分支地址和更新 PC(详见 COD 第 4.9 节(控制风险))。即使有这个额外的硬件,涉及条件分支的流水线也会如下图所示。如果分支失败则执行 lw 指令,在开始之前额外停止一个 200 ps 时钟周期。我不太明白这一段到底在说什么。我最初的猜测是,这意味着即使在假设的场景中,您可以在必须获取下一条指令之前提供的一个时钟周期内确定采用哪个分支并更新程序计数器,我们仍然需要一个停顿,但那不是这对我来说没有意义,因为如果我们知道该做什么,为什么不直接去做并继续做下去呢?所以我认为我显然遗漏了一些东西,但我无法将它们拼凑起来。
编辑:这是文中引用的图片
但是,如果在获取之后需要一个额外的周期来计算下一个要获取的位置(分支延迟为 1 个周期),那么这是一个您不能获取的周期(或者可能不是
usefully 获取)。
如果您希望分支延迟为 0(无停顿),即使是无条件分支也需要预测。相关:
jmp
(或 MIPS
j
或
b
)这样的无条件分支也需要预测,如果你想在 1/clock 运行它们。