深入淺出計算機組成原理學習筆記:第四講


一、功耗:CPU的“人體極限”

程序的 CPU 執行時間 = 指令數×CPI×Clock Cycle Time

CPI和指令數都不太容易,越是研發CPU的硬件工程師們就從COU主頻下手

1、為什么奔騰 4 的主頻沒能超過 3.8GHz 的障礙呢?

是因為功耗,我們的CPU,一般都被叫做超大規模集成電路,這些電路,實際上都是一個個晶體管組合而成的,CPU在計算、其實就是讓晶體管里面的開關不斷地區“打開”和“關閉”,來組合完成各種運算和功能

要想計算得快,一方面,我們要在CPU里,同樣的面積里面,多方一些晶體管,也就是增加密度;

另一方面,我們讓晶體管“打開”和“關閉”的更快一點,也就是提升主頻,而這兩者都會增加功耗,帶來耗電和散熱的問題

2、CPU和工廠的故事

你可以把CPU想象成一個巨大的工廠、里面有很多工人,相當於CPU上面的晶體管。互相之間協同工作,為了工作的快一點,我們在工廠里多塞一點人,你可能會問,為什么不把工廠造的大一點呢?

1、為什么不把工廠造的大一點呢?

這是因為,人和人之間如果離得遠了,互相之間走過去需要花的時間就會變長也會導致性能下降,

這就好像如果CPU的面積大,晶體管之間的距離會變大,電信號傳輸的時間就會變長,運算速度自然就慢了

2、要是太熱工廠里的人會中暑、cpu會出錯或崩潰

除了堵塞一點人,我們還希望每個人的動作都快一點,這樣同樣的時間里就可以多干一點活兒了,這就相當提升了CPU主頻,但是動作快,每個人要出汗散熱,
要是太熱,對工廠里的人來都會中暑生病,對CPU來說就會崩潰出錯

3、工廠太熱如何處理?

我們會在CPU上抹硅脂、裝風扇,乃至用上水冷或者其他更好的散熱設備,就好像在工廠里面裝風扇、空調、發冷飲一樣。但是同樣的空間下,裝上風扇空調能夠帶來的散熱效果也有極限的

因此,在CPU里面,能夠放下的晶體管數量和晶體管的“開關”頻率也都是有限的,一個CPU的功率,可以用這樣一個公式來表示一個CPU的功率

二、CPU的功率的計算公式

功耗 ~= 1/2 ×負載電容×電壓的平方×開關頻率×晶體管數量

1、為了提供高性能,不斷增加晶體管

那么,為了提高性能,我們需要不斷地增加晶體管數量,同樣的面積下,我們想要多放一點晶體管,就要把晶體管造得小一點

這個就是平時我們所說的提升“制程序”,從從 28nm 到 7nm,相當於晶體管本身變成了原來的 1/4大小,這個就相當於工廠里,同樣的活兒

我們要找瘦小一點的工人,這樣一個工廠里面就可以多一些人,我們還要提升主頻,讓開關的頻率變快,也就是要找手腳更快的工人

2、不斷增加晶體管遇到的問題?

但是,功耗增加大太多,就會導致CPU散熱跟不上,這時,我們就需要降低電壓,這里有一點非常關鍵,在整個功耗的 公式里面,

功耗和電壓的平方是成比的,這以為着電壓下降到原來的1/5,整個的功耗會變成原來的 1/25

1、為什么主頻提升到了1000倍,但是功耗只增長了40倍

事實上,從到5MHz 主頻的 8086 到 5GHz 主頻的 Intel i9,CPU 的電壓已經從 5V 左右下降到了1V 左右,這也是為什么我們的CPU

主頻提升到了1000倍,但是功耗只增長了40倍,比如說,我的Surface Go,在這樣的輕薄筆記本上微軟就是選擇了電壓下降到的電壓CPU

使得筆記本能有更長的續航時間

 三、並行優化

1、優化到極限了,在想提升速度就不太容易了

從奔騰4開始,Intel 意識到通過提升主頻比較“難”去實現性能提升,便開始推出Core Duo 這樣的多核 CPU,通過提升“吞吐率”

