流水线的性能指标

三个量:吞吐率、加速比、效率。它们全部从同一张时空图算出来,而且三者之间有确定的换算关系——记住一个就能推出另外两个。

本节唯一需要背的是总时间公式,其余全是它的推论。

机制

起点:总时间

设流水线有 段,每段耗时 (即 ),连续输入 条指令:

这个式子的来历就是5.6.1 的时空图:第一条指令要走完 段,其余 条每条只多占 1 拍。

不流水时的总时间(作为对照组):

每条指令老老实实走完 段,谁也不重叠——这正是5.2.3 单周期式执行的形态。

三个指标

吞吐率 TP

单位时间内完成的指令条数。

最大吞吐率就是”每拍一条”,永远达不到但可以逼近。

加速比 S

不流水与流水的时间之比。

加速比的上限是段数 。 这个结论很直观: 个工位同时开工,最多快 倍。

效率 E

时空图中”有效面积”占”总面积”的比例。

有效面积总面积

“总面积”是 行 列的整个矩形,“有效面积”是被 条指令实际占用的 个格子。空白的部分就是建立期和排空期的浪费。

三者的换算关系

这组关系比三个公式本身更好用,因为算出一个就能立刻得到其余两个:

验证一下: ✓

三个极限值也因此串在一起:

极限含义
每拍一条
快 倍
没有空转

三者同时达到极限,因为它们本来就是同一件事的三种表述。

有停顿时怎么算

上面全部假设没有冒险。 有停顿时,公式的用法是把停顿拍数加进总时间:

各处停顿拍数

或者从 CPI 的角度:

平均每条指令的停顿拍数冒险的代价

做题时按题目给的形式选一种,不要两种混用。

典型算法:给出”分支指令占 20%,每次分支浪费 2 拍;load-use 冒险占 10%,每次停 1 拍”,则

段数不是越多越好

考虑段间寄存器的固定开销 :

其中 是不分段时的总组合延迟。于是

段数趋于无穷时,吞吐率不是无穷,而是被段间寄存器的延迟卡死在 。

再加上冒险的代价,情况更差:段数越多,分支代价越大(要冲刷的段更多)、数据冒险的距离更长。所以真实处理器的段数有一个最优值,历史上 Pentium 4 把段数推到 20 级以上换主频,结果分支预测失败的代价大到得不偿失——这是”超流水线”的天花板,见 5.6.5。

与性能公式的关系

流水线动的是哪一项?

量流水线的影响
不变(除非用软件插 nop,那时 ↑)
从 降到接近 1,冒险会把它抬回去一些
从”整条指令”降到”最慢一段 + ”

流水线是本章唯一同时改善两个因子的技术(5.2.3 那张三方案对比表)。这就是它成为所有现代处理器基础的原因。

边界

边界辨析: / / 各自的分母

  • 的分母是时间 → 单位是”条/秒”
  • 的分母是流水后的时间 → 无量纲的倍数
  • 的分母是时空图的总面积 → 无量纲的比例,

一定是算错了。

边界辨析:加速比的上限

(段数),不是 也不是 。

且这个上限只在 时逼近。 时 ——只有一半。

边界辨析:段数越多越好吗

不是。 两个反向因素:

  1. 段间寄存器开销 是固定的, 的上限被卡在
  2. 冒险代价随段数增长——分支冲刷的段更多、数据相关的距离更长

存在最优段数。

对照速查

量公式极限()
总时间 ——
不流水 ——
吞吐率
加速比
效率
换算式子
效率 ← 吞吐率
加速比 ← 效率
加速比 ← 吞吐率
场景 取什么
各段时间相同该时间
各段时间不同最慢段的时间
题目给段间寄存器延迟最慢段 +

考点

  • 给 、、 求三个指标:套公式,注意 取最慢段。
  • 画时空图数格子:效率题常要求按面积算,画图比套公式稳。
  • 有冒险时的实际 CPI:比例停顿拍数。
  • 段数与性能的关系:能说出”段间寄存器开销 + 冒险代价”两个反向因素。
  • 三者的换算:算出一个推另外两个,是节省时间的关键。

链接