小赖子的英国生活和资讯

为什么并行不是无限的: 简单解释 Amdahl vs Gustafson

阅读 桌面完整版

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 模拟。

为了分析程序在更多处理器下能加速多少,主要有两种数学模型:

这两条定律并不矛盾,它们回答的是 不同的问题
本教程涵盖推导、直觉、比较、实际应用场景,以及展示两条定律的 Python 绘图脚本。

1. 什么是加速比?

加速比衡量程序在 N 个处理器上运行速度提升多少:

如果程序在一个处理器上运行 10 秒,两处理器运行 5 秒,则加速比为:

完美线性加速为:

但实际系统存在串行瓶颈,这正是 Amdahl 定律和 Gustafson 定律描述的内容。

2. Amdahl 定律(固定工作量)

2.1 直觉

Amdahl 假设:

设:

2.2 推导

一个处理器的运行时间:

定义:

因此:


N 个处理器的运行时间:

加速比:

其中 f 是串行工作比例, 是可并行工作。Amdahl 公式也可以写成:

其中

2.3 当 N → ∞ 时的极限

如果串行比例为 10%(f = 0.1):

即使处理器无限,也无法超过该值。

2.4 Amdahl 定律的实际应用场景

Amdahl 适合优化固定任务的 延迟


3. Gustafson 定律(可扩展工作量)

3.1 直觉

Gustafson 反过来问:

“增加处理器,我能在相同时间内解决多大的问题?”

这反映了真实 HPC 工作负载:更多 CPU → 更高分辨率 → 更大模拟。

3.2 推导

假设程序在 N 个处理器上运行 1 个时间单位。

设:

可并行部分随处理器数量扩展,因此其运行时间保持与 N 成比例。

一个处理器的时间:

加速比:

Gustafson 公式的 “N 减” 形式:

或者,如果定义并行比例 ,公式也可写为:

“N 减” 形式用 p 表示:

3.3 解释

随着 N 增加,加速比趋近于:

对于小串行比例,几乎呈线性增长。

3.4 Gustafson 定律的实际应用场景

Gustafson 适用于 吞吐量扩展 或可增加问题规模的工作负载:


4. Amdahl 定律 vs Gustafson 定律(比较表)

项目 Amdahl Gustafson
工作负载 固定 随 N 扩展
目标 降低延迟 增加吞吐量
加速比上限 有界: 近似线性:
悲观/乐观 悲观 乐观
应用场景 优化现有任务 扩展大规模工作量

5. 实际应用场景(综合视角)

Amdahl(延迟优化)

Gustafson(吞吐量 / 扩展)

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 定律加速曲线

Amdahl vs Gustafson 加速曲线

Gustafson 定律加速曲线

图示解读

结论

Amdahl 定律展示了固定工作负载下的并行 上限,适合延迟优化。Gustafson 定律展示了随工作负载扩展的并行 潜力

它们共同构成现代并行系统性能分析基础,从 HPC 到 LLM 训练,再到 GPU 计算。

英文:The Truth About Parallel Speedup: Amdahl’s Limits vs Gustafson’s Scaling

强烈推荐

微信公众号: 小赖子的英国生活和资讯 JustYYUK

阅读 桌面完整版
Exit mobile version