只有 EX/MEM 个流水线寄存器或只有 MEM/WB 个流水线寄存器时的停顿周期数

Number of stall cycles when there is only EX/MEM pipeline registers or only MEM/WB pipeline register

我正在处理与处理器相关的问题。题目是《计算机组织与设计(第6版)》一书中的4.12题。该问题有以下假设: 这是一张图片 图 4.45

第 3 个问题让我卡住了

这个问题的答案是 MEM/WB 的停顿周期数(CPI 为 1.35)比 EX/MEM(CPI 为 1.45)少。我对这个答案的解释很困​​惑。 它指出:

With forwarding only from the EX/MEM register, EX to 1st dependences can be satisfied without stalls but any other dependences (even when together with EX to 1st) incur a one-cycle stall. With forwarding only from the MEM/WB register, EX to 2nd dependences incur no stalls. MEM to 1st dependences still incur a one-cycle stall, and EX to 1st dependences now incur one stall cycle because we must wait for the instruction to complete the MEM stage to be able to forward to the next instruction

只用EX/MEM个流水线寄存器,EX到1st就解决了,但是,我不能证明所有其他情况都只需要一个STALL CYCLE。例如,在 MEM 到 1st 的情况下,我认为它需要 2 个停顿周期,因为现在的结果是在 MEM 阶段产生的,它没有任何 MEM/WB 流水线寄存器来保存结果并将其转发给下一个指令。因此,再有 2 个停顿周期,就会得到正确的结果。还有一点我要告诉大家的是,在“EX to 1st,MEM to 2nd”的情况下,在答案中,也需要多一个循环来解决这里的hazard。这让我很困惑,因为它与只需要 1 个周期的“MEM to 1st”的情况冲突。

类似下一个只有MEM/WB流水线寄存器的情况。你有任何证据来解释这个答案吗?非常期待你对这个问题的回答

这与拥有流水线寄存器无关(或者没有,没有流水线寄存器它根本无法工作),而是拥有 bypass/forward 多路复用提供数据以减轻 RAW 危害与导致停顿(这很愚蠢,因为在两种情况下都必须实现检测条件的逻辑,否则处理器将无法工作)。

如果没有 bypass/forward,您认为 MEM 到第一个需要 2 个停顿周期是正确的,并且使用 bypass/forward,只有 2 个周期中的一个被缓解,另一个停顿周期仍然存在,无法通过 bypass/forward 删除。为什么?因为所需的数据在第一个之后的处理器中的任何地方都根本不可用,直到比第一个之后的 EX 所需的时间晚一个周期。

在 bypass/forward 的其他情况下,数据在正确的时间在处理器中的某个位置可用,以便在之后进行第 1 次或第 2 次处理 — 只是数据不在正确的位置,所以 bypass/forward 解决了这个问题。例如,在 add 指令完成其 EX 后的循环中,算术加法运算的值在处理器中的某处但尚未在目标寄存器中。之后的第一个指令使用该目标(例如,另一个加法)自然会在一个周期后进入 EX 阶段,因此正确的数据在时间上可用,但只是不在正确的位置(这将是先验的目标寄存器),因此旁路实现了 RAW 危险并选择先前的 EX 输出而不是从 ID 级寄存器读取的第一个之后的陈旧值。

而对于 1st RAW 的 MEM,数据在处理器中的任何位置都不可用,直到在 1st after 的 EX 阶段之后的 1 个周期,所以使用一个停顿加一个旁路,这是最好的完成。

他们问的是三路多路复用器的成本,该多路复用器可以在来自 EX 的 bypass/forward、来自 MEM 的 bypass/forward 与从 ID 读取的 non-forward/register 之间进行选择, 在同一个时钟周期内。

如果要支持以上三项中的任何一项,则需要三路多路复用器(或两级双向多路复用器)。删除其中任何一项,您就可以减少 muxing。


您可以搜索 load/use RAW hazards 了解更多详情。

本质上,假设在时间 t 进入 IF 的加载指令因此在 t+1ID 中,在 EX 中在 t+2、在 MEMt+3WBt+4,总共五个周期。

如果该加载(比如 lw $a0, 0($a1) 紧接着是使用加载目标寄存器的指令(比如 addi $t0, $a0, 1),则该指令(addi)进入流水线,IF,在时间 t+1,它在 t+2 进入 ID,在 t+3 进入 EX。在循环开始时 t+3 addi 执行所需的数据——在 EX 中使用 ALU 的增量——不在处理器中的任何位置,直到 t+3,这是负载的 MEM 周期结束。因此,即使有 bypass/forward,停顿周期也是不可避免且需要的。在这种情况下,停顿会延迟 addis EX 阶段直到 t+4,此时数据在处理器中的某处可用。在 t+4 时,可以从架构寄存器文件中重新获取负载数据(尽管这需要三重移植寄存器文件的读取端,也可能会增加循环时间以适应该情况),或者从 MEM/WB 流水线寄存器中获取) .

由于在ID阶段读取架构寄存器文件以获得源操作数值,没有bypass/forward,需要两个停顿来延迟addis ID(理想情况下会在 t+1 发生)直到 t+4 它可以在架构寄存器文件中看到加载的 WB 阶段的结果。