首页/计算机组成原理/中央处理器/流水线性能计算 🔗 在 Obsidian 中打开
计算机组成原理 · 中央处理器

流水线性能计算

重要度 ⭐⭐⭐⭐⭐中央处理器流水线性能吞吐率加速比CPU
速查
k 段流水线 n 条指令时间 $T=(k+n-1)\Delta t$;最大吞吐率 $TP_{max}=1/\Delta t$;最大加速比 $S_{max}=k$;效率 $E=\dfrac{n}{k+n-1}$(= 时空图有效面积 / 总面积)。

速查

项目
吞吐率 TPn 条指令 / 流水线总时间
最大吞吐率$1/\Delta t$($\Delta t$ 为最长段时间)
加速比 S非流水线时间 / 流水线时间
效率 E时空图中有效面积 / 总面积
k 段 n 条指令时间$k\cdot\Delta t + (n-1)\cdot\Delta t = (k+n-1)\cdot\Delta t$

核心概念

设流水线有 k 个阶段,每段耗时 $\Delta t$,执行 n 条指令。

流水线执行时间

$$T_{流水线} = k \cdot \Delta t + (n-1) \cdot \Delta t = (k+n-1) \cdot \Delta t$$
  • 前 $k\cdot\Delta t$ 是第一条指令流完所有段的时间(装入);
  • 后 $(n-1)\cdot\Delta t$ 是剩余 n-1 条指令各花 1 个 $\Delta t$ 依次流出(排空)。
$$T_{非流水线} = n \cdot k \cdot \Delta t$$

吞吐率(Throughput)

$$TP = \frac{n}{T_{流水线}} = \frac{n}{(k+n-1) \cdot \Delta t}$$

最大吞吐率($n\to\infty$):$TP_{max} = \dfrac{1}{\Delta t}$。

加速比(Speedup)

$$S = \frac{T_{非流水线}}{T_{流水线}} = \frac{n \cdot k}{k+n-1}$$

最大加速比($n\to\infty$):$S_{max} = k$。

流水线效率(Efficiency)

$$E = \frac{S}{k} = \frac{n}{k+n-1}$$

各段时间不等时

设各段时间分别为 $t_1, t_2, \ldots, t_k$,取最长段 $\Delta t = \max(t_i)$:

$$T = k \cdot \Delta t + (n-1) \cdot \Delta t = (k+n-1) \cdot \Delta t$$
瓶颈段决定吞吐率各段时间不等时,由最长段决定整体节拍,其余段存在空闲。

关键性质

公式说明
$T = (k+n-1)\cdot\Delta t$k 段流水线 n 条指令时间
$TP = \dfrac{n}{(k+n-1)\Delta t}$吞吐率
$TP_{max} = 1/\Delta t$最大吞吐率
$S = \dfrac{nk}{k+n-1}$加速比
$S_{max} = k$最大加速比(段数)
$E = \dfrac{n}{k+n-1}$效率
$E_{max} = 1\ (n\to\infty)$最大效率

常见考法与计算示例

考法解题套路
求流水线执行时间$T = (k+n-1)\cdot\Delta t$
求吞吐率$TP = n/T$
求加速比$S = T_{非流水}/T_{流水}$
各段时间不等$\Delta t$ 取最长段的时间
流水线冒险影响冒险 → 停顿 → 实际时间增加
装入 / 排空时间装入 $= k\cdot\Delta t$,排空 $= (k-1)\cdot\Delta t$

计算示例

4 段流水线(IF/ID/EX/WB),每段 2ns,执行 100 条指令:

  • $T = (4+100-1)\times 2 = 103\times 2 = 206$ ns;
  • $TP = \dfrac{100}{206}\ \text{ns} \approx 0.485$ 条/ns;
  • 非流水线:$100\times 4\times 2 = 800$ ns;
  • $S = \dfrac{800}{206} \approx 3.88$;
  • $E = 100/(4+100-1) \approx 97.1\%$。

易错点

  • ⚠️ 流水线时间不是 $n\cdot\Delta t$,是 $(k+n-1)\cdot\Delta t$(前 k 段有装入时间);
  • ⚠️ 各段时间不等时,$\Delta t$ 取最长段(不是平均值);
  • ⚠️ 加速比最大为 $k$(段数),不是 $n$;
  • ⚠️ 有冒险时实际时间会增加(需要停顿/气泡);
  • ⚠️ 效率不会超过 1(100%),最大加速比为 $k$。

核心结论

  1. k 段流水线 n 条指令时间:$T = (k+n-1)\cdot\Delta t$;
  2. 吞吐率受限于瓶颈段(最长段);
  3. 加速比最大为 $k$(段数),$n\to\infty$ 时达到;
  4. 效率 = 加速比 / 段数,最大为 1;
  5. 有冒险时需插入气泡,实际性能降低。

交互动画 · 时空图与效率

彩色格为有效占用(每条指令走完 k 段),空白格为空闲。效率 = 有效格 / 总格 = $kn / [k(k+n-1)] = n/(k+n-1)$。点击切换不同 k、n。

记忆卡片

k 段流水线 n 条指令的时间公式?
$T = (k+n-1)\cdot\Delta t$
最大吞吐率和最大加速比?
$TP_{max} = 1/\Delta t$,$S_{max} = k$
各段时间不等时怎么取 $\Delta t$?
取最长段的时间
为什么加速比最大是 $k$?
$n\to\infty$ 时装入排空时间可忽略,每条指令平均 1 个 $\Delta t = k/(k\cdot\Delta t)$
有冒险时性能如何变化?
插入气泡 → 总时间增加 → 吞吐率/加速比下降

相关知识点

指令流水线 流水线性能分析 流水线冒险详解

提示:本文是「流水线性能分析」的速算版,二者公式一致;冒险对性能的影响见「流水线冒险详解」。