跳到主要内容

CPU 与流水线

CPU 是计算机的核心执行单元,负责取指、译码、执行与数据回写。本篇梳理 CPU 的组成、指令周期,并深入五级流水线及其冒险处理。

CPU 五大组件

  • ALU (算术逻辑单元):执行加减乘除、逻辑与或非、移位等运算。
  • CU (控制单元):产生时序与控制信号,指挥各部件协同工作。
  • 寄存器组:高速存储,包括通用寄存器、PC、IR、PSW 等。
  • 时钟:周期性方波信号,决定指令步进的节拍。
  • 总线:数据/地址/控制总线,连接 CPU、主存与 I/O。

指令周期

一条指令经历 取指 → 译码 → 执行 → 访存 → 写回 五个阶段,各阶段占用一个时钟周期:

IF 取指: IR <- M[PC], PC <- PC + 4
ID 译码: 读寄存器, 译码 OP, 产生控制信号
EX 执行: ALU 计算 / 地址生成
MEM 访存: load/store 访问数据存储器
WB 写回: 结果写回寄存器堆

不同指令各阶段耗时不同,通常以最慢阶段作为时钟周期长度,限制了单周期 CPU 的性能上限。

五级流水线

将指令周期拆分,各阶段并行处理不同指令,理论 CPI 趋近 1:

周期 1 IF1
周期 2 IF2 ID1
周期 3 IF3 ID2 EX1
周期 4 IF4 ID3 EX2 MEM1
周期 5 IF5 ID4 EX3 MEM2 WB1
周期 6 IF6 ID5 EX4 MEM3 WB2
...

满载时每个周期完成一条指令,吞吐率提升约 5 倍。深度流水线(如 14 级、20 级)可进一步压低周期,但同时加剧冒险与功耗。

三类冒险与处理

  • 结构冒险:硬件资源争用,如同时访存取指与读写数据。解决:哈佛结构(指令/数据 Cache 分离)。
  • 数据冒险:后续指令用到前序指令尚未写回的结果。解决:数据转发 (forwarding) 从 EX/MEM 旁路到 EX 输入,或必要时插入 1 个 气泡 (stall)。
  • 控制冒险:分支/跳转改变 PC,后续已取指的指令作废。解决:延迟槽、分支预测(BTB、2-bit 饱和计数器)、动态预测器,或静态预测(默认向后跳转预测 taken)。
典型转发示例
add r1, r2, r3
sub r4, r1, r5 <- r1 来自上一条 ALU 结果,无需等待 WB

良好的转发与预测可让 CPI 接近 1,但预测失败与访存延迟仍是现代超标量 CPU 的主要性能瓶颈。