什么';在流水线MIPS w转发中,EX-stage在分支中的作用是什么?

什么';在流水线MIPS w转发中,EX-stage在分支中的作用是什么?,mips,cpu-architecture,pipelining,Mips,Cpu Architecture,Pipelining,考虑以下流水线处理器结构: 请注意,分支的条件测试(the=电路)以及在执行分支时下一条指令的目标地址计算是在ID阶段执行的,这是一种保存暂停/刷新的方法(而不是在EX阶段执行所有这些操作,并在给定分支指令的MEM阶段转发结果) 既然所有的工作都在指令解码阶段完成,为什么还要等给定的分支指令到达EX阶段呢?前级ALU单元在这方面有什么作用吗 提前感谢。当beq出现控制危险时,流水线处理器事先不知道下一条指令要取哪个,因为在取下一条指令时尚未做出分支决策 因为决策是在MEM阶段做出的,所以我们需

考虑以下流水线处理器结构:

请注意,分支的条件测试(the=电路)以及在执行分支时下一条指令的目标地址计算是在ID阶段执行的,这是一种保存暂停/刷新的方法(而不是在EX阶段执行所有这些操作,并在给定分支指令的MEM阶段转发结果)

既然所有的工作都在指令解码阶段完成,为什么还要等给定的分支指令到达EX阶段呢?前级ALU单元在这方面有什么作用吗


提前感谢。

beq
出现控制危险时,流水线处理器事先不知道下一条指令要取哪个,因为在取下一条指令时尚未做出分支决策

因为决策是在MEM阶段做出的,所以我们需要在每个分支上暂停管道三个周期,这当然会影响系统性能

另一种方法是预测是否执行分支,并根据预测开始执行指令。一旦做出分支决策并可用,处理器可以在预测错误时抛出(刷新)指令(这称为分支预测失误惩罚),这也会影响性能

为了减少分支预测失误的惩罚,可以提前做出分支决策。 做出决定只需要比较两个寄存器。使用专用相等比较器比执行减法和零检测更快。如果比较器足够快,可以将其移回解码阶段,以便从寄存器文件读取操作数并进行比较,以在解码阶段结束时确定下一台PC

不幸的是,早期分支决策硬件引入了新的原始数据危险

既然所有的工作都在指令解码阶段完成,为什么还要等给定的分支指令到达EX阶段呢?前级ALU单元在这方面有什么作用吗

分支指令仅在解码阶段进行解码和解析,我们不会等待它进入EX阶段

正如您在问题中指出的,分支结果和目标地址计算都是在DEC阶段完成的。硬件通过从正确的阶段转发所需的数据来处理
RAW
危险(注意读取RegFile之后的小mux)。因此,分支相等性检查可以看到正确的操作数,结果驱动
PCSrcD
信号。该信号进一步决定了图中第一个Mux的输出(基本上决定了
PC+4
分支目标
。因此,在DEC阶段本身进行此操作变得安全而快速


此外,没有分支指令相关信号(
PCSrcD
BranchD
PCBranchD
)进入EX阶段。如果您看到ISS/EX寄存器的输入,它不会接收上述任何信号。因此,信息不会传递到EX阶段,分支会在
DEC
阶段结束时完全解析并失效。

,因为决策是在MEM阶段做出的但我不明白这一点?根据附图,决定是在DEC阶段本身作出的。而且,最终的目标地址计算被移动到DEC阶段。因此,分支应该在DEC阶段解决,而不是在MEM阶段解决?是的。我现在看到了。但它似乎仍然不能回答OP的查询-“如果所有工作都在解码阶段完成,为什么我们还要等待前一阶段?"您已经提到了比较硬件可以移动到DEC阶段的条件。比较硬件在解码阶段更早地做出决策。这就是为什么您让他们从MEM阶段向后移动决策的原因,希望这会有所帮助。最早在DEC阶段移动比较将是一个根据结果进行分支的问题ALU指令,如非常常见的
slt
/
bnez
序列。说明这不是商业MIPS R2000的实际功能。