Amdahl 定律 vs Gustafson 定律 — 完整教程、推导、应用场景及 Python 绘图
Amdahl 定律 vs Gustafson 定律:完整教程、推导、应用场景及 Python 绘图
理解并行加速:通过代码讲解 Amdahl 定律和 Gustafson 定律
并行计算基础:Amdahl 定律、Gustafson 定律及加速建模
并行加速原理:Amdahl 和 Gustafson 定律完整指南
并行扩展解析:推导并比较 Amdahl 和 Gustafson 定律
Amdahl vs Gustafson:并行加速完整指南(含 Python 代码)
并行性能建模:Amdahl 定律、Gustafson 定律及实际应用
学习并行加速:数学、直觉、应用场景及 Python 可视化
并行计算:必须掌握的两条定律(Amdahl & Gustafson)
工程师的并行加速:Amdahl 定律、Gustafson 定律及 Python 实现
从理论到代码:用 Amdahl 和 Gustafson 建模并行加速
实用并行加速指南:Amdahl 定律、Gustafson 定律及可视化
为什么并行不是无限的:简单解释 Amdahl vs Gustafson
并行加速真相:Amdahl 限制 vs Gustafson 扩展
并行计算神话与现实:Amdahl 和 Gustafson 的教训
引言
并行计算在现代计算中至关重要:多核 CPU、GPU、分布式集群、云工作负载、LLM 训练以及 HPC 模拟。
为了分析程序在更多处理器下能加速多少,主要有两种数学模型:
- Amdahl 定律 — 固定规模工作负载的性能
- Gustafson 定律 — 可扩展规模工作负载的性能
这两条定律并不矛盾,它们回答的是 不同的问题。
本教程涵盖推导、直觉、比较、实际应用场景,以及展示两条定律的 Python 绘图脚本。
1. 什么是加速比?
加速比衡量程序在 N 个处理器上运行速度提升多少:
如果程序在一个处理器上运行 10 秒,两处理器运行 5 秒,则加速比为:
完美线性加速为:
但实际系统存在串行瓶颈,这正是 Amdahl 定律和 Gustafson 定律描述的内容。
2. Amdahl 定律(固定工作量)
2.1 直觉
Amdahl 假设:
- 总工作量保持 不变
- 部分工作是串行的,无法并行化
设:
f= 串行比例1 - f= 可并行比例
2.2 推导
一个处理器的运行时间:
定义:
因此:
N 个处理器的运行时间:
加速比:
其中 f 是串行工作比例,
其中
2.3 当 N → ∞ 时的极限
如果串行比例为 10%(f = 0.1):
即使处理器无限,也无法超过该值。
2.4 Amdahl 定律的实际应用场景
Amdahl 适合优化固定任务的 延迟:
- GPU 内核优化固定张量大小
- 单次请求推理延迟降低
- 视频编码、压缩、排序
- 加速固定批量作业
- 数据库查询加速
3. Gustafson 定律(可扩展工作量)
3.1 直觉
Gustafson 反过来问:
“增加处理器,我能在相同时间内解决多大的问题?”
这反映了真实 HPC 工作负载:更多 CPU → 更高分辨率 → 更大模拟。
3.2 推导
假设程序在 N 个处理器上运行 1 个时间单位。
设:
f= 串行比例(按规模测量)
可并行部分随处理器数量扩展,因此其运行时间保持与 N 成比例。
一个处理器的时间:
加速比:
Gustafson 公式的 “N 减” 形式:
或者,如果定义并行比例
“N 减” 形式用 p 表示:
3.3 解释
随着 N 增加,加速比趋近于:
对于小串行比例,几乎呈线性增长。
3.4 Gustafson 定律的实际应用场景
Gustafson 适用于 吞吐量扩展 或可增加问题规模的工作负载:
- 天气和气候模拟
- 粒子模拟、CFD、有限元分析
- LLM 训练:更多 GPU → 更长序列或更大模型
- 大数据分析(Spark, Dask, Flink)
- 蒙特卡洛模拟
4. Amdahl 定律 vs Gustafson 定律(比较表)
| 项目 | Amdahl | Gustafson |
|---|---|---|
| 工作负载 | 固定 | 随 N 扩展 |
| 目标 | 降低延迟 | 增加吞吐量 |
| 加速比上限 | 有界: |
近似线性: |
| 悲观/乐观 | 悲观 | 乐观 |
| 应用场景 | 优化现有任务 | 扩展大规模工作量 |
5. 实际应用场景(综合视角)
Amdahl(延迟优化)
- 减少单次 LLM 查询推理时间
- 加速数据库 join 操作
- 固定张量 GPU 内核优化
- 视频编码(相同视频)
Gustafson(吞吐量 / 扩展)
- LLM 训练(扩展至更多 GPU)
- 高分辨率天气模型模拟
- 大数据 ETL 扩展
- 科学 HPC 工作负载
6. Python 绘图脚本(显示两条定律)
下面代码生成 Amdahl 与 Gustafson 加速比曲线图。
可以调整 f(串行比例)和处理器数量 N。
脚本绘制两条曲线在同一张图上。
包括部分
import numpy as np
import matplotlib.pyplot as plt
def amdahl_speedup(N, s):
return 1.0 / (s + (1 - s) / N)
def gustafson_speedup(N, s):
return s + (1 - s) * N
# Number of processors
N = np.arange(1, 65)
# Serial fractions to consider
Serial = [0.05, 0.1, 0.2, 0.3, 0.5, 0.8, 0.9, 1.0]
plt.figure(figsize=(10, 6))
for f in Serial:
plt.plot(N, amdahl_speedup(N, f), linestyle='-', label=f"Amdahl Serial={f}")
plt.plot(N, gustafson_speedup(N, f), linestyle='--', label=f"Gustafson Serial={f}")
plt.title("Amdahl's Law")
plt.xlabel("Number of Processors (N)")
plt.ylabel("Speedup")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.savefig("parallel-speedup-amdahl-vs-gustafson.png")
## plt.show()
下面是 Amdahl 与 Gustafson 曲线图示。
图示解读
- Amdahl 曲线迅速趋于平缓——受串行部分限制。
- Gustafson 曲线几乎线性上升——适用于可扩展工作负载。
- 串行比例
f越高,两种模型差距越大。
结论
Amdahl 定律展示了固定工作负载下的并行 上限,适合延迟优化。Gustafson 定律展示了随工作负载扩展的并行 潜力。
- Amdahl 定律 → 固定规模工作负载 → 收益递减
- Gustafson 定律 → 可扩展工作负载 → 近似线性加速
- 结合使用理解硬件极限与算法特性
- Python 工具使可视化直观易懂
它们共同构成现代并行系统性能分析基础,从 HPC 到 LLM 训练,再到 GPU 计算。
英文:The Truth About Parallel Speedup: Amdahl’s Limits vs Gustafson’s Scaling
强烈推荐
- 英国代购-畅购英伦
- TopCashBack 返现 (英国购物必备, 积少成多, 我2年来一共得了3000多英镑)
- Quidco 返现 (也是很不错的英国返现网站, 返现率高)
- 注册就送10美元, 免费使用2个月的 DigitalOcean 云主机(性价比超高, 每月只需5美元)
- 注册就送10美元, 免费使用4个月的 Vultr 云主机(性价比超高, 每月只需2.5美元)
- 注册就送10美元, 免费使用2个月的 阿里 云主机(性价比超高, 每月只需4.5美元)
- 注册就送20美元, 免费使用4个月的 Linode 云主机(性价比超高, 每月只需5美元) (折扣码: PodCastInit2022)
- PlusNet 英国光纤(超快, 超划算! 用户名 doctorlai)
- 刷了美国运通信用卡一年得到的积分 换了 485英镑
- 注册就送50英镑 – 英国最便宜最划算的电气提供商
- 能把比特币莱特币变现的银行卡! 不需要手续费就可以把虚拟货币法币兑换
微信公众号: 小赖子的英国生活和资讯 JustYYUK