Assembly 用流水线理解MIPS组装
对于MIPS体系结构的标准5级管道,假设某些指令相互依赖,那么管道气泡如何插入到以下汇编代码中Assembly 用流水线理解MIPS组装,assembly,mips,pipeline,Assembly,Mips,Pipeline,对于MIPS体系结构的标准5级管道,假设某些指令相互依赖,那么管道气泡如何插入到以下汇编代码中 I1: lw $1, 0($0) I2: lw $2, 4($0) I3: add $3, $1, $2 ; I1 & I2 -> I3 I4: sw $3, 12($0) ; I3 -> I4 I5: lw $4, 8($0) I6: add $5, $1, $4 ; I1 & I5 -> I6 I7: sw $
I1: lw $1, 0($0)
I2: lw $2, 4($0)
I3: add $3, $1, $2 ; I1 & I2 -> I3
I4: sw $3, 12($0) ; I3 -> I4
I5: lw $4, 8($0)
I6: add $5, $1, $4 ; I1 & I5 -> I6
I7: sw $5, 16($0) ; I6 -> I7
首先,我们插入一个泡沫,我们
I1: IF ID EX MEM WB
I2: IF ID EX MEM
I3: IF ID --
I4: IF ID
正如您所看到的,当I3暂停时,I4可以继续解码。对不对?其次,
I1: IF ID EX MEM WB
I2: IF ID EX MEM WB
I3: IF ID -- EX MEM WB
I4: IF ID -- -- EX MEM WB
I5: IF ID EX MEM WB
I6: IF ID -- EX MEM WB
I7: IF ID -- -- EX MEM WB
我认为这在MIPS的标准管道中是可能的,但有人说,只要插入一个气泡,整个管道就会停止。如何计算呢?在你之前的问题中,你使用的是Patterson的书,所以让我借用其中一个图表: 这里最重要的一点是危险检测装置,它会导致气泡。如果您已经阅读了随附的文本,您就知道它执行此操作的方法是
- 没有发出控制信号
- 暂停IF(保持IF/ID缓冲区固定,不推进PC)
I1: IF ID EX MEM WB
I2: IF ID EX MEM WB
I3: IF ID -- -- --
I3: IF ID -- -- --
I3: IF ID EX MEM WB
I4: IF ID -- -- --
等等。在一般情况下,如果只对当前指令进行冒泡,则会将阶段与后续指令重叠,因此也需要对其余的指令进行冒泡。如果出于某种原因,随后的泡沫也需要一个泡沫,那么它可能会起作用,但他们无论如何都会等待。你是如何表示的?您的意思是第五列都是
--
?但是图表有一个小问题。在第4列中,当I3处于ID阶段时,I4处于IF阶段。你忽略了。。。。如果你继续画画,你会发现这是一个奇怪的现象!我的问题是,当管道暂停时,获取和解码的下一条指令会发生什么情况。他们继续吗?@mahmood不,关键是下一条指令没有被提取和解码。同样的指令再次被解码,直到不再需要暂停。在第4列,I1(MEM),I2(EX),I3(ID),还没有暂停。对吗?因此,下一条指令I4被馈送到IF阶段。为什么不去拿?在第四栏中,没有任何stall@mahmood你可以这样看,但是它会锁定IF/ID管道寄存器,所以I3会再次出现。但我不能在这种类型的图中指出I4是“无用的获取”(获取然后丢弃)。我同意你的观点,因为我们是人类,所以我们可以思考。但CPU并没有看到暂停,所以它获取另一条指令I4。然后,我们必须开发一种机制来挤压或停止执行。