Skip to content
← 集群与云计算

/knowledge/notes/amdahl-vs-gustafson

概念笔记 · 集群与云计算

阿姆达尔与古斯塔夫森定律

两个定律以不同方式解释并行加速。Amdahl 假设问题大小固定并达到极限;Gustafson 假设问题大小增长并线性扩展。这篇笔记解释什么时候应用每一个。

学于
集群与云计算COMP90024
时间
2023 年第一学期
应用于
Spartan 推文处理器
阅读 / 复习
约 4 分钟阅读2026-10-15

两个公式描述了当你给并行程序增加处理器时的速度提升。它们对程序增长做出不同的假设,因此给出不同的极限。这篇笔记解释何时使用每一个,以及为什么这些假设很重要。

01

基本想法

每个程序的一部分以串行方式运行,一部分可以并行运行。串行部分是一个瓶颈:无论增加多少处理器,该串行部分总是花费相同的时间。如果代码的 10% 是串行的,无论有多少个核心,速度永远不会超过 10 倍。这是 Amdahl 定律背后的见解。

但实际程序随着增加核心时不会保持相同的规模。如果购买有 100 个核心而不是 10 个的机器,可能要解决更大的问题。现在有了容量,可能会并行化更多的部分。Gustafson 定律问的是:用更多核心在相同时间内能做多少工作?答案取决于如何扩展问题。

02

数学

设 pp 是程序的串行部分比例,则 1−p1-p 是并行部分。在 PP 个处理器上:

Sp=1(1−p)+p/PS_p = \frac{1}{(1 - p) + p/P}

这是 Amdahl 定律。随着 PP 增长,加速比趋近于 1/p1/p。如果 10% 是串行的,加速比上限为 10 倍。如果 1% 是串行的,上限是 100 倍。

Gustafson 定律说的是:假设在单处理器上,串行代码花费比例 pp 的时间,并行代码花费比例 1−p1-p 的时间。如果现在有 PP 个处理器并运行相同的串行代码,在相同时间内还能做多少额外的并行工作?

Sp=P−p(P−1)S_p = P - p(P - 1)

这与 PP 线性扩展。获得 P−p(P−1)P - p(P-1) 倍加速比,远好于 Amdahl 的固定上限。串行部分花费成本相同,但并行部分扩展到填满额外的核心。

03

动手试

下面的工具展示两个定律。移动滑块,看两条曲线如何分化。Amdahl 达到极限;Gustafson 继续增长。两者之间的选择是关于你在问什么问题。

Amdahl
6.40x
Gustafson
14.50x
Amdahl: 1 / (0.100 + 0.0563)
Gustafson: 16 - 1.500
在 16 个核心,{serialFraction} 串行情况下,Amdahl: 6.40x,Gustafson: 14.50x
合成数据模拟,带随机种子,同样的设置每次结果都一样。可调整核心数和串行比例的滑块。
  • 保持串行比例为 10%。即使有 1,000 个核心,Amdahl 也上限于 10 倍。Gustafson 继续增长。
  • 将串行比例降至 1%。Amdahl 现在上限为 100 倍。Gustafson 仍然线性扩展。
  • 交叉点在小 PP 处。对于 4-8 个核心,两个定律给出相似的加速比。在 1,000 个核心处,它们相差数个数量级。

04

我在哪用到它

05

容易出错的地方

06

参考资料

  • Amdahl 定律维基百科加速比极限的清晰推导及其对并行计算含义的讨论。
  • Gustafson 定律维基百科Gustafson 对 Amdahl 的 1988 年反驳,展示了当问题大小随处理器数量增长时缩放加速比的不同。