> ## Documentation Index
> Fetch the complete documentation index at: https://meta.niceshare.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 阿姆達爾定律

> 阿姆達爾定律指出：固定工作量下，整體加速受不可並行部分限制。了解其起源、公式直覺、應用方法與古斯塔夫森擴展。

<Info>
  **類別**: 定律<br />
  **類型**: 並行計算與系統擴展定律<br />
  **來源**: Gene Amdahl，AFIPS 春季聯合計算機會議（1967）<br />
  **別名**: 阿姆達爾界限；固定規模加速上限；強擴展天花板
</Info>

<Note>
  **快速回答** — **阿姆達爾定律**（Amdahl's Law）指出：並行資源能帶來的加速，會被必須串行執行的那部分工作卡住。若固定任務有 5% 必須串行，即便處理器無窮多，整體加速也超不過 20 倍。實務上應先壓縮串行瓶頸，再買更多並行。
</Note>

## 什麼是阿姆達爾定律？

**阿姆達爾定律**（Amdahl's Law）是一條規則：在問題規模固定時，系統整體加速受不可並行工作占比的限制。

> 若不同時把順序處理速率提升到幾乎同等量級，為追求極高並行處理速率所付出的努力就會被浪費。

Gene Amdahl 1967 年的論證很直接：真實負載常有不規則性與協調開銷，串行殘餘最終會主導耗時。現代公式裡，若固定任務中比例 *p* 可在 *N* 個處理器上並行（*1 − p* 仍串行），當 *N* 增大時加速趨近 *1 / (1 − p)*，而不是 *N*。

### 阿姆達爾定律的三層理解

* **入門**：只加速任務的一部分，無法讓整個任務無限變快。
* **實踐**：先測量串行占比；優化那條路徑，再加核、加工人或加伺服器。
* **進階**：把阿姆達爾當作固定工作量的強擴展上界；當使用者隨容量放大問題時，改用古斯塔夫森式弱擴展視角。

## 起源

計算機體系結構師 **Gene Amdahl**（當時在 IBM）於 1967 年 AFIPS 春季聯合計算機會議上發表《Validity of the single processor approach to achieving large scale computing capabilities》。短文沒有後來那條著名方程，但論證了多處理器機器在不規則真實問題上難以兌現峰值性能，因為順序工作與協調開銷仍在。

後世教學把它提煉為熟悉的界限：固定問題規模下，加速 *S(N) = 1 / ((1 − p) + p/N)*。課堂數字讓天花板一目了然——若 *p* = 0.95，無窮 *N* 的極限是 20 倍；64 個處理器時大約只有 15 倍，而不是 64 倍。

1988 年，John Gustafson（在 Sandia 國家實驗室的工作）在《Reevaluating Amdahl's Law》中重框問題：科學家常隨機器規模放大問題，並大致保持執行時間不變。在 1024 處理器系統上，Sandia 報告三個應用的規模化加速約在 1020–1022——當並行工作隨 *N* 增長時接近線性。這並不否定固定任務下的阿姆達爾；它把問題從「同樣工作、更少時間」換成「更多工作、相近時間」。

## 核心要點

阿姆達爾定律是預算工具：告訴你加速能從哪裡來、不能從哪裡來。

<Steps>
  <Step title="串行工作設定天花板">
    任何必須一次只做一件的事——初始化、加鎖、最終彙總、人工審批——都會限制總改進。無窮並行也抹不掉那部分占比。
  </Step>

  <Step title="額外處理器呈現收益遞減">
    每多一核只幫助可並行切片。*N* 上升時，收益向 *1/(1 − p)* 收縮，這是固定負載下的一種[收益遞減](/zh-hant/laws/diminishing-returns)。
  </Step>

  <Step title="擴展前先修瓶頸">
    若單執行緒路徑或共享鎖仍占執行時間的 10–20%，再買機器是浪費。先剖析，再並行。
  </Step>

  <Step title="分清你在問哪種擴展問題">
    固定規模加速（強擴展）是阿姆達爾的地盤。隨容量放大問題（弱擴展）需要另一套記分卡——往往更接近古斯塔夫森的規模化加速視角。
  </Step>
</Steps>

## 應用場景

每當有人提議「再加一點並行」卻不點名串行占比時，就用這條定律。

