流水线-Mips指令
在mips指令中使用流水线操作使我感到困惑。任何帮助都会很好。提前谢谢 接下来两个代码中的数据依赖关系是什么?其中哪些可以通过使用暂停(气泡)或转发来解决。为了方便起见,可以使用形状1流水线-Mips指令,mips,pipelining,Mips,Pipelining,在mips指令中使用流水线操作使我感到困惑。任何帮助都会很好。提前谢谢 接下来两个代码中的数据依赖关系是什么?其中哪些可以通过使用暂停(气泡)或转发来解决。为了方便起见,可以使用形状1 shape 1: If-Id-Ex-Mem-Wb 说明: if=instruction fetch id=instruction decode register fetch ex=execute mem=memory access wb=write back
shape 1:
If-Id-Ex-Mem-Wb
说明:
if=instruction fetch
id=instruction decode register fetch
ex=execute
mem=memory access
wb=write back
代码1:
add $3,$4,$2
sub $5,$3,$1
lw $6,200($5)
sw $6,200($2)
lw $6,200($3)
add $7,$4,$6
代码2:
add $3,$4,$2
sub $5,$3,$1
lw $6,200($3)
add $7,$3,$6
(很抱歉发布了错误的帖子,但我还不能发布图片)
谢谢 让我们看看第一个:
add $3,$4,$2
sub $5,$3,$1
add
的结果用于sub
,因此存在数据危险。我们必须插入大量NOP阶段来解决它。假设所有指令占用5个周期,我们插入3个NOP,就完成了
add $3,$4,$2 IF ID EX MEM WB
sub $5,$3,$1 NOP NOP NOP IF ID EX MEM WB
我们可以为所有后续说明执行此操作。现在,指令在EX和MEM阶段生成新值。在WB阶段之前,这些值不会写入寄存器(出于学习目的,假设这是真的)。由于寄存器是在ID阶段读取的,因此会留下一个三个周期的窗口,其中旧的不正确值会在管道中“流动”。转发有助于解决上述问题-将结果从add:EX
转发到sub:ID
希望这有帮助。HW作业?问题到底是什么?到目前为止你是如何解决的?