iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 27
2
自我挑戰組

計算機概論X30天系列 第 27

Day27:阿姆達爾定律(Amdahl's law)——資源配置的哲學

閱讀前,建議可以參考Day1:閱讀指南&為何選擇這個題目?

▌挑戰簡介

  • 題目:計算機概論X30天

  • 挑戰內容:連續30天紀錄計算機概論、離散數學、演算法、資料結構等課程,還有自己學習程式的心得體悟。

  • 本篇性質:適合任何對程式語言有興趣的人閱讀

▌一個公司如何決定開發什麼?

假設

記憶體的讀取時間,佔了電腦程序運算20%的時間
處理器的運算時間,佔了電腦程序運算60%的時間

而今天有兩項技術
1.將記憶體讀取速度提高5倍
2.將處理器速度提高50%

請問要優先開發技術1還是技術2?

▌阿姆達爾法則(Amdahl's law)

要解決這個問題,首先就要知道阿姆達爾定律

阿姆達爾法則(Amdahl's law)是一個計算如何有效率進行資源分配的好工具

S=1/(1-a+a/n)

S:表示「總系統」提升的效率是原來的S倍。
a:表示「部分系統」影響「總系統」效率的比率。
n:表示「部分系統」提升的效率是原來的n倍。

▌(例題)無限制的進步真的好嗎?

假設記憶體的讀取速度佔程式運行的20%

那如果我們將讀取速度變成2倍,整體運行速度會提升幾倍呢?

根據阿姆達爾法則

S=1/((1-20%)+20%/2)
S=1.111

整體系統速度會提升11%(1.11倍)

那如果我們將讀取速度變成100倍,整體運行速度會提升幾倍呢?

根據阿姆達爾法則

S=1/((1-20%)+20%/100)
S=1.246

整體系統速度會提升24%(1.246倍)

提升2倍,就多了11%;提升100倍,但卻只比2倍多了13%

因此:無限制的進步真的好嗎?

不一定,看你的投資報酬率。如果為了讓整體多13%,就就要耗盡非常大的成本去提升部分的100倍。

那可能是不划算的。

▌例題:一個公司要開發什麼

回到一開始的例題:

假設,記憶體的讀取時間,佔了電腦程序運算20%的時間
處理器的運算時間,佔了電腦程序運算60%的時間

而今天有兩項技術
1.將記憶體讀取速度提高5倍
2.將處理器速度提高50%

請問要優先開發技術1還是技術2?

根據阿姆達爾法則,技術1

S=1/((1-20%)+(20%/5))
S=1.19 (也就是120%)

整體效率可以提高120%

根據阿姆達爾法則,技術2

S=1/((1-60%)+(60%/1.5))
S=1.25 (也就是125%)

整體效率可以提高125%

那當然是優先開發技術(2)囉

因為只要提高50%,整體就增加了125%呢!

▌總結

從阿姆達爾法則,可以總結出幾點有趣的觀察

  • 許多時候,增長未必是線性的
    • 有點像是20/80法則:從0分到80分往往很容易,但從80到100分就難了
  • 阿姆達爾法則,也很適用在很多日常決策中
    • 像是要花時間寫程式?還是花時間讀書?——要知道這些,就必須估計這些行為對自己的目標(總系統)影響的佔比,還有提升這些能力所花費的成本哪個比較低了。

上一篇
Day26:[離散數學]複雜度的數學證明
下一篇
Day28:JSON vs XML
系列文
計算機概論X30天30

1 則留言

0
Blackie Tsai
iT邦新手 5 級 ‧ 2018-11-30 07:49:12

學習了!感謝分享

我要留言

立即登入留言