Gustafson定律与Amdahl定律相反,Amdahl定律认为,大多数并行处理应用程序在增加对并行处理的访问时实际上会增加工作负载。因此,Amdahl定律假设恒定的工作负载来衡量加速,对于确定并行处理的好处是一个糟糕的方法。
然而,我对Gustafson到底想要论证什么感到困惑。
例如,假设我将Gustafson定律应用于一个顺序处理器和两个并行处理器:
我生成一个在并行处理器#1上运行的工作负载。在并行处理器上执行需要1秒,在顺序处理器上执行需要10秒。
我生成一个更大的工作负载,并在并行处理器#2上运行它。在并行处理器上执行需要1秒,在顺序处理器上执行需要50秒。
对于每个工作负载,相对于顺序处理器都有一个加速。然而,这似乎并没有违反Amdahl定律,因为每个工作负载仍然有一些最高的加速限制。所有这些所做的就是改变工作负载,这样"串行"就只能"串行"了。部分代码可能会减少。根据Amdahl定律,减少串行部分将提高加速极限。
所以我很困惑,提倡增加工作量和保持恒定执行时间的Gustafson定律似乎没有增加任何新的信息。
Gustafson到底在争论什么?具体来说,"缩放速度"是什么?甚至意味着什么?
Gustafson定律与Amdahl定律相反,Amdahl定律认为大多数并行处理应用程序在增加对并行处理的访问时实际上增加了工作负载。因此,Amdahl定律假设恒定的工作负载来衡量加速,对于确定并行处理的好处是一个糟糕的方法。
号
首先,这两个定律并没有要求任何东西。它们显示基于特定配置的应用程序可以获得的理论(最大)加速。这两个基本的数学公式模拟了并行算法的行为。他们的目标是了解并行计算的一些限制(Amdahl定律)以及开发人员可以做些什么来克服它们(Gustafson定律)。
Amdahl定律是一个数学公式,描述了一个应用程序在可变时间给定的工作负载(但计算量是固定的)下由几个处理单元计算的理论加速。工作负载包含一个串行执行部分和一个并行执行部分。结果表明,加速速度受程序串行部分的限制。这对于并行应用程序的开发人员来说不是很好,因为这意味着他们的应用程序的可伸缩性对于一些相当顺序的工作负载将非常糟糕,假设工作负载是固定的。
Gustafson定律打破了这个假设,并添加了一个新的假设来从不同的角度看待问题。实际上,该数学公式描述了由多个处理单元计算的具有固定时间工作负载(但计算量是可变的)的应用程序的理论加速。它表明,只要应用程序开发人员可以在给定的工作负载中添加更多的并行工作,加速就可以是好的。
我生成一个在并行处理器#1上运行的工作负载。在并行处理器上执行需要1秒,在顺序处理器上执行需要10秒。我生成了一个更大的工作负载,并在并行处理器#2上运行它。在并行处理器上执行需要1秒,在顺序处理器上执行需要50秒。
使用两个处理单元的并行程序不会比使用这两种模型的一个处理单元快2倍以上。由于一些混淆因素(通常是由于缓存影响),这在实践中是可能的,但这种影响并不仅仅来自处理单元。你所说的"两个并行处理器"是什么意思?在您的示例中缺少处理单元的数量(除非您想从提供的信息中找到它)。
所以我很困惑,提倡增加工作量和保持恒定执行时间的Gustafson定律似乎没有添加任何新信息。
这两条定律就像是同一个可伸缩性问题的两个观点。然而,他们做了不同的假设:固定工作量和可变工作时间VS可变工作量和固定工作时间。
如果你熟悉强/弱标度的概念,请注意阿姆达尔定律之于强标度就像古斯塔夫森定律之于弱标度。