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