CPU運行功耗和什麼相關?消耗的電能都去哪了?

很久很久以前,在邀請下,我收藏了一個問題:

CPU的功耗和什麼相關?為什麼一個while(1);就可佔滿CPU的功耗??

www.zhihu.com圖標

這個問題看起來有點傻,實際上也並不成立。一個while(1)最多可以讓CPU某個邏輯內核佔有率100%,而不會讓所有內核佔有率100%,更不會讓CPU達到TDP。

在我就要回答他,笑話他很傻很天真之前,忽然想到,那while(1)到底佔了多少CPU功耗呢?這些功耗去哪裡了呢?凡事就怕認真二字,如果仔細思考這個問題,就會發現和它相關的知識點很多。尤其在今天這個更加註重每瓦功耗的年代,知道原理,進而研究如何省電也就是應有之義了。

今天我們就來詳細討論一下CPU耗能的基本原理,它和什麼相關等等問題。

CPU耗能的基本原理

我在這篇頗受歡迎的文章裡面介紹過基本原理:

老狼:為什麼CPU的頻率止步於4G?我們觸到頻率天花板了嗎??

zhuanlan.zhihu.com圖標

我們將CPU簡單看作場效應晶體管FET的集合。這麼多個FET隨著每一次的翻轉都在消耗者能量。一個FET的簡單示意圖如下:

圖1

當輸入低電平時,CL被充電,我們假設a焦耳的電能被儲存在電容中。而當輸入變成高電平後,這些電能則被釋放,a焦耳的能量被釋放了出來。因為CL很小,這個a也十分的小,幾乎可以忽略不計。但如果我們以1GHz頻率翻轉這個FET,則能量消耗就是a × 10^9,這就不能忽略了,再加上CPU中有幾十億個FET,消耗的能量變得相當可觀。

從這裡我們可以看出CPU的能耗和有多少個晶體管參與工作有關,似乎還和頻率是正相關的。我們下面分別來看一下。

指令功耗

如果我們將CPU簡單看作單核的,是不是運行while(1);就能讓該CPU達到TDP呢?實際上並不會。每條指令所要調動的晶體管數目不同,而功耗是被調動晶體管功耗的總和。

《動物莊園》有一句話很經典:「所有動物生來平等 但有些動物比其他動物更平等」。是不是指令都是平等的呢?當然不是了,有些指令更平等!每條指令需要調動的晶體管數目有很大不同,一條新指令和已經在L1指令Cache中的指令也不同。一個簡化版Hesswell CPU的流水線示意圖如下:

一個指令要不要調度運算器,要不要訪問外存,要不要回寫,在不在L1中都會帶來不少的區別。綜合下來,流水線中各個階段的功耗餅圖如下:

可以看到Fetch指令和decode佔據了大頭,而我們的執行才佔據%9!!while(1);編譯完的指令們,這時已經在L1中,Fetch會節省不少能耗。這也是達成同樣功能,ASIC很省電,而CPU很費電的原因:

如果我們不討論指令的差異,在平均意義上來看指令的功耗,它有個專有的名詞:指令功耗(EPI,Energy per Instruction)。

EPI和CPU製程、設計息息相關。Intel的CPU在P4的EPI達到一個高峰,後來在注重每瓦功耗的情況下,逐年在下降:

Intel CPU EPI(數據較老)

耗能和頻率的關係

從圖1中,也許你可以直觀的看出,能耗和頻率是正相關的。這個理解很正確,實際上能耗和頻率成線性相關。能耗關係公示是(參考資料2):

P代表能耗。C可以簡單看作一個常數,它由製程和設計等因素決定;V代表電壓;而f就是頻率了。理想情況,提高一倍頻率,則能耗提高一倍。看起來並不十分嚴重,不是嗎?但實際情況卻沒有這麼簡單。

我們這裡要引入門延遲(Gate Delay)的概念。簡單來說,組成CPU的FET充放電需要一定時間,這個時間就是門延遲。只有在充放電完成後採樣才能保證信號的完整性。而這個充放電時間和電壓負相關,即電壓高,則充放電時間就短。也和製程正相關,即製程越小,充放電時間就短。讓我們去除製程的干擾因素,當我們不斷提高頻率f後,過了某個節點,太快的翻轉會造成門延遲跟不上,從而影響數字信號的完整性,從而造成錯誤。這也是為什麼超頻到某個階段會不穩定,隨機出錯的原因。那麼怎麼辦呢?聰明的你也許想到了超頻中常用的辦法:加壓。對了,可以通過提高電壓來減小門延遲,讓系統重新穩定下來。

