好文共享,硬體的極限與未來軟體的挑戰
其實這是一篇有點老的文章(2009),想說就提個大概內容,加一些個人的解釋,分享一下。
--
CPU已經來到極限了,我們曾經在摩爾定律下,每18個月把transistor的數量加一倍,享用更快的處理速度,更佳的效能;很可惜的,硬體效能增加的同時,我們的軟體也進一步吃光所有多出來的效能,更多的供給推出更大的需求,以前我們只要計算機幫我們算答案,現在我們卻要手機和我們對話。
硬體製造商急於推出更快的產品,在各種方法上用盡心力。
但在三個推動CPU加速的關鍵:clock speed, execution optimization, cache,都遇到各自的問題。
首先是clock speed:
clock是數位晶片的心臟(或說動力,你要說查克拉也可以),每一個運算單元靠clock來同步資料的寫入、運算和輸出,理論上,加速clock等效於運算速度的加倍。
但這有極限。
半導體靠的是電位的高與低來表示數位的1與0,每進行一次轉換,都會對電容進行一次充電或放電,clock愈快,充放電的頻率也會更快,相對的就是功耗的提升,理論上,這個功耗和clock的頻率是平方的關係,現在高效CPU的功耗大概都在100W~200W間,這大概跟一台冰箱差不多,這些熱會在大概2~3 cm^2的面積內的產生,通過各種散熱膏、散熱片、風扇帶到晶片外,所以上youtube 查查'cpu cooking' ,你可以找到用CPU烤肉、煎蛋的影片。
http://www.youtube.com/watch?v=7uBNCN6v_gk
甚至還有對記憶體超頻結果把封裝燒掉的影片……
http://www.youtube.com/watch?NR=1&feature=fvwp&v=Gw-rUCwLoQ0
也可以知道…為什麼現在瘋狂的超頻者,甚至要用液態氮來冷卻CPU。
http://www.youtube.com/watch?v=tPzNl1t4Qmk
當然…個人PC大概還不會出現水冷式的系統,目前clock 頻率的上限,大約就在3.6~3.8GHz左右,再上廢熱會超過氣冷式的極限。
另一方面execution optimization希望能在每個cycle中執行更多的instruction,無論是pipeline, branch prediction等等,這裡面有相當複雜、有關硬體設計的思維,但同樣的,能從execution optimization 中榨出的效能也面臨極限,甚至出現過processor會調動write, read的執行序列,以換到更多效能…。
加上更多的cache也是個不錯的方法,以前,記憶體和CPU的速度是相同的,雙方合作良好;後來CPU的運作頻率遠遠超過了記憶體,於是出現了cache來保存CPU運作中需要的資料,CPU得以進行更快的運算。
當上述方法都來到了極限,目前主流都超向另一個方式;利用hyperthreading(超執行緒?), multicore(多核心)的方式來換到更多的速度,這兩種方法其實都不是運算速度的增加,而是用面積來換到一些速度,就像生產線滿載了,就要蓋一家新工廠。
Hyperthrading的作法是複製一些記錄CPU運算狀態的單元,並不包含關鍵的ALU的運算單元,這讓作業系統可以「看到」兩個運算的單元,當其中一個運算單元閒置時(許在等cache或memory的回應),另一個運算單元就可以取用關鍵的運算單元執行運算,就像靈夢休息的時候,魔理沙就會出來接手。
這詳細的可能還是要問晶片設計組的同學們orz。
Hyperthreading需要有作業系統的配合,增加大概5%的面積,可以換到5~15%的效能提升。
multicore就不較沒那麼稀奇,直接複製一套core,讓作業系統去分配,但更多的core絕非效能等比例上升的意思,不是每一個運算都能夠平行的處理,指令間需要shared data時也會加深系統的複雜度。
面對多執行緒和多核心的趨勢,本文作者認為concurrency(多工?同步?)將會是未來軟體的重大變革,未來的程式會在多核心上運行,要如何避免多工上的deadlock和各式新型態的錯誤,事實上我認為這早已是現代進行式,否則我們不會有那麼多多核心的電腦正在運行。
作者在此提出幾點結論:
1.未來軟體設計要能了解何類工作可以平行化處理以加速,哪些不行,並能譔寫相對應的程式。
2.CPU火力無限的時代已經結束了,以前程式速度卡在網路、記憶體、database,這些東西還在進步當中- TLE, SSD... - 但CPU大概已經到了極限,短時間內看不到突破性的可能。
3.承上一點,軟體的optimization將會愈來愈吃重,Vista轉換到win7證明了軟體optimization可以有多大的效能進步,未來軟體將更需要這些。
4.programming language也要面對concurrency的問題,例如,雖然大多數的大型程式以C++為核心,但C++並未將concurrency納入考量,因而需要限於平台的library來處理concurrency的問題;一套統一concurrency問題的標準也亟待發展。
Reference:
Wikipedia about hyperthreading:
http://en.wikipedia.org/wiki/Hyper-threading
CPU power consumption comparison:
http://www.tomshardware.com/reviews/ivy-bridge-benchmark-core-i7-3770k,3181-23.html
CPU已經來到極限了,我們曾經在摩爾定律下,每18個月把transistor的數量加一倍,享用更快的處理速度,更佳的效能;很可惜的,硬體效能增加的同時,我們的軟體也進一步吃光所有多出來的效能,更多的供給推出更大的需求,以前我們只要計算機幫我們算答案,現在我們卻要手機和我們對話。
硬體製造商急於推出更快的產品,在各種方法上用盡心力。
但在三個推動CPU加速的關鍵:clock speed, execution optimization, cache,都遇到各自的問題。
首先是clock speed:
clock是數位晶片的心臟(或說動力,你要說查克拉也可以),每一個運算單元靠clock來同步資料的寫入、運算和輸出,理論上,加速clock等效於運算速度的加倍。
但這有極限。
半導體靠的是電位的高與低來表示數位的1與0,每進行一次轉換,都會對電容進行一次充電或放電,clock愈快,充放電的頻率也會更快,相對的就是功耗的提升,理論上,這個功耗和clock的頻率是平方的關係,現在高效CPU的功耗大概都在100W~200W間,這大概跟一台冰箱差不多,這些熱會在大概2~3 cm^2的面積內的產生,通過各種散熱膏、散熱片、風扇帶到晶片外,所以上youtube 查查'cpu cooking' ,你可以找到用CPU烤肉、煎蛋的影片。
http://www.youtube.com/watch?v=7uBNCN6v_gk
甚至還有對記憶體超頻結果把封裝燒掉的影片……
http://www.youtube.com/watch?NR=1&feature=fvwp&v=Gw-rUCwLoQ0
也可以知道…為什麼現在瘋狂的超頻者,甚至要用液態氮來冷卻CPU。
http://www.youtube.com/watch?v=tPzNl1t4Qmk
當然…個人PC大概還不會出現水冷式的系統,目前clock 頻率的上限,大約就在3.6~3.8GHz左右,再上廢熱會超過氣冷式的極限。
另一方面execution optimization希望能在每個cycle中執行更多的instruction,無論是pipeline, branch prediction等等,這裡面有相當複雜、有關硬體設計的思維,但同樣的,能從execution optimization 中榨出的效能也面臨極限,甚至出現過processor會調動write, read的執行序列,以換到更多效能…。
加上更多的cache也是個不錯的方法,以前,記憶體和CPU的速度是相同的,雙方合作良好;後來CPU的運作頻率遠遠超過了記憶體,於是出現了cache來保存CPU運作中需要的資料,CPU得以進行更快的運算。
當上述方法都來到了極限,目前主流都超向另一個方式;利用hyperthreading(超執行緒?), multicore(多核心)的方式來換到更多的速度,這兩種方法其實都不是運算速度的增加,而是用面積來換到一些速度,就像生產線滿載了,就要蓋一家新工廠。
Hyperthrading的作法是複製一些記錄CPU運算狀態的單元,並不包含關鍵的ALU的運算單元,這讓作業系統可以「看到」兩個運算的單元,當其中一個運算單元閒置時(許在等cache或memory的回應),另一個運算單元就可以取用關鍵的運算單元執行運算,就像靈夢休息的時候,魔理沙就會出來接手。
這詳細的可能還是要問晶片設計組的同學們orz。
Hyperthreading需要有作業系統的配合,增加大概5%的面積,可以換到5~15%的效能提升。
multicore就不較沒那麼稀奇,直接複製一套core,讓作業系統去分配,但更多的core絕非效能等比例上升的意思,不是每一個運算都能夠平行的處理,指令間需要shared data時也會加深系統的複雜度。
面對多執行緒和多核心的趨勢,本文作者認為concurrency(多工?同步?)將會是未來軟體的重大變革,未來的程式會在多核心上運行,要如何避免多工上的deadlock和各式新型態的錯誤,事實上我認為這早已是現代進行式,否則我們不會有那麼多多核心的電腦正在運行。
作者在此提出幾點結論:
1.未來軟體設計要能了解何類工作可以平行化處理以加速,哪些不行,並能譔寫相對應的程式。
2.CPU火力無限的時代已經結束了,以前程式速度卡在網路、記憶體、database,這些東西還在進步當中- TLE, SSD... - 但CPU大概已經到了極限,短時間內看不到突破性的可能。
3.承上一點,軟體的optimization將會愈來愈吃重,Vista轉換到win7證明了軟體optimization可以有多大的效能進步,未來軟體將更需要這些。
4.programming language也要面對concurrency的問題,例如,雖然大多數的大型程式以C++為核心,但C++並未將concurrency納入考量,因而需要限於平台的library來處理concurrency的問題;一套統一concurrency問題的標準也亟待發展。
Reference:
Wikipedia about hyperthreading:
http://en.wikipedia.org/wiki/Hyper-threading
CPU power consumption comparison:
http://www.tomshardware.com/reviews/ivy-bridge-benchmark-core-i7-3770k,3181-23.html