性能分析
性能分析
perf stat ./program # 总览:cycles, instructions, cache-misses, branch-misses
perf record ./program # 采样
perf report # 查看热点
perf annotate # 指令级
# 关键指标
# IPC (instructions per cycle): 现代 CPU 理想 4+,低于 1 说明在等内存
# cache-miss rate: > 5% 就该优化内存访问
# branch-miss rate: > 5% 就该优化分支Top-down 分析方法:
1. 是不是被内存带宽限制?(cache miss 高)
2. 是不是被分支限制?(branch miss 高)
3. 是不是被依赖链限制?(IPC 低但不 miss)
4. 是不是指令数太多?(没向量化)常见坑
- 把"指令少"等同于"快":现代 CPU 上,cache miss 的代价远超几条指令
- 以为
i++比++i慢:对int完全一样(编译器会优化);对迭代器有理论差异 volatile当成原子操作:volatile只防止编译器优化,不保证原子性、不保证内存序- 伪共享:多线程反而变慢,最难查
- 对齐问题:未对齐访问在某些架构上会崩或极慢
- 浮点比较用
== - 有符号溢出:UB,编译器可能做出奇怪的优化(如删掉
if (x + 1 > x)) memcpy的别名:源和目标重叠时 UB(用memmove)- 忽略分支预测:随机分支是最容易被忽视的性能杀手
- 以为多核一定快:同步和缓存一致性的开销可能超过收益
许可协议:CC BY
作者:Davids
本文链接:https://hustjjd.github.io/computer/architecture/performance-analysis/
更新于:2026年10月12日