透過 MCP 連接 →

輸入計算

數學公式

廣告

結果

整體加速比
4.706×
倍於序列版本的速度
理論最大加速比(s → ∞) 10×
平行效率 58.82%

什麼是阿姆達爾定律?

阿姆達爾定律(Amdahl's Law)由電腦架構先驅 Gene Amdahl 於 1967 年提出,用來預測「當一項工作只有部分能夠平行化時」,理論上所能達到的最大加速比。它是平行運算領域的基石之一,能協助工程師判斷:增加更多處理器、核心或執行緒,究竟值不值得。其核心觀念在於——程式中無法平行化的「序列(serial)部分」,最終會限制整體執行速度,無論你在平行部分投入多少運算資源都一樣。

平行化前後程式串列與平行部分的長條圖
阿姆達爾定律將執行時間分為固定的串列部分(\(1 - p\))和隨處理器增多而縮小的平行部分 \(p\)。

如何使用本計算機

請輸入兩個數值:程式的平行化比例(以百分比表示,也就是可被拆分到多顆處理器上執行的工作占比),以及平行部分的加速倍率(通常就是執行該部分的處理器或核心數量)。計算機會回傳整體加速比、當平行加速趨近無限大時的理論最大加速比,以及平行效率。

公式說明

計算式為 $$\text{Speedup} = \dfrac{1}{(1 - p) + \dfrac{p}{s}}$$ 其中 \(p\) 是平行化比例(介於 0 與 1 之間),\(s\) 則是套用在該平行部分的加速倍率。式中的 \((1 - p)\) 代表無法被加速的序列部分。當 \(s\) 趨近無限大時,加速比會收斂至 \(\dfrac{1}{1-p}\),這正是序列部分所設下的硬性上限。

不同平行比例下,加速曲線隨處理器數量增加而趨平
隨著處理器增加,加速比趨於平緩——串列比例限制了最大效益。

實例演練

假設某程式有 90% 可以平行化(\(p = 0.9\)),並在 8 顆處理器上執行(\(s = 8\))。此時分母為 $$(1 - 0.9) + \frac{0.9}{8} = 0.1 + 0.1125 = 0.2125$$ 得到加速比約為 \(\dfrac{1}{0.2125} \approx 4.71\) 倍。即使動用無限多顆處理器,最大加速比也僅有 \(\dfrac{1}{0.1} = 10\) 倍——這充分說明了那 10% 的序列部分如何箝制整體效能。

解讀您的結果

加速倍數告訴您,與在單一處理器上運行相比,該程式在 \(s\) 個處理器上運行的速度快多少倍。4× 的加速倍數意味著並行化工作負載在原始時間的四分之一內完成。由於 Amdahl 定律假設固定的問題大小,加速倍數受到無法加速的串行分數 \(1-p\) 的限制。

無限處理器上界 \(1/(1-p)\) 是用無限硬體可達到的最大加速倍數。例如,如果 95% 的工作是可並行的,上界是 \(1/(1-0.95) = 20\times\);即使有一百萬個核心也無法超過 20×。這是規劃中最重要的單一數字:它設定了對額外處理器的任何投資的上限。

並行效率衡量處理器的利用率,定義為加速倍數除以處理器數量,\(\text{efficiency} = \text{Speedup}/s\)。效率為 1.0(100%)是完美的線性擴展;實際上隨著您添加核心,它會下降。例如,90% 可並行代碼在 8 個核心上給出 4.71× 的加速倍數,因此效率是 \(4.71/8 \approx 59\%\) — 每個添加的核心做的有用工作逐漸減少。

當每個額外核心的邊際加速倍數相對於其成本變得很小,以及效率下降到可接受的閾值以下(實際上通常為 50–70%)時,添加處理器就不再值得。一旦加速倍數接近其上界,進一步的硬體幾乎不會產生任何效果。要提高上界本身,您必須減少串行分數 — 通過並行化演算法的更多部分或減少同步和 I/O — 而不是購買更多核心。另請注意,Amdahl 定律忽略了通信和協調開銷,因此實際加速倍數通常低於這些理論最大值。

常見問題

為什麼處理器數量加倍,速度卻沒跟著加倍?因為序列部分不管處理器有多少顆,執行速度都不變,於是它所花的時間就成了最主要的瓶頸。

什麼是平行效率?就是加速比除以處理器數量,再以百分比表示——它衡量你對新增運算資源的利用程度有多好。

它和古斯塔夫森定律(Gustafson's Law)有什麼不同?古斯塔夫森定律假設問題規模會隨處理器數量一起增長,因此通常比採用「固定工作量」模型的阿姆達爾定律更為樂觀。

最後更新: