跳转至

第5章 流水线与冒险

如果一条指令完整经过取指、译码、执行、访存和写回后,下一条才开始,大部分部件会在多数时间闲置。流水线让不同指令同时占据不同阶段,用空间并行换吞吐量。

核心直觉

洗衣流程中,洗涤、烘干、折叠可由不同设备重叠。第一筐衣服完成时间未必缩短,但稳定后单位时间能完成更多筐。CPU 流水线同样主要提高吞吐量,不是保证降低单条指令的延迟

理想的 \(k\) 级流水线执行 \(n\) 条指令约需:

\[ k+n-1 \]

拍,而非流水方式约需 \(kn\) 拍。但理想模型忽略了阶段不均衡、流水寄存器开销和冒险。

本章内容

评价指标

理想标量流水线的 CPI 接近 1,实际为:

\[ CPI=CPI_{ideal}+Stalls_{data}+Stalls_{control}+Stalls_{memory}. \]

加深流水线可能缩短时钟,却会放大分支惩罚和寄存器开销。因此“更多级”不是单调更好。

本章自测

  1. 为什么五级流水线不能让单条指令快五倍?
  2. 冒险为何是“当前调度可能破坏正确性”,而不一定已经产生错误?
  3. 若 cache miss 需要 100 拍,单纯把 ALU 流水线加深能解决问题吗?