📘 内存层级 & 缓存优化实战

🎯 编译器视角 · 30 章进阶 🚀 从寄存器到分布式
⚡ 友好色系
01 内存层级概览
为什么需要缓存?从寄存器到硬盘的层级结构,局部性原理。
02 缓存基础
Cache Line、命中与缺失、直接映射与组相联。
03 缓存一致性协议
MESI协议详解,False Sharing问题。
04 编译器优化概览
编译器如何感知缓存?优化流程与IR表示。
05 循环优化 (上)
循环展开(Loop Unrolling)的原理与代价。
06 循环优化 (中)
循环交换(Loop Interchange)与数据布局。
07 循环优化 (下)
循环分块(Loop Tiling)与时间局部性。
08 数据预取
软件预取指令(Prefetch)与硬件预取器。
09 数据布局优化
结构体拆分(Struct Splitting)与字段重排。
10 数组优化
数组合并(Array Merging)与数组填充(Array Padding)。
11 内联优化
函数内联对指令缓存(I-Cache)的影响。
12 分支优化
条件分支预测与无分支代码(Branchless Code)。
13 指令调度
编译器如何重排指令以隐藏访存延迟。
14 寄存器分配
图着色算法与溢出(Spill)对缓存的影响。
15 过程间优化
过程间分析(IPA)与链接时优化(LTO)。
16 自动向量化
SIMD指令与数据对齐对缓存的影响。
17 内存别名分析
指针别名对优化的限制。
18 垃圾回收与缓存
GC对数据局部性的破坏与优化。
19 多线程优化
线程亲和性(Affinity)与NUMA感知。
20 锁优化
无锁数据结构与缓存行填充(Cache Line Padding)。
21 内存池与分配器
定制分配器如何改善局部性。
22 编译器PGO
基于性能剖析的优化(Profile-Guided Optimization)。
23 编译时计算
常量折叠与常量传播对内存访问的简化。
24 死代码消除
减少代码体积以改善I-Cache。
25 公共子表达式消除
减少冗余计算与内存访问。
26 强度削弱
将昂贵操作(乘法)替换为廉价操作(移位)。
27 软件流水
循环的软件流水技术(Software Pipelining)。
28 缓存感知算法
从算法层面设计缓存友好的数据结构。
29 性能分析工具
Perf、Valgrind、Cachegrind的使用。
30 综合实战
优化一个矩阵乘法从10 GFLOPS到50 GFLOPS。