我对MIPS代码和依赖性有疑问。 如果我有以下MIPS代码。
没有任何转发单位如何运作?
需要插入多少个摊位?
7 ADD $t5, $t4, $t5
8 SUB $t5, $t5, $t3
9 SW $t5, 24($t0)
在我看来:
第7-8行WAW,RAW依赖性t5 2循环失速
第8-9行RAW依赖性t5,1个循环停顿
我是对的吗?还是我错过了什么?
第7行和第9行之间是否存在依赖关系?
答案 0 :(得分:1)
我认为你很亲密
ADD $t5, $t4, $t5
在ALU中执行,需要为下一行写回$t5
。这意味着MEM和WB的停顿,因此2个周期。
SUB $t5, $t5, $t3
也在ALU中执行,这就是它停顿了两个周期的原因。
SW $t5, 24($t0)
现在问题来了。我相信寄存器是在ID上读取的,这意味着此处的停顿将再次为2个周期,等待$t5
的WB。可能看起来不是这样,但在SUB
的WB之前,SW
可能需要等待ID。
修改强> 我写下了管道,以便更容易看到。
+----+-----+-------+-------+
| | ADD | SUB | SW |
+----+-----+-------+-------+
| 1 | IF | - | - |
| 2 | ID | IF | - |
| 3 | EX | ID | IF |
| 4 | MEM | stall | stall |
| 5 | WB | stall | stall |
| 6 | - | EX | ID |
| 7 | - | MEM | stall |
| 8 | - | WB | stall |
| 9 | - | - | EX |
| 10 | - | - | MEM |
| 11 | - | - | WB |
| 12 | - | - | - |
+----+-----+-------+-------+