流水线
引入
词汇
| English | 释义 | 拼音 |
|---|---|---|
| pipelining/ˈpaɪplaɪnɪŋ/ | 流水线 | liú shuǐ xiàn |
| retires | 完成 | wán chéng |
| CPI | 每条指令周期数 | měi tiáo zhǐ lìng zhōu qī shù |
| forwarding | 前递 | qián dì |
| read-after-write hazard | 读后写相关 | dú hòu xiě xiāng guān |
流水线
- 流水线 pipelining 把指令重叠在五个阶段——IF、ID、EX、MEM、WB——像装配线:第 $i+1$ 条取指时第 $i$ 条译码。装满后每周期完成 retires 一条指令。
- $n$ 条指令、$k$ 级流水用 $n + k - 1$ 个周期:五条指令五级用 $5 + 5 - 1 = 9$ 个周期而非 $25$;$n = 100$ 时 104 个。

{exercise:uni-cs0603-formula}
练习
五级流水上十条指令用——周期。
难度 1/5 · 今日首次完成可获 100 金币及少量额外奖励
n+k−1=14:先填四拍再每拍一条。
级时间与 CPI
- 级时间取最慢一级:IF 250、ID 150、EX 200、MEM 250、WB 100 ps,则每级 250 ps——每条指令 250 ps,对比单周期 900 ps。
- 理想 CPI 每条指令周期数为 1;停顿抬高它。1000 条指令、25% 是 load、其中一半紧接使用(各停一拍):$1000 + 125 + 4 = 1129$ 周期,CPI $1.129$。
{exercise:uni-cs0603-cpi}
练习
1000 条、25% load、其中一半 load-use:总周期——
难度 1/5 · 今日首次完成可获 100 金币及少量额外奖励
1000+125 停顿+4 填充=1129,CPI 1.129。
冒险与前递
- 读后写相关 read-after-write hazard:
add R1, R2, R3之后sub R4, R1, R1——sub 在 ID 读 R1,比 add 在 WB 写它早一个周期。 - 前递 forwarding 把 ALU 输出直接接回下一级 ALU 输入,等待完全消失——除非生产者是 load:
lw R1, …; add R3, R1, R2仍要停一拍(数据 MEM 后才有)。EX 中解析的taken 分支也花一个气泡。
{exercise:uni-cs0603-hazard}
练习
前递能藏住 ALU 间等待,但 load-use 仍要——
难度 1/5 · 今日首次完成可获 100 金币及少量额外奖励
load 数据 MEM 后才有,相关指令等一个气泡。