並行瓶頸計算之阿姆達爾定律(Amdahl's Law) & Gustafson's Law

一、概述

1. Amdahl's Law

     阿姆達爾定律是一個計算機科學界的經驗法則,因IBM公司計算機架構師吉恩·阿姆達爾而得名。吉恩·阿姆達爾在1967年發表的論文中提出了這個重要定律。
     阿姆達爾定律主要用於發現僅僅系統的部分得到改進,整體系統可以得到的最大期望改進。它經常用於並行計算領域,用來預測適用多個處理器時理論上的最大加速比。在我們的性能調優領域,我們利用此定律有助於我們解決或者緩解性能瓶頸問題。
     阿姆達爾定律的模型闡釋了我們現實生產中串行資源爭用時候的現象。如下圖模型,一個系統中,不可避免有一些資源必須串行訪問,這限制了我們的加速比,即使我們增加了併發數(橫軸),但取得效果並不理想,難以獲得線性擴展能力(圖中直線)。

2. Gustafson's Law

     Gustafson定律(Gustafson’s law)闡述了數據並行帶來的影響。Gustafson 定律是由 John L. Gustafson 在1988年提出的。是並行計算領域除了 Amdahl 定律之後又一個重要定律。Gustafson定律看待加速比的角度會有所不同,其站在對於大量數據流處理過程中,針對重複工作的分佈式運算帶來的加速特性,而不僅僅侷限在一個單一的程序進程&單一的計算機上,串行的部分主要在於數據的分配預處理以及計算結果的收集彙總處理上。

二、基本理論

1. Amdahl's Law

     以下介紹中、系統、算法、程序可以認爲都是優化的對象,我不加以區分,它們都有串行的部分和可以並行的部分。
     在並行計算中,使用多個處理器的程序的加速比受限制於程序串行部分的執行時間。例如,如果一個程序使用一個CPU核執行需要20小時,其中部分代碼只能串行,需要執行1個小時,其他19小時的代碼執行可以並行,那麼,不考慮有多少CPU可用來並行執行程序,最小執行時間不會小於1小時(串行工作的部分),因此加速比被限制爲最多20倍(20/1),加速比越高,證明優化效果越明顯。

阿姆達爾定律可以用如下公式表示:

\[s(n) = \frac{1}{B+(1-B)/n}\tag{1.1} \]

公式中組成:

  • \(s(n):\) 固定負載下,理論上的加速比
  • \(B:\) 串行工作部分所佔比例,取值0~1
  • \(n:\) 並行線程數、並行處理節點個數

加速比=沒有改進前的算法耗時/改進後的算法耗時
     如果我們假定算法沒有改進之前,執行總時間是1(假定爲1個單元)。那麼改進後的算法,其時間應該是串行工作部分的耗時(B)加上並行部分的耗時(1-B)/n,由於並行部分可以在多個cpu核上執行,所以並行部分實際的執行時間是(1-B)/n

     根據這個公式,如果並行線程數(我們可以理解爲CPU處理器數量)趨於無窮,那麼加速比與系統的串行工作部分的比例成反比,如果系統中有50%的代碼串行執行,那麼系統的最大加速比爲2。也就是說,爲了提高系統的速度,僅增加CPU處理器的數量不一定能起到有效的作用,需要提高系統內可並行化的模塊比重,在此基礎上合理增加並行處理器數量,才能以最小的投入得到最大的加速比。

     對阿姆達爾定律做進一步說明。阿姆達爾這個模型 定義了固定負載下,某個算法的並行實現相對串行實現的加速比。例如,某個算法有12%的操作是可以並行執行的,而剩下的88%的操作不能並行,那麼阿姆達爾定律聲明,最大加速比是1/(1-0.12)=1.136。如上公式n趨向於無窮大,那麼加速比S=1/B=1/(1-0.12)。
Example
     例如,對於某個算法,可以並行的比例是P,這部分並行的代碼能夠加速s倍(s可以理解是CPU核的個數,即新代碼的執行時間爲原來執行時間的1/s)。此算法30%的代碼可以被並行加速,那麼P等於0.3,這部分代碼可以被加速2倍,s等於2。那麼,使用阿姆達爾定律計算其整個算法的加速比:

\[accRate(s) = \frac{1}{1-P+P/s} = \frac{1}{1-0.3+0.3/2} = 1.17647 \tag{2.1.1} \]

     再例如,某項任務,我們可以分解爲4個步驟,P1,P2,P3,P4,執行耗時佔總耗時百分比分別是11%,18%,23%,48%。我們對它進行優化,P1不能優化,P2可以加速5倍,P3可以加速20倍,P4可以加速1.6倍。那麼改進後的執行時間是:

\[accRate(s) = \frac{1}{P_{1}+P_{2}/5+P_{3}/20+P_{4}/1.6} = 2.186 \tag{2.1.2} \]

總的加速比是 \(1/0.4575 = 2.186\),我們可以看到,雖然有些部分加速比有20倍,5倍,但總的加速比並不高,略大於2,因爲佔時間比例最大的P4部分僅僅加速了1.6倍。
     對於如下的圖,我們可以觀察到,加速比受限制於串行工作部分的比例,當95%的代碼都可以進行並行優化時,理論的最大大加速比會更高,但最高不會超過20倍。(不同曲線代表不同的並行佔比)

     阿姆達爾定律也用於指導CPU的可擴展設計,CPU的發展有兩個方向,更快的CPU或者更多的核。目前看來發展的重心偏向了CPU的核數,隨着技術的不斷髮展,CPU的核數不斷增加,目前我們的數據庫服務器四核、六核已經比較常見,但有時我們會發現雖然擁有更多的核,當我們同時運行幾個程序時,只有少數幾個線程處於工作中,其它的並未做什麼工作,實踐當中,並行運行多個線程往往並不能顯著提升性能,程序往往並不能有效的利用多核。在多核處理器中加速比是衡量並行程序性能的一個重要參數,能否有效降低串行計算部分的比例和降低交互開銷決定了能否充分發揮多核的性能,其中的關鍵在於:合理劃分任務、減少核間通信。
     以計算機架構師吉恩·阿姆達爾的名字命名的定律,用於尋找僅對系統的一部分進行改進時整個系統預期得到的最大改進。換言之,該定律要討論的是爲什麼增加某些東西並不總能帶來能力的翻番。該定律可應用在計算機行業,比如研究CPU的核數與性能的關係;在高性能計算領域,該定律可以解釋爲什麼增加節點並不能帶來性能的線性改善。

2. Gustafson's Law

     Amdahl 定律有一個重要前提,就是處理的數據集大小是固定的,但是這在大數據計算的領域裏,這個假設並不經常能達到,因爲人們總是會爲了在短時間內處理更多的數據,而爲了達到目的,往往會在計算集羣增加更多的處理器。
     Gustafson 定律的提出,始於 Gustafson 實驗室的一個實驗,在一個擁有1024個處理器的計算機,觀察到了超線性加速比,分別獲得了1021x/1020x/1016x的加速比,如果按照 Amdahl定律,1024核並不會得到1000x以上的加速。
1021 for beam stress analysis using conjugate gradients, 1020 for baffled surface wave simulation using explicit finite differences, and 1016 for unstable fluid flow using flux-corrected transport.

1021 for beam stress analysis using conjugate gradients,
1020 for baffled surface wave simulation using explicit finite differences,
and 1016 for unstable fluid flow using flux-corrected transport.

任務加速計算分析圖如下

從上圖中可知: 未加速前的時間 \(Time=s'+Np'\),加速後的時間爲 \(Time=s'+p'\),因此可計算得到其加速比例如下

\[accRate(N) = \frac{s'+Np'}{s'+p1} = \frac{s'+Np'}{1} = s'+Np' \tag{2.2.1} \]

三、實際測試

Cuda加速圖像處理

  1. 環境準備
  2. 基本代碼編寫
  3. 串並加速比例分析
  4. 加速比理論計算
  5. 實際時間測試驗證
  6. 結論

Reference

Reference1: Reevaluating Amdahl's Law &&&& Reevaluating Amdahl's Law.PDF
Reference2: 阿姆達爾定律

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章