指令执行方案

前两节说清了”一条指令要经历哪些阶段、每个阶段搬什么”。这些内容在三种执行方案下完全一样——搬的东西不变,变的只有一件事:时钟周期的边界画在哪。

这一节是全章最短的一节,但它是性能公式在 CPU 设计上的第一次落地:三种方案对应 里 CPI 和 的三种取舍,而 IC 三者相同。

机制

单周期方案

一条指令在一个时钟周期内做完,下一条指令的取指在下一个时钟上升沿开始。

最复杂那条指令的执行时间
  • 优点:控制极简单——不需要记”现在是第几拍”,控制信号在整个周期内保持不变。
  • 致命缺点: 被最慢的指令绑架。一条 ADD R1,R2 明明几纳秒就能做完,也必须占满按乘法或访存指令定出来的整个周期。

这就是 5.2.1 说的”要求整齐就得按最慢的来”,在本章第二次出现。 单周期方案里,浪费的比例等于”平均指令时间 / 最慢指令时间”的差额,通常相当可观。

还有一条不常被强调但很重要的限制:单周期方案里每个功能部件在一个周期内只能被用一次。取指要访存、取数也要访存,而它们在同一个周期里——所以必须有两套存储器接口(指令存储器与数据存储器分开),否则冲突。这就是哈佛结构在教学 CPU 里常被采用的原因。

多周期方案

把一条指令拆成若干步,每一步占一个时钟周期。

(且因指令而异),最复杂那一步的时间
  • 优点: 大幅缩短——现在被绑架的是”最慢的一步”而不是”最慢的一条指令”,而一步比一条指令小得多。而且简单指令可以少用几个周期,不必陪着复杂指令一起等。
  • 代价:需要状态机记住”现在做到第几步了”(就是 5.2.1 那四个触发器),控制器复杂了;还需要额外的寄存器在步与步之间存住中间结果(暂存器 T、Y、Z 的由来,见 5.1.2)。

多周期方案下,功能部件可以被复用——取指用一次存储器,取数再用一次,因为它们在不同的时钟周期。所以多周期 CPU 只要一套存储器接口。

流水线方案

在多周期的基础上,让各段同时为不同的指令服务。

(理想),最慢那一段的时间

这是把前两种方案的优点合并: 像多周期一样小(按段取),CPI 像单周期一样接近 1(按吞吐算)。代价是需要段间寄存器、需要处理冒险,而且单条指令的延迟并没有变短——它仍然要走完所有段。

“流水线提高吞吐率而不缩短单条指令延迟”这句话,在这里第一次出现,5.6 会反复用它。 参见 5.6.1。

三方案对性能公式的影响

方案说明
单周期相同1最长指令CPI 最优, 最差
多周期相同,随指令变化最长阶段CPI 变差, 大幅改善
流水线相同(有冒险时 )最长流水段两项都好,代价是硬件复杂

IC 三者完全相同——因为三种方案执行的是同一个程序、同一套指令集。 这一点常被忽略,但它正是能把三者放在一起比的前提:只有 IC 固定,CPI 和 的对比才有意义。

对照 4.4.3:CISC 与 RISC 的比较之所以困难,恰恰是因为它们三个因子全在变(RISC 的 IC 更大、CPI 更小、 更小),所以”只给一个因子无法判断快慢”。而本节三种方案只动两个因子,方向明确,可以直接排序。

为什么单周期方案还要讲

单周期在真实处理器里基本不用,但它在考试和教学里有两个不可替代的位置:

  1. 它是流水线的对照组。 5.6 算加速比时的分母,常常就是”不流水的情况”,而那正是把各段串起来一次做完——即单周期式的执行。
  2. 它把”控制信号在整个周期内保持不变”这件事说清楚了。 多周期和流水线下,同一根控制线在不同拍上取值不同,这才需要时序系统;理解了单周期不需要时序,就理解了时序系统到底在解决什么。

边界

层次辨析:三种方案的 各由什么决定

  • 单周期:最复杂指令的总时间
  • 多周期:最复杂阶段的时间
  • 流水线:最慢流水段的时间(含段间寄存器的延迟)

三者的粒度依次变细, 依次变小。判据一句话:这个方案里,一个时钟周期最少要装下什么。

边界辨析:多周期 CPI / 流水线 CPI

  • 多周期 CPI :一条指令真的要占用 个周期,期间处理器不做别的
  • 流水线理想 CPI :一条指令仍占 个段,但每个周期都有一条指令完成

二者的 CPI 定义相同(周期数 / 指令数),差别在是否重叠。流水线的 CPI 算的是稳定状态下的吞吐,不是单条指令的延迟。

边界辨析:单周期 ≠ CPI 最优就最快

单周期的 CPI 是三者中最好的,但它最慢。这是”只看一个因子会得出错误结论”的最直接反例——必须把 一起看。同样的陷阱在 4.4.3 和 1.3.1 各出现一次。

对照速查

说法判断
单周期处理器的 CPI 等于 1✅
单周期处理器速度最快❌ 时钟周期被最慢指令绑架
多周期处理器不同指令的 CPI 可以不同✅ 这正是它的优势
多周期处理器需要状态机✅ 要记住做到第几步
单周期处理器需要两套存储器接口✅ 取指与取数在同一周期
流水线缩短了单条指令的执行时间❌ 缩短的是平均每条指令的时间(吞吐)
三种方案的指令条数 IC 相同✅ 同一程序、同一指令集

考点

  • 三方案的 CPI 与 对照:选择题直接问,靠上表。
  • “单周期为什么慢”:答时钟周期取最长指令的执行时间,简单指令被迫等待。
  • 给各段延迟求三种方案下的执行时间:典型题给出取指 200ps、译码 100ps、执行 200ps……求单周期 (求和)、多周期 (取最大)、流水线 (取最大 + 寄存器延迟)。
  • 接 5.6:流水线加速比 不流水流水 里的分母就是本节的单周期式执行,见 5.6.4。

链接