什么是阿姆达尔定律?
阿姆达尔定律(Amdahl's Law)由计算机体系结构专家吉恩·阿姆达尔(Gene Amdahl)于 1967 年提出,用于预测当任务中只有一部分能够并行化时,所能获得的理论最大加速比。它是并行计算领域的奠基性原理,能够帮助工程师在投入更多处理器、核心或线程之前,对性能提升设定合理的预期。
如何使用这个计算器
你需要填写两个数值:并行比例(p)——即程序中可以并行执行的部分占比(取值在 0 到 1 之间);以及加速因子(s)——通常是用于处理并行部分的处理器或核心数量。计算器会输出整体加速比、理论最大加速比以及并行效率。
公式详解
计算公式为 $$\text{加速比} = \dfrac{1}{(1 - p) + \dfrac{p}{s}}$$ 其中 \((1 - p)\) 表示无法被加速的串行部分。当 \(s\) 不断增大时,\(p/s\) 趋近于零,因此加速比的上限被限制在 \(\dfrac{1}{1 - p}\)。这正是为什么一个并行度为 90% 的程序,无论增加多少处理器,运行速度也永远无法超过原来的 10 倍。
实例演算
假设某程序有 90% 可以并行化(\(p = 0.9\)),并使用 4 个处理器(\(s = 4\))。那么分母 \(= (1 - 0.9) + 0.9/4 = 0.1 + 0.225 = 0.325\)。$$\text{加速比} = \frac{1}{0.325} \approx 3.08 \text{ 倍}$$ 理论最大加速比为 \(\dfrac{1}{0.1} = 10\) 倍,并行效率为 \(3.08 / 4 \approx 76.9\%\)。
解释您的结果
整体加速比是您输入的处理器数量 \(s\) 实际获得的结果 — 例如,结果为 4.71× 表示并行化程序的运行速度比单处理器版本快约 4.71 倍。最大加速比\(1/(1-p)\) 是使用无限多个处理器时会接近的绝对上限。两者之间的差距告诉您还有多少上升空间:如果您的整体加速比已经接近最大值,增加硬件将几乎无法帮助。
效率回答"我对购买的处理器的利用效率有多高?"接近 100% 的效率意味着每个处理器都贡献了近一个单位的加速比 — 这是资源的优秀利用。低效率(比如低于 30%)意味着大多数处理器处于闲置或等待串行部分,因此您为几乎没有产生有用工作的硬件付款。
串行分数 \(1-p\) 是决定性的限制。即使很小的串行分数也会严格限制性能:在 \(p=0.95\) 时上限只有 20×,所以超过大约 16–32 个处理器后,每个新处理器的贡献几乎为零。一个实用的经验法则是,一旦效率降到您可接受的阈值以下(通常对成本敏感的工作为 50–70%),就停止添加处理器,因为从那时起您花钱获得的收益正在消失。要提高上限,您必须降低串行分数本身 — 增加 \(p\) 的算法改进通常比简单地添加内核获得的收益要高得多。
关键术语和变量
- 并行分数 (\(p\)) — 程序中可以并行执行的工作比例,表示为 0 到 1 之间的小数。值为 0.9 表示 90% 的工作负载可以跨处理器分配。
- 串行分数 (\(1-p\)) — 必须在单个处理器上按顺序运行、无法通过并行化加速的部分。这个分数设置了整体加速比的硬上限。
- 并行部分的加速比 (\(s\)) — 可并行部分加速的倍数,通常等于应用于它的处理器或内核数。
- 整体加速比 — 单处理器执行时间与并行执行时间的比率,\(1/\big((1-p)+p/s\big)\)。这是真实的性能提升。
- 最大加速比 — 当 \(s\) 趋于无穷大时达到的理论极限 \(1/(1-p)\),仅由串行分数决定。
- 并行效率 — 整体加速比除以处理器数量,\(\text{加速比}/s\),以百分比表示;它衡量每个处理器的利用效率。
常见问题
为什么增加处理器会出现收益递减? 因为串行部分会成为瓶颈。一旦它在整体耗时中占据主导,再增加处理器也几乎无济于事。
什么是并行效率? 它等于加速比除以处理器数量,以百分比表示,反映每个处理器被利用的实际效率。
它与古斯塔夫森定律有什么区别? 阿姆达尔定律假设问题规模固定不变;而古斯塔夫森定律(Gustafson's Law)假设问题规模会随处理器数量同步扩大,因此得出的结论更为乐观。