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 是串行工作比例,
是可并行工作。Amdahl 公式也可以写成:

其中
,
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
本文一共 1384 个汉字, 你数一下对不对.上一篇: CloudFlare宕机, 半个互联网崩了
下一篇: 在罗马的最后一晚吃了顿中餐, 好便宜




