什么是 Amdahl 定律
Amdahl 定律描述并行化的收益上限:设串行部分占比为 s,则无论并行部分如何加速,整体加速比的理论上限是 1/s。串行部分占 20% 时上限只有 5 倍,扩大并行资源也无法突破。它的实践意义是先把串行段(锁、单点服务、串行队列、共享争用)削掉,再投入并行优化。
基本信息
| 公式 | 加速比上限 = 1 / s,s 为串行部分占比 |
|---|---|
| 测量口径 | 占比由剖析采样或埋点实测得出,不用代码行数估计 |
| 适用前提 | 问题规模固定的场景;规模扩大时参考 Gustafson 定律 |
| 现实偏差 | 通信、调度与争用开销计入后,实测收益通常低于理论值 |
串行占比与理论上限
| 串行占比 s | 加速上限 1/s | 解读 |
|---|---|---|
| 5% | 20 倍 | 并行收益空间大 |
| 10% | 10 倍 | 仍有明显提升余地 |
| 20% | 5 倍 | 并行度再高也难突破 |
| 50% | 2 倍 | 瓶颈完全在串行段 |
落地步骤
- 拆分测量:先用剖析工具统计各段耗时占比,识别真正的大头
- 识别串行:锁竞争、单点服务、串行队列、共享资源争用
- 先削串行:串行段缩小后再投入并行优化,收益才明显
- 复测验证:每轮优化后复测占比与整体加速比,确认收益来源
- 计入开销:并行段之间的同步、合并与调度开销一并核算
- 汇报口径:结论需同时给出当前占比、理论上限与下一步计划
占比测量与加速比核算
占比测量与加速比核算
# 加速比核算(示意)
单线程总耗时 T1 = 1000ms
并行化后耗时 Tn = 250ms
实测加速比 = T1 / Tn = 4x
# 反推串行占比
若实测 4x,则有效串行占比约为 1 - 1/4 = 25%
说明:即使把并行部分再做快一倍,整体提升也有限
# 下一步优先动作
1) 确认串行段的真实位置(采样或埋点)
2) 拆分锁粒度、消除单点、并行化串行队列
3) 复测占比,再看是否值得继续加并行资源优化前先量化占比:不做测量就加大并行度,投入往往落在并行段,收益被串行段全部吃掉。
问题规模扩大的场景参考 Gustafson 定律:规模变大时并行部分占比上升,收益可以超过 Amdahl 给出的上限。