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

1、功耗:CPU的「人體極限」

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

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

一、爲何奔騰 4 的主頻沒能超過 3.8GHz 的障礙呢?

是由於功耗,咱們的CPU,通常都被叫作超大規模集成電路,這些電路,實際上都是一個個晶體管組合而成的,CPU在計算、其實就是讓晶體管裏面的開關不斷地區「打開」和「關閉」,來組合完成各類運算和功能bash

要想計算得快,一方面,咱們要在CPU裏,一樣的面積裏面,多方一些晶體管,也就是增長密度;機器學習

另外一方面,咱們讓晶體管「打開」和「關閉」的更快一點,也就是提高主頻,而這二者都會增長功耗,帶來耗電和散熱的問題工具

二、CPU和工廠的故事

你能夠把CPU想象成一個巨大的工廠、裏面有不少工人,至關於CPU上面的晶體管。互相之間協同工做,爲了工做的快一點,咱們在工廠裏多塞一點人,你可能會問,爲何不把工廠造的大一點呢?性能

一、爲何不把工廠造的大一點呢?學習

這是由於,人和人之間若是離得遠了,互相之間走過去須要花的時間就會變長也會致使性能降低,優化

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

二、要是太熱工廠裏的人會中暑、cpu會出錯或崩潰spa

除了堵塞一點人,咱們還但願每一個人的動做都快一點,這樣一樣的時間裏就能夠多幹一點活兒了,這就至關提高了CPU主頻,可是動做快,每一個人要出汗散熱,
要是太熱,對工廠裏的人來都會中暑生病,對CPU來講就會崩潰出錯

三、工廠太熱如何處理?

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

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

2、CPU的功率的計算公式

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

一、爲了提供高性能,不斷增長晶體管

那麼,爲了提升性能,咱們須要不斷地增長晶體管數量,一樣的面積下,咱們想要多放一點晶體管,就要把晶體管造得小一點

這個就是平時咱們所說的提高「製程序」,從從 28nm 到 7nm,至關於晶體管自己變成了原來的 1/4大小,這個就至關於工廠裏,一樣的活兒

咱們要找瘦小一點的工人,這樣一個工廠裏面就能夠多一些人,咱們還要提高主頻,讓開關的頻率變快,也就是要找手腳更快的工人

二、不斷增長晶體管遇到的問題?

可是,功耗增長大太多,就會致使CPU散熱跟不上,這時,咱們就須要下降電壓,這裏有一點很是關鍵,在整個功耗的 公式裏面,

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

一、爲何主頻提高到了1000倍,可是功耗只增加了40倍

事實上,從到5MHz 主頻的 8086 到 5GHz 主頻的 Intel i9,CPU 的電壓已經從 5V 左右降低到了1V 左右,這也是爲何咱們的CPU

主頻提高到了1000倍,可是功耗只增加了40倍,好比說,個人Surface Go,在這樣的輕薄筆記本上微軟就是選擇了電壓降低到的電壓CPU

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

 3、並行優化

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

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

而不是「響應時間」,來達到目的。提高響應時間,就比如提高你的用的交通工具的速度,好比本來你是開汽車,如今變成了回車乃至飛機

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

二、經過並行提升性能

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

雖然上海到北京的時間沒有變,可是一次費8架飛機可以雲的東西天然就變多了,也就是所謂的「吞吐率」變大了,因此,無論你有沒有須要,如今的性能就是提高了2倍乃至8倍、16倍,

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

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

可是,並非全部問題,均可以經過並行提升性能來解決,若是想使用這種思想,須要知足這樣幾個條件。

第一:須要進行的計算,自己能夠分解成幾個能夠並行的任務,比如上面的乘法和加法計算,幾我的能夠同時進行,不會影響最後的結果

第二:須要可以分解好問題,並確保幾我的的結果可以彙總到一塊兒

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


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

4、理解阿姆達爾定律

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

一、不受影響的執行時間

在剛剛的向量點積例子裏,4我的同時計算向量的一小段點積,就是經過並行提升這部分的計算性能,

可是這4我的的計算結果,最終還要在一我的哪裏進行彙總相加的時間,是不能經過並行來優化的,也就是上面的公式裏面不受影響的執行時間這一部分

二、阿姆定律案例

好比上面這個向量的一小段點積,須要100ms,加法須要20ns,總共須要120ns,這裏經過並行4個CPU有了4倍的加速度,那麼最終優化後就有了

100/4+20=45ns

即便咱們增長更多的並行度來提升加速倍數,好比100個cpu,整個事件也須要

100/100+20=21ns

 

5、延伸

一、加大機率事件

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

二、經過流水線提升性能

經過流水線提升性能。現代的工廠裏的生產線叫「流水線」。咱們能夠把裝配 iPhone 這樣的任務拆分紅一個個細分的任務,讓每一個人都只須要處理一道工序,
最大化整個工廠的生產效率。類相似的,咱們的 CPU 其實就是一個「運算工廠」。咱們把 CPU 指令執行的過程進行拆分,細化運行,也是現代 CPU 在主頻沒有辦法提高那麼多的狀況下,

性能仍然能夠獲得提高的重要緣由之一。咱們在後面也會講到,現代 CPU 裏是如何經過流水線來提高性能的,以及反面的
過長的流水線會帶來什麼新的功耗和效率上的負面影響。

三、經過預測提升性能

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

相關文章
相關標籤/搜索