<CardGroup cols={2}>
  <Card title="軟體性能">
    給熱點路徑加多執行緒前，先估計牆鐘時間裡仍被單執行緒 I/O、GC 停頓或鎖競爭占用的份額。
  </Card>

  <Card title="雲與容量規劃">
    建模請求流水線：若鑑權或共享資料庫寫是串行的，水平擴容會在該階段被重新設計前觸頂。
  </Card>

  <Card title="團隊與流程設計">
    把單一審批人或單一整合門禁當作串行占比；別處加人無法把端到端週期壓過該上限（[布魯克斯定律](/zh-hant/laws/brookss-law)是協調成本上的近親）。
  </Card>

  <Card title="學習與個人工作流">
    可以並行閱讀資料，但保留串行的「決定並動筆」塊；再多分頁也打不破卡住的決策步驟。
  </Card>
</CardGroup>

## 經典案例

阿姆達爾的固定規模數學與 Gustafson 的 Sandia 結果一起說明定律何時咬人。假設批處理任務有 95% 可並行。阿姆達爾定律說：即便處理器無窮多，同一任務加速也超不過 20 倍；64 個處理器時預測加速約 15.4 倍。這是強擴展故事：同樣工作、希望更少時間，串行殘餘勝出。

1988 年，Gustafson 與同事在 Sandia 的 1024 處理器超立方體上報告了三個科學應用（含梁應力分析與流體類負載）的結果。他們測得規模化加速大約為 1021、1020 與 1022——接近處理器數——因為研究者放大了問題（例如更細網格），使並行工作隨機器增長，而串行開銷相對較小。教訓很具體：阿姆達爾定律正確封頂固定規模加速；若把它當成禁止大規模並行科學計算的禁令，就是誤用。選擇與目標匹配的指標——更快做完同一件事，還是用相近時間做更大的事。

## 邊界與失效場景

阿姆達爾定律假設問題固定，並把工作理想地分成串行與完美並行兩部分。真實系統還有通訊、負載不均與記憶體頻寬限制，實際加速可能比公式更差。

當負載能隨容量有用地增長——影像解析度、模擬精度或批處理量——用它當駁斥工具會失效。此時弱擴展仍可能帶來巨大價值，即便固定規模加速看起來一般。

常見誤用是引用無窮 *N* 天花板來拒絕任何並行投資，卻不測量 *p*。若串行占比是 0.5%，天花板是 200 倍；定律此時支持並行，而非反對。

## 常見誤區

正確使用需要區分公式、擴展目標與鄰近定律。

<AccordionGroup>
  <Accordion title="阿姆達爾定律意味著並行沒用">
    不對。它是指固定工作量下收益受串行占比限制。高 *p* 仍值得大量並行投入。
  </Accordion>

  <Accordion title="古斯塔夫森定律證明阿姆達爾錯了">
    不對。它們回答不同問題：固定問題規模 vs 放大問題規模。在各自領域都可以成立。
  </Accordion>

  <Accordion title="它只適用於 CPU 核">
    不對。任何有不可並行階段的系統——網路匯聚、單寫者儲存、人工審核——都服從同一天花板邏輯。
  </Accordion>
</AccordionGroup>

## 相關概念

這些頁面有助於把阿姆達爾定律放進硬體趨勢、團隊擴展與收益曲線之中。

<CardGroup cols={3}>
  <Card title="摩爾定律" href="/zh-hant/laws/moores-law">硬體密度趨勢提升容量；本身不會消除串行瓶頸。</Card>
  <Card title="布魯克斯定律" href="/zh-hant/laws/brookss-law">加人可能增加協調成本——交付上的另一種類串行拖累。</Card>
  <Card title="收益遞減" href="/zh-hant/laws/diminishing-returns">一旦約束因素主導，額外投入帶來的增益變小。</Card>
  <Card title="沃斯定律" href="/zh-hant/laws/wirths-law">軟體複雜度可能比晶片交付更快地花掉硬體紅利。</Card>
  <Card title="霍夫施塔特定律" href="/zh-hant/laws/hofstadters-law">複雜工作總比預期更久，即便你已預期如此。</Card>
  <Card title="梅特卡夫定律" href="/zh-hant/laws/metcalfes-law">網路價值隨連結擴展——當故事是增長而非串行占比時，可作對照。</Card>
</CardGroup>

## 一句話總結

<Tip>
  在購買更多並行之前，先測量串行占比——對固定工作量而言，那個數字才是真正的加速天花板。
</Tip>
