WAR 危险导致管道中出现气泡 (MIPS)?
WAR hazard causes bubbles in the pipeline (MIPS)?
如果我有 2 行汇编,例如:
add $s1, $s3, $s5
sub $s3, $s6, $s8
这应该会导致 WAR(读后写)危险,对吗?
问题是要画管道,不知道会不会造成管道中插入气泡table。
这是否会造成危险,是否有任何不同的情况?
WAR hazard is uncommon/impossible in a reasonable (in-order)
pipeline
这里有一个 table 来说明原因,在 5 级流水线 CPU 中。让我们将它们标记为指令 1 和 2。
IF | ID | EX | MEM | WB
-------------------------
1 | | | |
-------------------------
2 |(1) | | | Instruction 1 is obtaining $s3
-------------------------
| 2 | 1 | |
-------------------------
| | 2 | 1 |
-------------------------
| | | 2 | 1
-------------------------
| | | |(2) Instruction 2 is writing $s3 back
指令在ID(Instruction Decode)阶段从寄存器文件中获取操作数,但直到WB(write-back)阶段才将结果写回寄存器文件。指令 1 在指令 2 进入 WB 阶段前 4 个时钟周期进入 ID 阶段,因此 $s3
在使用前不可能被覆盖。
如果我有 2 行汇编,例如:
add $s1, $s3, $s5
sub $s3, $s6, $s8
这应该会导致 WAR(读后写)危险,对吗?
问题是要画管道,不知道会不会造成管道中插入气泡table。
这是否会造成危险,是否有任何不同的情况?
WAR hazard is uncommon/impossible in a reasonable (in-order) pipeline
这里有一个 table 来说明原因,在 5 级流水线 CPU 中。让我们将它们标记为指令 1 和 2。
IF | ID | EX | MEM | WB
-------------------------
1 | | | |
-------------------------
2 |(1) | | | Instruction 1 is obtaining $s3
-------------------------
| 2 | 1 | |
-------------------------
| | 2 | 1 |
-------------------------
| | | 2 | 1
-------------------------
| | | |(2) Instruction 2 is writing $s3 back
指令在ID(Instruction Decode)阶段从寄存器文件中获取操作数,但直到WB(write-back)阶段才将结果写回寄存器文件。指令 1 在指令 2 进入 WB 阶段前 4 个时钟周期进入 ID 阶段,因此 $s3
在使用前不可能被覆盖。