原文地址:https://www.inlighting.org/archives/amdahls-law-and-its-proof
1. 介紹
Amdahl's law(阿姆達(dá)爾定律) 由計(jì)算機(jī)科學(xué)家 Gene Amdahl 在 1967 年提出,旨在用公式描述在并行計(jì)算中,多核處理器理論上能夠提高多少倍速度,公式如下:
為 speedup,代表全局加速倍速(原來總時(shí)間/ 加速后總時(shí)間),
為并行計(jì)算所占比例(可以并行計(jì)算代碼量 / 總代碼量),
為并行節(jié)點(diǎn)處理個(gè)數(shù),可以理解為 CPU 的核心數(shù),這里先簡要介紹下,后面會(huì)詳細(xì)說明并且推導(dǎo)。
2. 前置說明
2.1 Fraction enhanced
Fraction enhanced 顧名思義是部分提高。例如我的程序總共有 100 行代碼,其中 50 行是可以通過并行計(jì)算的,那么這 50 行代碼就是 Fraction enhanced 。但是實(shí)際上 Fraction enhanced 是一個(gè)比例數(shù)值,是并行計(jì)算代碼 / 總代碼量。
例如上面的例子, ,由此我們可以發(fā)現(xiàn),Fraction enhanced 的值永遠(yuǎn)小于 1。
2.2 Speedup enhanced
如上面公式所得,Speedup enhanced 等于 原有運(yùn)行時(shí)間 / 并行計(jì)算加速后的時(shí)間 。例如系統(tǒng)原來串行計(jì)算需要 6 秒,加速后只需要 3 秒,那么 。由此可知 Speedup enhanced 的值永遠(yuǎn)大于 1。
2.3 帶入 Amdahl's law
我們分別把 Fraction enhanced 和 Speedup enhanced 帶入 Amdahl's law。Fraction enhanced 對應(yīng)公式中的 ,即并行計(jì)算所占比例。Speedup enhanced 對應(yīng)
,即并行節(jié)點(diǎn)處理個(gè)數(shù)。
Speedup enhanced 為什么可以代替 ?
這里大家可能有一點(diǎn)疑問,Speedup enhanced 明明是 未加速前時(shí)間 / 加速后的時(shí)間,為什么就可以代表并行節(jié)點(diǎn)處理個(gè)數(shù)。在理論上,單核處理器處理一個(gè)任務(wù)需要 100 秒,那么雙核處理它應(yīng)該需要 50 秒。時(shí)間上它提速了 2 倍, cpu 個(gè)數(shù)上它也提升了 2 倍,故兩個(gè)可以替換。
帶入后公示得:
3. 證明
-
為我們所需要的結(jié)果,全局提速倍速
-
(原來系統(tǒng)執(zhí)行總時(shí)間)為
-
(加速后系統(tǒng)執(zhí)行總時(shí)間)為
- 系統(tǒng)中并行代碼塊(指能夠通過并行計(jì)算加速的代碼塊)原來執(zhí)行時(shí)間為
- 系統(tǒng)中并行代碼塊(指能夠通過并行計(jì)算加速的代碼塊)加速后執(zhí)行時(shí)間為
- 系統(tǒng)中串行代碼塊(指不能通過并行計(jì)算加速的代碼塊)執(zhí)行時(shí)間為
-
為
-
為
帶入公式得:
證明完畢!
4. 總結(jié)
讓我們回到最初的公式
為并行計(jì)算所占比例,
為并行節(jié)點(diǎn)處理個(gè)數(shù)。當(dāng)
時(shí)(即只有串行沒有并行),無論
為多少,加速比
均為 1。當(dāng)
,當(dāng) cpu 核心數(shù)無限增多的時(shí)候,極限加速比
。例如若并行代碼有 75%,極限加速比不能超出 4。
由此我們可知,在并行系統(tǒng)中一味的增加運(yùn)算資源,并不能永遠(yuǎn)成倍的提升系統(tǒng)整體性能。