计算机体系结构流水线停顿

Computer Architecture pipeline stalls

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

以下是五阶段(获取、解码、执行、存储、写入)单流水线微体系结构无转发机制中的指令阶段。 除LW、SW为1+2,Branch为1+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. 为什么第2条指令可以在C2中开始D?据我所知,D阶段包括"register read",但之前的指令直到C7才写回R3。​​

  2. 同上一个,请问第3台的D从C7开始,E从C11开始的原因是什么?

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

这个问题源于书本"Computer Architecture : A Quantitative Approach 5e",例子3.11。

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

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

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

Classic RISC pipeline wiki article 非常好。没看过的可以看看

  1. Why the 2nd instruction can start D in C2? D includes reg-read, but the previous instruction doesn't write back to R3 until C7.

我不确定,我没有在 classic-RISC 管道上花很多时间。根据我们对此和 ADDI 的观察,寄存器读取似乎发生在 E 阶段。

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

3rd inst's D start at C7, and E start at C11?

流水线的D段被前面的指令占用直到C7,此时可以解码

R1 直到周期 11 才准备就绪,此时 the data can be forwarded 来自前一条指令的内存阶段,因此 ADDI 的执行可以与前一条指令中的回写并行发生。这叫做 "bypass".

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

  1. Why 4th inst must start at C7 instead of C4?

因为前面的指令在fetch阶段停滞了,而且是一个有序的流水线;没有乱序执行。

为什么第2条指令可以在C2中启动D? D包括reg-read,但之前的指令直到C7才写回R3。​​

回答 - 这是因为 MIPS 简单流水线中的解码器阶段有两个 parts/sub 阶段。

DEC = 解码 + RR(寄存器读取)

指令可以被解码,也就是说,操作码可以被读取和解码,但是,由于这种情况下的依赖性,RR 将停止直到第一个加载指令执行(从内存中获取 R3)并在 C7 中进行简单转发下一次加载可以执行了。

为了避免结构性危险,在两个子级中对 DECODE 级进行了破坏。 如果您再次阅读图表 "Computer Architecture : A Quantitative Approach",您会看到故意绘制的虚线和实线以显示整体工作分为两部分(DECODE OPCODE + REG READ)。

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

希望这对您有所帮助。 杰敏