讓我們回頭再來看看公式,你會發現電壓和功耗可不是線性相關,而是平方的關係!再乘以f,情況就更加糟糕了。我們提高頻率,同時不得不提高電壓,造成P的大幅提高!我們回憶一下初中學過的y=x^3的函數圖:

Y在經過前期緩慢的提高後在a點會開始陡峭的上升。這個a就是轉折點,過了它,就划不來了。功耗和頻率的關係也大抵如此,我們看兩個實際的例子:

i7-2600K頻率和功耗的關係

Exynos頻率和功耗的關係

從ARM和X86陣營來看,他們能耗曲線是不是和冪函數圖很像?

其他因素

一個while(1);最多讓某個內核佔有率100%,其他內核呢?CPU近期的目標是提供越來越精細的電源管理策略。原來不跑的部分就讓它閑著,後來改成它降頻運行,接著改成不提供時鐘信號,這樣猶嫌不足。現在CPU的電源管理由PMC負責,它會完全切斷不用部分的電路。

在操作系統層面,它會儘力將不用的內核設置成CState,從而讓PMC等電源控制模塊有足夠的提示(hint)來關閉電源。更多CState的知識見:

老狼:CPU省電的秘密(二):CStates?

zhuanlan.zhihu.com圖標

結論

拉拉雜雜的說了這許多,我們可以看出,while(1);並不會耗掉整個CPU的TDP。就算一個內核,它的耗能也不會達到該內核的能耗上線(現在都是Turbo Mode,內核能耗上限是個動態的結果)。它可以把該內核拉入Turbo Mode的最高頻率,但因為指令都在L1中,耗能也不會很高。

至於消耗的能量都到哪裡去了,根據能量守恆定律,一定是變成熱量散發出去了。這個過程中也許會產生動能(風扇轉動等等),光能(GPIO驅動LED發光),但在最後的最後,都會變成熱能。

其他CPU硬體文章:

老狼:為什麼CPU的頻率止步於4G?我們觸到頻率天花板了嗎??

zhuanlan.zhihu.com圖標老狼:CPU製造的那些事之一:i7和i5其實是孿生兄弟!??

zhuanlan.zhihu.com圖標老狼:CPU製造的那些事之二:Die的大小和良品率?

zhuanlan.zhihu.com圖標老狼:為什麼晶圓都是圓的不是方的??

zhuanlan.zhihu.com圖標老狼:為什麼"電路"要鋪滿整個晶圓??

zhuanlan.zhihu.com圖標老狼:CPU能用多久?會不會因為老化而變慢??

zhuanlan.zhihu.com圖標老狼:為什麼CPU越來越多地採用硅脂而不是焊錫散熱??

zhuanlan.zhihu.com圖標老狼:為什麼Intel CPU的Die越來越小了??

zhuanlan.zhihu.com圖標老狼:破繭化蝶,從Ring Bus到Mesh網路,CPU片內匯流排的進化之路?

zhuanlan.zhihu.com圖標老狼:450mm的晶圓在哪裡??

zhuanlan.zhihu.com圖標老狼:什麼是TLB和PCID?為什麼要有PCID?為什麼Linux現在才開始使用它??

zhuanlan.zhihu.com圖標老狼:什麼是Speculative Execution?為什麼要有它??

zhuanlan.zhihu.com圖標

更多CPU電源管理的文章:

老狼:CPU省電的秘密(一):EIST?

zhuanlan.zhihu.com圖標老狼:CPU省電的秘密(二):CStates?

zhuanlan.zhihu.com圖標老狼:睿頻:榨乾CPU所有的潛力(CPU電源管理系列番外篇)?

zhuanlan.zhihu.com圖標

歡迎大家關注本專欄和用微信掃描下方二維碼加入微信公眾號"UEFIBlog",在那裡有最新的文章。同時歡迎大家給本專欄和公眾號投稿!

用微信掃描二維碼加入UEFIBlog公眾號

參考資料:

[1] comsol.com/blogs/havent

[2] CPU power dissipation

[3] How small can CPUs get?

[4] The Samsung Exynos 7420 Deep Dive - Inside A Modern 14nm SoC - Cheap PC hardware News & Rumors

[5] arxiv.org/pdf/quant-ph/

推薦閱讀:

互聯網公司為什麼都在玩硬體?
響鈴:三星將硬體+解決方案打包,顯示器市場的春天要到了?
電熱水壺也有高科技
W i F i信號增強器硬體怎麼連接?
博通(Broadcom)作為全球最大的WLAN晶元廠商,為什麼很少進入大眾視野?

TAG:中央處理器CPU | 計算機科學 | 硬體 |