第5章 流水线与冒险¶
如果一条指令完整经过取指、译码、执行、访存和写回后,下一条才开始,大部分部件会在多数时间闲置。流水线让不同指令同时占据不同阶段,用空间并行换吞吐量。
核心直觉¶
洗衣流程中,洗涤、烘干、折叠可由不同设备重叠。第一筐衣服完成时间未必缩短,但稳定后单位时间能完成更多筐。CPU 流水线同样主要提高吞吐量,不是保证降低单条指令的延迟。
理想的 \(k\) 级流水线执行 \(n\) 条指令约需:
\[
k+n-1
\]
拍,而非流水方式约需 \(kn\) 拍。但理想模型忽略了阶段不均衡、流水寄存器开销和冒险。
本章内容¶
- 流水线、冒险、转发与停顿:处理结构、数据与控制冲突。
- 控制冒险与分支预测:在分支结果未知时猜测未来,并在猜错后恢复。
评价指标¶
理想标量流水线的 CPI 接近 1,实际为:
\[
CPI=CPI_{ideal}+Stalls_{data}+Stalls_{control}+Stalls_{memory}.
\]
加深流水线可能缩短时钟,却会放大分支惩罚和寄存器开销。因此“更多级”不是单调更好。
本章自测¶
- 为什么五级流水线不能让单条指令快五倍?
- 冒险为何是“当前调度可能破坏正确性”,而不一定已经产生错误?
- 若 cache miss 需要 100 拍,单纯把 ALU 流水线加深能解决问题吗?