Amdahl法则考虑的只是物理内核数目的变化,并未考虑可以在既有应用程序中添加新功能以充分利用增加的并行处理能力。例如,可以创建一个能够充分利用剩余内核的新算法,同时并行运行另一个超过3个内核就不能获得很大性能提升的算法。您可以创建出考虑了不同并行化场景的设计,通过这种方式降低Amdahl法则的影响。随着硬件提供越来越多的能力,应用程序也应该随之演进。
1.4 考虑Gustafson法则
John Gustafson注意到,Amdahl法则考虑了运行算法的硬件的变化,但是将算法看作是固定的。因此,在1988年,他提出重新审视这个法则。他认为在测量加速比的时候应该让问题的规模也随着处理器数目的变化而变化,而不是固定问题的大小。当硬件提供的并行处理能力得以提升时,要解决的工作负载也应该随之扩展。
Gustafson法则提供了以下公式,这个公式通过问题的大小来测量在固定时间内可以执行的工作量:
总工作量(单元数) = S + (N × P)
其中:
● S表示一次顺序执行完成的工作单元数。
● P表示每一部分能够完全并行执行的工作单元数。
● N表示可用的执行单元数(处理器数或物理内核数)。
考虑一个问题,这个问题由50个单元的顺序执行的工作组成。这个问题还能够在每一个可用的内核上调度50个单元的并行工作量。如果有一个具有两个物理内核的微处理器,那么总工作量是150个单元。
总工作量(单元数) = 50 + (2 × 50) = 150 单元的工作量
图1-11展示了一个算法,这个算法带有50个单元的顺序执行的工作和一个并行化的部分。并行化部分可以根据物理内核的数目而扩展。通过这种方式,并行化部分可以处理50个单元可扩展可并行化的工作。可用内核越多,并行化部分的工作负载也越高。如果在并行化部分中有足够多的工作需要完成,那么这个算法就可以在更短时间内处理更多数据。同样的算法可以在具有8个物理内核的微处理器上运行。这种情况下,在前面示例中的同样时间内,这个算法能够处理450个单元的工作量。
总工作量(单元数) = 50 + (8 × 50) = 450 单元的工作量