关于 MIPS 中 beq 的数据危害和转发?
About data hazard and forwarding with beq in MIPS?
为什么第一个add
需要转发?
# stage:
add , , # WB
add , , # MEM
nop # EX
beq , , target # ID
因为beq
需要</code>,如果第一个<code>add
要执行WB-stage,那ID是beq
是不是不需要转发-阶段,即将读取寄存器文件?我的书说 beq
之前的第二条和第三条指令需要转发以避免数据危险。
编辑:我在 this link slide page 11; another slide that solves my another confusing that the first add
isn't needed is by another technique special hardware, slide page 58.
上找到了我的意思
在同步数字系统中,在一个周期内,有两个不同的相位。
在第一阶段,操作数通过运算符读取和转换。在第二阶段,结果数据被写入寄存器。
根据实现的不同,这些阶段可以对应于上半周期和下半周期,或者对应于时钟的完整周期和上升沿。
在任何一种情况下,重要的方面是可以读取(在第一阶段)和修改(在最后)同一个寄存器。这就是为什么可以执行
之类的操作的原因
pc <= pc+4
在一个周期内。
在你提出的问题中,确实是这样。
动作
add , , # WB
将在第一阶段读取带有结果的流水线寄存器,并在循环结束时写入 $1。而
beq , , target # ID
将在第一阶段读取$1和$4,并在循环结束时将结果写入ppline寄存器。因此,如果不转发,将写入 $1 的先前值。
(根据下方评论编辑)
所有这些解释都是正确的,分支是处理标准硬件的。在这种情况下,比较由 ALU 在 "EX" 阶段完成,PC 在该阶段结束时更新。
但这会导致两个循环的分支惩罚。为了减少这种损失,可以添加硬件以在 ID 阶段执行比较。在这种情况下,如果比较需要计算一个值(在您的示例中为 $1),则需要暂停。
为什么第一个add
需要转发?
# stage:
add , , # WB
add , , # MEM
nop # EX
beq , , target # ID
因为beq
需要</code>,如果第一个<code>add
要执行WB-stage,那ID是beq
是不是不需要转发-阶段,即将读取寄存器文件?我的书说 beq
之前的第二条和第三条指令需要转发以避免数据危险。
编辑:我在 this link slide page 11; another slide that solves my another confusing that the first add
isn't needed is by another technique special hardware, slide page 58.
在同步数字系统中,在一个周期内,有两个不同的相位。 在第一阶段,操作数通过运算符读取和转换。在第二阶段,结果数据被写入寄存器。 根据实现的不同,这些阶段可以对应于上半周期和下半周期,或者对应于时钟的完整周期和上升沿。
在任何一种情况下,重要的方面是可以读取(在第一阶段)和修改(在最后)同一个寄存器。这就是为什么可以执行
之类的操作的原因pc <= pc+4
在一个周期内。
在你提出的问题中,确实是这样。
动作
add , , # WB
将在第一阶段读取带有结果的流水线寄存器,并在循环结束时写入 $1。而
beq , , target # ID
将在第一阶段读取$1和$4,并在循环结束时将结果写入ppline寄存器。因此,如果不转发,将写入 $1 的先前值。
(根据下方评论编辑)
所有这些解释都是正确的,分支是处理标准硬件的。在这种情况下,比较由 ALU 在 "EX" 阶段完成,PC 在该阶段结束时更新。
但这会导致两个循环的分支惩罚。为了减少这种损失,可以添加硬件以在 ID 阶段执行比较。在这种情况下,如果比较需要计算一个值(在您的示例中为 $1),则需要暂停。