CPU 微架构核心概念 —— 缓存、流水线、超标量、SMT

ISA 决定 CPU “能做什么“,微架构决定 CPU “做得多快“。这一篇讲六个最关键的微架构概念——理解它们,你就能看懂 Intel/AMD 每代 CPU 发布会上”IPC +15%”背后到底改了什么。

缓存层级(Cache Hierarchy)

CPU 频率早就突破 5 GHz,但 DRAM 访问延迟仍在 ~80 ns(约 400 个 CPU 周期)。如果每次取数据都等 DRAM,CPU 大部分时间都在干等。缓存就是为了把”常用数据”留在离 CPU 更近的地方

graph LR
  CPU[CPU 核心
~5 GHz] L1[L1 Cache
32-64 KB / 核
~4 cycles] L2[L2 Cache
1-4 MB / 核
~12 cycles] L3[L3 Cache
共享 32-512 MB
~40 cycles] DRAM[(DRAM
GB 级
~200 cycles)] CPU --- L1 --- L2 --- L3 --- DRAM
容量 访问周期 是私有还是共享
L1 32-64 KB 3-5 周期 每核私有
L2 0.5-4 MB 10-15 周期 每核私有(部分架构是 cluster 共享)
L3 32-512 MB 30-50 周期 全 socket 共享(AMD 是 CCD 内共享)
DRAM GB 级 200+ 周期 -

L1 通常分两个:L1I(指令)和 L1D(数据)——这就是”修正的哈佛架构”。

Inclusive vs Non-inclusive

L3 缓存设计的两种风格,Intel 在 Skylake 时期切换过:

Inclusive Non-inclusive / Exclusive
含义 L3 必含 L2 中所有数据 L3 不一定包含 L2 数据
优点 一致性协议简单(snoop 只查 L3) L3 容量利用率高
缺点 L3 容量有”重复” 一致性协议复杂
Intel Haswell 及之前 Skylake 起改为 Non-inclusive
AMD 一直 Exclusive -

大缓存的 V-Cache 突破

AMD 在 Milan-X / Genoa-X / Turin-X 上引入 3D V-Cache——在 CCD 上方堆叠一层额外的 L3 die,把每核 L3 从 32 MB 加到 96 MB。

缓存敏感型工作负载(HPC、EDA、数据库),V-Cache 单代提升 30-50%。这是 3D 封装在 CPU 上的第一个杀手级应用。

流水线(Pipeline)

流水线把一条指令的执行切成多个阶段,每个阶段用不同的硬件单元,让多条指令在不同阶段同时推进。

最经典的 5 级流水:

graph LR
  IF[取指
Fetch] --> ID[译码
Decode] --> EX[执行
Execute] --> MEM[访存
Memory] --> WB[写回
Write Back]

理想情况下,每个时钟周期完成一条指令——但实际上要远远复杂。现代 x86 服务器 CPU 的流水线通常 14-20 级深

阶段类别 作用
前端 取指、分支预测、指令缓存、译码、µop 缓存
后端调度 重命名、分发、排队
后端执行 ALU、FPU、向量、Load/Store
后端提交 写回、退休

超流水线 vs 超标量

概念 含义 实质
超流水线(Super-pipelining) 把流水线切得更细更深 时间换空间
超标量(Superscalar) 同一周期内并行执行多条指令 空间换时间

现代 CPU 既超流水线又超标量。比如 Skylake:

  • 流水线 14-19 级深
  • 后端可同时调度 8 条 µop 到不同执行单元
  • 译码每周期 4-5 条指令

Pentium 4 的教训

Intel 曾经走过”超长流水线”的极端:Pentium 4 的 NetBurst 架构流水线 20-31 级,目标是把频率推到 10 GHz。结果:

  • 流水线越深,分支预测错误代价越大
  • 漏电(leakage)随频率非线性增加
  • 5 GHz 之后撞上”功耗墙”

Pentium 4 的失败让 Intel 在 Core 微架构(2006)回归相对短的流水线 + 高 IPC——这是现代 CPU 设计哲学的重要转折。

乱序执行(Out-of-Order Execution)

一条指令可能因为等数据从内存来而停顿。如果严格按程序顺序执行,后面所有指令都得等。

乱序执行的思路:

1
2
3
4
程序顺序:  A → B → C → D
(B 等内存)
乱序执行: A → C → D → B
B 等数据期间,C 和 D 已经做完

实现要点:

  • 寄存器重命名:消除假相关(WAR、WAW)
  • 重排序缓冲(ROB):跟踪所有”在飞”的指令
  • 保留站 / 调度器:哪条指令准备好了就发射执行
  • 退休(retire):按程序顺序确认指令”真正完成”

