计算机体系结构管道失速

时间:2016-11-03 09:31:54

标签: mips pipeline cpu-architecture

首先,抱歉我的英语不好。问题是我的计算机体系结构课程中的一个问题,我在网上找到答案,但仍然无法找到详细信息。

以下是五阶段(获取,解码,执行,内存,写入)单管道微体系结构无转发机制的指令阶段。 所有操作都是一个周期,除了LW和SW是1 + 2,而Branch是1 + 1.

Loop:             C1  C2  C3  C4  C5  C6  C7  C8  C9  C10 C11 C12 C13 C14 ...
LW   R3, 0(R0)    F   D   E   M   -   -   W
LW   R1, 0(R3)        F   D   -   -   -   E   M   -   -   W
ADDI R1, R1, #1           F   -   -   -   D   -   -   -   E   M   W
SUB  R4, R3, R2                           F   -   -   -   D   E   M   W
SW   R1, 0(R3)                                            F   D   W   M   ...
BNZ  R4, Loop                                                 F   D   E   ...
...

我有以下几个问题。

  1. 为什么第二条指令可以在C2中启动D?由于我已经倾斜,D阶段包括“寄存器读取”,但前一条指令写回R3直到C7。

  2. 与前一个相似,是什么原因导致第3个月的D在C7开始,E从C11开始?

  3. 为什么4 inst必须从C7开始而不是C4?

  4. 这个问题起源于“计算机体系结构:定量方法5e”一书,例3.11。

3 个答案:

答案 0 :(得分:1)

看起来你的管道在执行与内存相关的操作(LW)时会冻结整个系统,除了我无法想到ADDI无法在C4中执行其解码的正当理由。我并不是说它对加载操作有效,以冻结整个执行,但这似乎只是"只有"合乎逻辑的解释。

指令2可以在C3中执行其解码,但必须等到指令1将其数据写回R1。这就是为什么第二条指令的执行被推迟到C7

当你说你已经在" net"上找到答案时顺便说一句。是来自可靠的来源吗?

答案 1 :(得分:1)

为什么第二条指令可以在C2中启动D? D包括reg-read,但前一条指令在C7之前不会写回R3。​​

Ans - 这是因为MIPS简单pipleline中的DECODER阶段有两个部分/子阶段。

DEC = DECODE + RR(注册读取)

指令可以被解码,即操作码可以被读取和解码但是,由于在这种情况下的依赖性,RR将停止直到第一个加载指令执行(从存储器中取出R3)并且在C7中简单转发下一个加载可以去执行。

在两个子站中破坏DECODE阶段以避免结构性危险。 如果您阅读图表"计算机架构:定量方法"再次,您将看到一条虚线和实线,有意绘制以显示整体工作由两部分决定(DECODE OPCODE + REG READ)。

另外两个问题我同意@Peter Cordes

希望这会有所帮助。 Jaymin

答案 2 :(得分:0)

Classic RISC pipeline wiki article非常好。如果你没有,请查看。

  
      
  1. 为什么第二条指令可以在C2中启动D? D包括reg-read,但前一条指令在C7之前不会写回R3。​​
  2.   

我不确定,我没有花太多时间在经典RISC管道上。基于我们对此和ADDI的看法,看起来寄存器读取发生在E阶段。

这完美地解释了E停止直到前一次加载的回写。如果你确定reg-read应该在你正在研究的管道的D阶段发生,那么这个解决方案与你的管道不匹配;对于在Execute之前不读取寄存器的不同管道是正确的。

  

第3个月的D从C7开始,E从C11开始?

管道的D阶段被前一条指令占用,直到C7,此时它可以解码。

R1直到周期11才准备好,此时the data can be forwarded来自前一条指令的存储器级,因此ADDI的Execute可以与前一条指令中的Writeback并行发生。这称为“旁路”。

旁路可以让ALU操作以1个周期的延迟运行,因此您可以在下一条指令中使用ADD的输出而不会停顿。

  
      
  1. 为什么4 inst必须从C7开始而不是C4?
  2.   

因为前一条指令在获取阶段停止,并且它是一个有序管道;没有无序执行。