而不是“響應時間”,來達到目的。提升響應時間,就好比提升你的用的交通工具的速度,比如原本你是開汽車,現在變成了回車乃至飛機

本來開車從上海到北京要20個小時,換成飛機需要2個小時了,但是在這之上,再想要提升速度就不太容易了,我們的CPU在奔騰4的年代,就好比已經到了飛機這個速度極限了

2、通過並行提高性能

那你可能要問了,接下來怎么辦呢?相比於給飛機提速,工程師們又想到了新的辦法,可以一次同時開2架、4架乃至8架飛機,這就好像我們現在用的2核、4核、乃至8核的CPU

雖然上海到北京的時間沒有變,但是一次費8架飛機能夠雲的東西自然就變多了,也就是所謂的“吞吐率”變大了,所以,不管你有沒有需要,現在的性能就是提升了2倍乃至8倍、16倍,

這也是一個最常見的提升性能的方式,通過並行提高性能

3、機器學習是如何並行計算的

但是,並不是所有問題,都可以通過並行提高性能來解決,如果想使用這種思想,需要滿足這樣幾個條件。

第一:需要進行的計算,本身可以分解成幾個可以並行的任務,好比上面的乘法和加法計算,幾個人可以同時進行,不會影響最后的結果

第二:需要能夠分解好問題,並確保幾個人的結果能夠匯總到一起

第三:在匯總這個階段,是沒有辦法進行的,還是得順序執行,一步一步來


這就引出了性能優化中,常常用到的一個經驗定律,阿姆爾定律,這定律說的就是,對於一個程序進行優化之后,處理器並行運算之后效率提升的
情況,具體可以用這樣一個公式來表示

四、理解阿姆達爾定律

優化后的執行時間 = 受優化影響的執行時間 / 加速倍數 + 不受影響的執行時間

1、不受影響的執行時間

在剛剛的向量點積例子里,4個人同時計算向量的一小段點積,就是通過並行提高這部分的計算性能,

但是這4個人的計算結果,最終還要在一個人哪里進行匯總相加的時間,是不能通過並行來優化的,也就是上面的公式里面不受影響的執行時間這一部分

2、阿姆定律案例

比如上面這個向量的一小段點積,需要100ms,加法需要20ns,總共需要120ns,這里通過並行4個CPU有了4倍的加速度,那么最終優化后就有了

100/4+20=45ns

即使我們增加更多的並行度來提高加速倍數,比如100個cpu,整個事件也需要

100/100+20=21ns

 

五、延伸

1、加大概率事件

加速大概率事件,最典型的就是,過去今年流行的深度學習,整個計算過程中99%都是向量和矩陣計算,於是,工程師通過GPU和CPU,大幅度提升了深度學習的模型能
訓練過程,奔愛一個c需要跑幾個小時甚至幾天的程序,GPU只需要幾分鍾就好了,更是不滿足於GPU的西能,進一步脫出了TPU,后面的文章
我會為你講解GPU和TPU的基本構造和原理

2、通過流水線提高性能

通過流水線提高性能。現代的工廠里的生產線叫“流水線”。我們可以把裝配 iPhone 這樣的任務拆分成一個個細分的任務,讓每個人都只需要處理一道工序,
最大化整個工廠的生產效率。類類似的,我們的 CPU 其實就是一個“運算工廠”。我們把 CPU 指令執行的過程進行拆分,細化運行,也是現代 CPU 在主頻沒有辦法提升那么多的情況下,

性能仍然可以得到提升的重要原因之一。我們在后面也會講到,現代 CPU 里是如何通過流水線來提升性能的,以及反面的
過長的流水線會帶來什么新的功耗和效率上的負面影響。

3、通過預測提高性能

通過預測提高性能,通過預先猜測一下不該干什么,而不是等上一步運行的結果,提前進行運算,
也是讓程序跑得更快一點的辦法。典型的例子就是在一個循環訪問數組的時候,憑經驗,你也會猜到下一步我們會訪問數組的下一項,后面要講的“分支和冒險”、
“局部性原理”、這些CPU和存儲系統設計方法,其實都是在利用我們對於未來的“預測”、提前進行相應的操作,來提升我們的程序性能


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM