閱讀前,建議可以參考Day1:閱讀指南&為何選擇這個題目?
題目:計算機概論X30天
挑戰內容:連續30天紀錄計算機概論、離散數學、演算法、資料結構等課程,還有自己學習程式的心得體悟。
本篇性質:適合任何對程式語言有興趣的人閱讀
假設
記憶體的讀取時間,佔了電腦程序運算20%的時間
處理器的運算時間,佔了電腦程序運算60%的時間
而今天有兩項技術
1.將記憶體讀取速度提高5倍
2.將處理器速度提高50%
請問要優先開發技術1還是技術2?
要解決這個問題,首先就要知道阿姆達爾定律
阿姆達爾法則(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%呢!
從阿姆達爾法則,可以總結出幾點有趣的觀察