Appearance
concepts/microarch/ —— CPU 微架构:一颗核怎么跑得快
总纲:cpu-microarch-overview.md —— 标量→流水线→超标量→乱序→投机,一条演进链串起来。
目录定位
本目录属于知识金字塔 L4 — CPU 微架构层,聚焦单核内部如何通过硬件机制提高 IPC。它与另一条线——多核内存序(memory-ordering/)——是正交的两件事。
阅读路径
按演进顺序阅读(后来者都是为解决前者瓶颈而诞生):
bash
cpu-microarch-overview.md ← 总纲:为什么 CPU 要一步步加这些机制
│
├─ cisc-risc.md ← ★ CISC→µop:x86 是 CISC 壳、RISC 芯,译码器是分界线
│
├─ pipelining-superscalar.md ← ②③ 流水线 + 超标量:阶段重叠 + 横向加宽
│ ├─ data-hazards.md ← 数据冒险:RAW/WAW/WAR 三种指令打架姿势与硬件解法
│ ├─ reservation-station.md ← 保留站:解耦译码与执行,乱序发射的发生地
│ ├─ rob.md ← ROB:顺序退休、精确异常、对头阻塞
│ ├─ lsu.md ← LSU:AGU、store buffer、store→load forwarding
│ └─ register-renaming.md ← 寄存器重命名:消除假依赖,挖出更多 ILP
│
├─ cpu-out-of-order.md ← ④ 乱序执行全景:五部件如何协作
│
├─ branch-prediction.md ← ⑤ 分支预测:跨过分支继续喂指令
│ └─ indirect-branch-prediction.md ← 间接分支专题:虚函数/函数指针/跳转表
│
└─ uop-pipeline-walkthrough.md ← ★ 纵切面:三条指令逐拍穿过全部部件的 µop 级走读文档清单
| 文档 | 定位 | 关键问题 |
|---|---|---|
| cpu-microarch-overview.md | 总纲:五步演进链 | CPU 为提升单核性能,一步步加了什么、每一步解决什么、引出什么新问题 |
| cisc-risc.md | CISC→µop 分界线 | x86 是 CISC 壳 RISC 芯:译码器为何是唯一 CISC 部件,µop 为何是 RISC 风格 |
| pipelining-superscalar.md | 流水线 + 超标量 | 阶段重叠 vs 横向加宽,五类冒险(RAW/WAW/WAR/控制/结构)怎么解 |
| data-hazards.md | 数据冒险 | RAW(真依赖/前推+等待)、WAW/WAR(假依赖/寄存器重命名消除)的机制与对比 |
| reservation-station.md | 保留站 | Tomasulo 核心:解耦译码和发射,谁操作数齐了谁先走 |
| rob.md | 重排序缓冲 | 乱序执行、顺序退休的收口;对头阻塞为什么是 IPC 杀手 |
| lsu.md | 加载存储单元 | AGU 数量决定访存 IPC 上限;store→load forwarding 怎样旁路延迟 |
| register-renaming.md | 寄存器重命名 | 消除 WAR/WAW 假依赖,为保留站挖出指令级并行 |
| cpu-out-of-order.md | 乱序执行全景 | 五大部件(重命名/保留站/执行端口/ROB/LSU)如何协同 |
| branch-prediction.md | 分支预测 | 静态/动态/混合预测器,误预测惩罚 ≈ 流水线深度 |
| indirect-branch-prediction.md | 间接分支预测 | 虚函数/函数指针/switch 跳转表,ITTAGE 目标预测器,去虚化 |
| uop-pipeline-walkthrough.md | µop 级流水线走读(纵切面) | mov [rbx],eax / add eax,[rsi+8] / addsd xmm0,[rdi+rcx*8] 三条指令逐拍穿过全部部件 |
与周边目录的关系
| 相关目录 | 关系 |
|---|---|
| ../cache/ | 上层(L3):缓存未命中是本层流水线停顿的主要原因 |
| ../memory-ordering/ | 并行线(L4):单核乱序 vs 多核内存序——正交但都涉及 store buffer |
| ../elf/ | 下层(L5):二进制基础——perf 解析符号依赖 ELF |
一句话总结:CPU 微架构是一条环环相扣的演进链——流水线填了标量的闲置,超标量填了流水线的 IPC 天花板,乱序执行填了超标量喂不饱端口的问题,分支预测填了控制冒险带来的停顿。理解这条链,才能看懂
perf stat里每一个 stall 计数器的物理含义。