Amdahl法則考慮的只是物理內(nèi)核數(shù)目的變化,并未考慮可以在既有應(yīng)用程序中添加新功能以充分利用增加的并行處理能力。例如,可以創(chuàng)建一個能夠充分利用剩余內(nèi)核的新算法,同時(shí)并行運(yùn)行另一個超過3個內(nèi)核就不能獲得很大性能提升的算法。您可以創(chuàng)建出考慮了不同并行化場景的設(shè)計(jì),通過這種方式降低Amdahl法則的影響。隨著硬件提供越來越多的能力,應(yīng)用程序也應(yīng)該隨之演進(jìn)。
1.4 考慮Gustafson法則
John Gustafson注意到,Amdahl法則考慮了運(yùn)行算法的硬件的變化,但是將算法看作是固定的。因此,在1988年,他提出重新審視這個法則。他認(rèn)為在測量加速比的時(shí)候應(yīng)該讓問題的規(guī)模也隨著處理器數(shù)目的變化而變化,而不是固定問題的大小。當(dāng)硬件提供的并行處理能力得以提升時(shí),要解決的工作負(fù)載也應(yīng)該隨之?dāng)U展。
Gustafson法則提供了以下公式,這個公式通過問題的大小來測量在固定時(shí)間內(nèi)可以執(zhí)行的工作量:
總工作量(單元數(shù)) = S + (N × P)
其中:
● S表示一次順序執(zhí)行完成的工作單元數(shù)。
● P表示每一部分能夠完全并行執(zhí)行的工作單元數(shù)。
● N表示可用的執(zhí)行單元數(shù)(處理器數(shù)或物理內(nèi)核數(shù))。
考慮一個問題,這個問題由50個單元的順序執(zhí)行的工作組成。這個問題還能夠在每一個可用的內(nèi)核上調(diào)度50個單元的并行工作量。如果有一個具有兩個物理內(nèi)核的微處理器,那么總工作量是150個單元。
總工作量(單元數(shù)) = 50 + (2 × 50) = 150 單元的工作量
圖1-11展示了一個算法,這個算法帶有50個單元的順序執(zhí)行的工作和一個并行化的部分。并行化部分可以根據(jù)物理內(nèi)核的數(shù)目而擴(kuò)展。通過這種方式,并行化部分可以處理50個單元可擴(kuò)展可并行化的工作??捎脙?nèi)核越多,并行化部分的工作負(fù)載也越高。如果在并行化部分中有足夠多的工作需要完成,那么這個算法就可以在更短時(shí)間內(nèi)處理更多數(shù)據(jù)。同樣的算法可以在具有8個物理內(nèi)核的微處理器上運(yùn)行。這種情況下,在前面示例中的同樣時(shí)間內(nèi),這個算法能夠處理450個單元的工作量。
總工作量(單元數(shù)) = 50 + (8 × 50) = 450 單元的工作量