CPU耗能的基本原理
我們將CPU簡單看作場效應(yīng)晶體管FET的集合。這么多個(gè)FET隨著每一次的翻轉(zhuǎn)都在消耗者能量。一個(gè)FET的簡單示意圖如下:
圖1
當(dāng)輸入低電平時(shí),CL被充電,我們假設(shè)a焦耳的電能被儲存在電容中。而當(dāng)輸入變成高電平后,這些電能則被釋放,a焦耳的能量被釋放了出來。因?yàn)镃L很小,這個(gè)a也十分的小,幾乎可以忽略不計(jì)。但如果我們以1GHz頻率翻轉(zhuǎn)這個(gè)FET,則能量消耗就是a × 10^9,這就不能忽略了,再加上CPU中有幾十億個(gè)FET,消耗的能量變得相當(dāng)可觀。
從這里我們可以看出CPU的能耗和有多少個(gè)晶體管參與工作有關(guān),似乎還和頻率是正相關(guān)的。我們下面分別來看一下。
指令功耗
如果我們將CPU簡單看作單核的,是不是運(yùn)行while(1);就能讓該CPU達(dá)到TDP呢?實(shí)際上并不會。每條指令所要調(diào)動(dòng)的晶體管數(shù)目不同,而功耗是被調(diào)動(dòng)晶體管功耗的總和。
《動(dòng)物莊園》有一句話很經(jīng)典:“所有動(dòng)物生來平等 但有些動(dòng)物比其他動(dòng)物更平等”。是不是指令都是平等的呢?當(dāng)然不是了,有些指令更平等!每條指令需要調(diào)動(dòng)的晶體管數(shù)目有很大不同,一條新指令和已經(jīng)在L1指令Cache中的指令也不同。一個(gè)簡化版Hesswell CPU的流水線示意圖如下:
一個(gè)指令要不要調(diào)度運(yùn)算器,要不要訪問外存,要不要回寫,在不在L1中都會帶來不少的區(qū)別。綜合下來,流水線中各個(gè)階段的功耗餅圖如下:
可以看到Fetch指令和decode占據(jù)了大頭,而我們的執(zhí)行才占據(jù)%9!!while(1);編譯完的指令們,這時(shí)已經(jīng)在L1中,F(xiàn)etch會節(jié)省不少能耗。這也是達(dá)成同樣功能,ASIC很省電,而CPU很費(fèi)電的原因:
如果我們不討論指令的差異,在平均意義上來看指令的功耗,它有個(gè)專有的名詞:指令功耗(EPI,Energy per Instruction)。
EPI和CPU制程、設(shè)計(jì)息息相關(guān)。Intel的CPU在P4的EPI達(dá)到一個(gè)高峰,后來在注重每瓦功耗的情況下,逐年在下降:
Intel CPU EPI(數(shù)據(jù)較老)
耗能和頻率的關(guān)系
從圖1中,也許你可以直觀的看出,能耗和頻率是正相關(guān)的。這個(gè)理解很正確,實(shí)際上能耗和頻率成線性相關(guān)。能耗關(guān)系公示是(參考資料2):
P代表能耗。C可以簡單看作一個(gè)常數(shù),它由制程和設(shè)計(jì)等因素決定;V代表電壓;而f就是頻率了。理想情況,提高一倍頻率,則能耗提高一倍。看起來并不十分嚴(yán)重,不是嗎?但實(shí)際情況卻沒有這么簡單。
我們這里要引入門延遲(Gate Delay)的概念。簡單來說,組成CPU的FET充放電需要一定時(shí)間,這個(gè)時(shí)間就是門延遲。只有在充放電完成后采樣才能保證信號的完整性。而這個(gè)充放電時(shí)間和電壓負(fù)相關(guān),即電壓高,則充放電時(shí)間就短。也和制程正相關(guān),即制程越小,充放電時(shí)間就短。讓我們?nèi)コ瞥痰母蓴_因素,當(dāng)我們不斷提高頻率f后,過了某個(gè)節(jié)點(diǎn),太快的翻轉(zhuǎn)會造成門延遲跟不上,從而影響數(shù)字信號的完整性,從而造成錯(cuò)誤。這也是為什么超頻到某個(gè)階段會不穩(wěn)定,隨機(jī)出錯(cuò)的原因。那么怎么辦呢?聰明的你也許想到了超頻中常用的辦法:加壓。對了,可以通過提高電壓來減小門延遲,讓系統(tǒng)重新穩(wěn)定下來。
讓我們回頭再來看看公式,你會發(fā)現(xiàn)電壓和功耗可不是線性相關(guān),而是平方的關(guān)系!再乘以f,情況就更加糟糕了。我們提高頻率,同時(shí)不得不提高電壓,造成P的大幅提高!我們回憶一下初中學(xué)過的y=x^3的函數(shù)圖:
Y在經(jīng)過前期緩慢的提高后在a點(diǎn)會開始陡峭的上升。這個(gè)a就是轉(zhuǎn)折點(diǎn),過了它,就劃不來了。功耗和頻率的關(guān)系也大抵如此,我們看兩個(gè)實(shí)際的例子:
i7-2600K頻率和功耗的關(guān)系
Exynos頻率和功耗的關(guān)系
從ARM和X86陣營來看,他們能耗曲線是不是和冪函數(shù)圖很像?
其他因素
一個(gè)while(1);最多讓某個(gè)內(nèi)核占有率100%,其他內(nèi)核呢?CPU近期的目標(biāo)是提供越來越精細(xì)的電源管理策略。原來不跑的部分就讓它閑著,后來改成它降頻運(yùn)行,接著改成不提供時(shí)鐘信號,這樣猶嫌不足。現(xiàn)在CPU的電源管理由PMC負(fù)責(zé),它會完全切斷不用部分的電路。
在操作系統(tǒng)層面,它會盡力將不用的內(nèi)核設(shè)置成CState,從而讓PMC等電源控制模塊有足夠的提示(hint)來關(guān)閉電源。
結(jié)論
拉拉雜雜的說了這許多,我們可以看出,while(1);并不會耗掉整個(gè)CPU的TDP。就算一個(gè)內(nèi)核,它的耗能也不會達(dá)到該內(nèi)核的能耗上線(現(xiàn)在都是Turbo Mode,內(nèi)核能耗上限是個(gè)動(dòng)態(tài)的結(jié)果)。它可以把該內(nèi)核拉入Turbo Mode的最高頻率,但因?yàn)橹噶疃荚贚1中,耗能也不會很高。
至于消耗的能量都到哪里去了,根據(jù)能量守恒定律,一定是變成熱量散發(fā)出去了。這個(gè)過程中也許會產(chǎn)生動(dòng)能(風(fēng)扇轉(zhuǎn)動(dòng)等等),光能(GPIO驅(qū)動(dòng)LED發(fā)光),但在最后的最后,都會變成熱能。
-
電源管理
+關(guān)注
關(guān)注
115文章
6177瀏覽量
144448 -
FET
+關(guān)注
關(guān)注
3文章
632瀏覽量
62948 -
場效應(yīng)晶體管
+關(guān)注
關(guān)注
6文章
363瀏覽量
19494 -
LED發(fā)光
+關(guān)注
關(guān)注
0文章
23瀏覽量
8252 -
調(diào)度器
+關(guān)注
關(guān)注
0文章
98瀏覽量
5245
發(fā)布評論請先 登錄
相關(guān)推薦
評論