我正在学习计算机体系结构课程。我从另一所大学找到了这个网站,该网站有迄今为止对我有帮助的笔记和视频:CS6810,犹他大学。我正在研究这些系列笔记,但需要对一些示例问题进行一些解释。我目前正在研究第 17-18 页的问题 7。解决方案在第 18 页的注释中给出,但我有点不确定教授是如何得出结论的。他在他的班级网页上声明他没有为任何事情提供解决方案,所以这是不可能的。
对于那些无法查看pdf的人,问题如下:
考虑一个 8 级流水线,其中寄存器读取 (RR) 和寄存器写入 (RW) 需要一个完整周期。关键:指令取指 = IF,解码 = DE,ALU = AL,数据存储器 = DM,锁存器 # = L#
L1-->IF-->L2-->DE-->L3-->RR-->L4-->AL-->L5-->AL-->L6-->DM-->L7- ->DM-->L8-->RR-->L9
给定以下一系列指令,确定第二条指令的停顿数,有和没有绕过
- ADD R1 + R2 -> R3, ADD R3 + R4 -> R5 :不绕过 5,绕过 1
- LD[R1] -> R2, ADD R2 + R3 -> R4 : 不绕过 5,绕过 3
- LD[R1] -> R2, SD[R2] -> R3 : 不绕过 5,绕过 3
- LD[R1] -> R2, SD[R3] -> R2 : 不绕过 5,绕过 1
我了解他们每个人如何在不绕过的情况下生成 5 个档位,并且我了解第一个如何在绕过的情况下只生成 1 个档位,但我不确定带旁通的档位是如何用 2-4 生成的。
任何帮助,将不胜感激。
编辑(为了进一步澄清,我对案例外观的理解):ST = Stall,隐含闩锁
1.
IF-->DE-->RR-->AL-->AL-->DM-->DM-->RW
IF-->DE-->ST-->ST-->ST-->ST-->ST-->RR-->AL-->AL-->DM-->DM-->RW (without)
IF-->DE-->RR-->ST-->AL-->AL-->DM-->DM-->RW (with)
在没有旁路的情况下,I2 在进入 RR 之前就停顿了,必须等到 R3 被写入才能进入 RR;这种理解在所有情况下都是普遍的。通过旁路,I2 可以进入 RR 但停止直到 I1 完成算术运算,这是在第二个 ALU 阶段之后。
2.
IF-->DE-->RR-->AL-->AL-->DM-->DM-->RW
IF-->DE-->ST-->ST-->ST-->ST-->ST-->RR-->AL-->AL-->DM-->DM-->RW (without)
IF-->DE-->RR-->ST-->ST-->ST-->AL-->AL-->DM-->DM-->RW (with)
通过旁路,I2 可以进入 RR,但必须等到 R2 处理完毕,这发生在 I1 的第二个 DM 阶段之后。
3.
IF-->DE-->RR-->AL-->AL-->DM-->DM-->RW
IF-->DE-->ST-->ST-->ST-->ST-->ST-->RR-->AL-->AL-->DM-->DM-->RW (without)
IF-->DE-->RR-->ST-->ST-->ST-->AL-->AL-->DM-->DM-->RW (with)
通过旁路,I2 可以进入 RR,但必须等到 R2 被处理,这发生在 I1 的第二个 DM 阶段之后。
4.
IF-->DE-->RR-->AL-->AL-->DM-->DM-->RW
IF-->DE-->ST-->ST-->ST-->ST-->ST-->RR-->AL-->AL-->DM-->DM-->RW (without)
IF-->DE-->RR-->AL-->AL-->ST-->DM-->DM-->RW (with)
通过旁路,I2 可以沿着流水线继续直到第二个 ALU 阶段,它必须在这里等待直到它可以拉出 R2,直到它的第二个 DM 阶段之后才由 I1 处理。
还有一个,只是为了确保我了解所有内容:
I1:R1+R2-->R3,I2:SD[R4]<--R3
IF-->DE-->RR-->AL-->AL-->DM-->DM-->RW
IF-->DE-->ST-->ST-->ST-->ST-->ST-->RR-->AL-->AL-->DM-->DM-->RW (without)
IF-->DE-->RR-->AL-->AL-->DM-->DM-->RW (with)
据我了解,如果不绕过,它将在相同的位置停顿相同数量的档位(5)。然而,在绕过的情况下,会有 0 个停顿,因为 I2 将使用 ALU 阶段来计算寄存器地址,并且当需要进行存储时,它可以从 I1 中的第二个 ALU 阶段获取信息。