程序性能优化

一、问题域总览(Performance Problem Space)

一切性能问题,本质上都可归约为以下五类之一或其组合:

问题类型核心受限因素典型症状首要优化方向
Work‑limited算法工作量CPU 时间随输入规模线性/指数增长算法与数据结构
Throughput‑limited执行单元吞吐IPC 偏低、流水线空泡指令级并行、结构重排
Latency‑limited依赖链长度单核延迟高、乱序空间不足缩短依赖链
Memory‑limited内存层级Cache miss 高、带宽打满数据布局与局部性
Compiler‑limited编译器约束优化未生效程序结构与语义澄清

核心原则:性能分析必须先完成“问题分类”,否则任何优化都是盲目的。


二、第一性原理(Essence)

程序性能由四个不可约要素决定:

1. Work(工作量)

系统实际执行的计算总量,由算法范式与数据结构决定。

2. Constraint(约束)

由编译器规则、处理器微架构与内存体系施加的物理与语义边界。

3. Parallelism(并行性)

系统在不同层级可同时推进的计算能力:

4. Mapping(映射)

抽象计算如何被映射为真实硬件执行:程序 → IR → ISA → 微架构执行单元。

性能 = 抽象计算结构与物理执行模型的匹配效率


三、统一模型体系(Core Models)

3.1 计算模型(Computation Model)

3.2 编译器模型(Compiler Model)

3.3 处理器模型(Processor Model)

性能统一抽象:

Performance = min(Work, Throughput, Dependency Latency, Memory Bandwidth)


四、核心抽象到工程能力的映射

原理要素模型支撑工程能力典型策略
Work计算模型算法能力算法替换、数据结构优化
Constraint编译器 / 硬件结构设计消除别名、简化控制流
ParallelismDAG / ILP并行构造循环拆分、展开、多累积
Mapping全链路协作能力编译器友好结构

五、能力体系(Capability System)

5.1 算法与数据能力

5.2 程序结构能力

5.3 编译器协作能力

5.4 架构适配能力

5.5 性能治理能力


六、程序到硬件的架构映射模型

flowchart LRA[源代码] --> B[前端: 语义/类型]B --> C[IR]C --> D[优化器]D --> E[ISA 生成]E --> F[乱序/流水线执行]F --> G[寄存器/Cache/DRAM]

原则:不同层级的优化必须在对应模型中生效。


七、优化策略分类(Taxonomy)

  1. **减少 Work**:算法、数据结构
  2. **提升可优化性**:结构简化、局部性
  3. **释放编译器潜力**:语义明确、别名消除
  4. **适配微架构**:并行、依赖链、分支
  5. **内存体系优化**:访问模式与带宽利用

八、性能治理:从工具到控制论

8.1 监控(Signal Acquisition)

8.2 诊断(State Estimation)

8.3 治理(Feedback Control)

Profiling 工具只是信号采集器,而非优化本身。


九、反模式与认知误区(Anti‑Patterns)


十、演进趋势(Model‑Driven Evolution)

未来核心能力:结构化并行性与数据局部性设计。


十一、统一决策框架(Selection Framework)

flowchart TDA[性能不足] --> B{问题类型}B -->|Work| C[算法/结构]B -->|Throughput| D[并行/展开]B -->|Latency| E[缩短依赖链]B -->|Memory| F[数据布局]B -->|Compiler| G[语义澄清]

十二、总结

程序性能优化不是代码技巧,而是:

优化性能,本质上是重构计算,使其更符合物理执行规律。

关联内容(自动生成)