性能公式与 Amdahl 定律¶
“更快”必须先说明指标、工作负载和基线。峰值频率、单条延迟、系统吞吐量、能耗和尾延迟可能给出完全不同的结论。
CPU 时间公式¶
程序 CPU 时间可分解为:
或:
\(IC\) 是动态指令数,\(CPI\) 是每条指令平均周期数,\(f\) 是时钟频率。编译器优化可能减少 \(IC\) 却增加 cache miss;微体系结构优化可能降低 CPI 却拉长时钟周期。单看其中一项会误判。
若多类指令的 CPI 不同:
其中 \(p_i\) 是动态比例。
延迟、吞吐与尾延迟¶
- 延迟:一个任务从开始到完成的时间;
- 吞吐量:单位时间完成的任务数;
- 尾延迟:较慢分位数,如 P99 响应时间。
批处理和流水线可提高吞吐,却可能增加单个请求等待。平均值也会掩盖罕见的 cache miss、页故障或 SSD 垃圾回收,因此在线系统常看分位数。
加速比¶
新方案相对旧方案的加速比是:
若时间从 10 s 降到 8 s,加速比为 1.25,而不是“快 2 s”就能跨工作负载比较。
Amdahl 定律¶
设原执行时间中比例 \(p\) 的部分可加速 \(s\) 倍,其余不变,则:
最小完整例子¶
某程序 60% 时间在向量计算,向量单元让这部分快 4 倍:
局部快了 4 倍,整体只有约 1.82 倍。如果可加速部分无限快:
不可优化的 40% 决定上限。
“比例”会随优化变化¶
优化前占 60% 的部分被加速后,它在新运行时间中的比例会下降。不能拿优化后的采样比例直接代入以原时间为基准的 \(p\),也不能连续优化时简单相加加速比。
这解释了性能工作的循环:优化最大热点后重新测量,新瓶颈会浮现。
并行效率¶
用 \(N\) 个处理单元获得加速比 \(S_N\) 时,并行效率为:
同步、通信、负载不均和串行部分会让效率下降。弱扩展通过随处理器数增加问题规模,可能保持较好利用率;强扩展固定问题规模,更快遇到 Amdahl 上限。
性能、功耗与能量¶
功率是单位时间能量,能量是完成任务的总消耗:
更快完成可能提高瞬时功率却减少总能量,也可能相反。移动设备关注能量与热约束,数据中心还关注吞吐每瓦。降低电压对动态功耗影响显著,但可能迫使频率下降。
正确的测量习惯¶
- 使用代表性输入和完整系统;
- 明确冷 cache、热 cache和预热阶段;
- 多次测量并报告波动与分位数;
- 区分 CPU 时间、墙钟时间和 I/O 等待;
- 同时查看指令数、周期、miss 和带宽等计数器;
- 先验证结果正确,再比较性能。
自测¶
- 为什么提高频率可能反而增加总执行时间?请从 CPI 变化举例。
- 可优化比例 90%、局部加速 10 倍时,总加速比是多少?
- 吞吐量提升但 P99 变差,可能发生了什么排队权衡?