ROB 的容量决定乱序窗口有多大。Skylake ROB 224 条,Sapphire Rapids 512 条,Zen 5 也在 400+。ROB 越大,能”看得越远”,越能容忍内存延迟。

分支预测(Branch Prediction)

CPU 取指要提前几十个周期,但遇到分支就不知道下一条指令在哪——除非等条件结果。

分支预测器猜测”分支会走哪边”,让流水线可以提前取指。预测对了:流水线全速;预测错了:清空流水线,损失 15-20 周期。

预测器类型 准确率
静态预测 ~60%
一级历史表 ~80%
两级自适应(gshare 类) ~95%
现代神经网络/感知器风格预测器 >97%

现代 CPU 的分支预测器已经接近”完美”——但剩下那 2-3% 的错误,仍是高性能计算的主要瓶颈之一。

注:Spectre/Meltdown 系列漏洞就利用了分支预测器的”推测执行”特性,2018 年后所有 CPU 都加入了缓解措施(部分会损失性能)。

同步多线程(SMT / 超线程)

Hyper-Threading(HT) 是 Intel 对 SMT(Simultaneous Multi-Threading)的商品名,AMD 直接叫 SMT。

原理:一个物理核对操作系统暴露成两个逻辑核,共享 ALU/FPU/缓存等执行单元,但有独立的寄存器和指令窗口

graph LR
  subgraph CORE["1 个物理核"]
    HT0[逻辑核 0
独立寄存器] HT1[逻辑核 1
独立寄存器] ALU[共享 ALU/FPU/Cache] HT0 --- ALU HT1 --- ALU end

为什么有用:当一个线程因为 cache miss 卡住时,另一个线程可以利用空闲的执行单元——把核的利用率从 40-50% 提到 60-80%。

SMT 的代价和争议

争议点 说明
性能收益 平均 20-30%,但取决于负载
缓存压力 两个线程共享 L1/L2,可能反而互相挤兑
侧信道安全 Spectre v3 和 L1TF 相关,多租户云上风险
部分核心去 SMT Intel E-core(Atom 系)、Sierra Forest 全系都不带 SMT

云厂商对 SMT 的态度也分两派:

  • AWS、GCP:默认开 SMT,按 vCPU 卖(1 vCPU = 1 逻辑核)
  • Azure 一些实例、阿里 ECI:关闭 SMT,按物理核卖

一张总结

graph LR
  IF[取指] --> BP[分支预测]
  BP --> DEC[译码]
  DEC --> RR[重命名]
  RR --> RES[保留站]
  RES --> ALU/FPU/MEM[执行单元]
  ALU/FPU/MEM --> ROB[ROB]
  ROB --> RET[退休]
  CACHE[多级缓存] --- IF
  CACHE --- ALU/FPU/MEM
  SMT[SMT 双线程] -.- RES

现代 CPU 的高性能 = 多级缓存 + 深流水线 + 多发射 + 乱序 + 分支预测 + SMT,六者缺一不可。每代 IPC 提升的本质,是这六个机制的某些部分被改进、扩展、重设计。

性能查询:lscpu / cpuid / dmidecode

Linux 上常用的 CPU 信息查询命令:

1
2
3
4
5
6
lscpu                         # 基本信息:型号、核数、频率、缓存
lscpu -e # 每个逻辑核的拓扑
cat /proc/cpuinfo # 详细能力(flags 字段含 ISA 扩展)
dmidecode -t processor # 来自 SMBIOS 的物理 CPU 信息
cpuid -1 # 通过 CPUID 指令读到的全部能力位
sudo turbostat # 实时频率、TDP、C-state

flags 里要关注的:

  • avx2 / avx512f / avx512_* —— SIMD 能力
  • amx_* —— Intel AMX 矩阵扩展
  • sve / sve2 / sme —— ARM 向量能力
  • vmx / svm —— 硬件虚拟化
  • aes / sha_ni —— 加密加速
  • pcid / smap / smep —— 安全特性

小结

  • 微架构是”同样 ISA 跑得多快”的答案
  • 六个核心概念:缓存层级、流水线、超标量、乱序执行、分支预测、SMT
  • Pentium 4 是”过深流水线 + 高频”的反面教材
  • 现代 IPC 改进 = 在六个机制的细节上抠出来的
  • SMT 的实用性已确定,但安全和云租户隔离上有持续争议

下一篇讲多核架构和 NUMA——单核到位之后,多核之间怎么协作。