乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       茂林之家 2019-04-14
      CPU運行功耗和什么相關?消耗的電能都去哪了?

      很久很久以前,在邀請下,有人問我一個問題:

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

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

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

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

      CPU耗能的基本原理

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

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

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

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

      指令功耗

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

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

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

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

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

      可以看到Fetch指令和decode占據(jù)了大頭,而我們的執(zhí)行才占據(jù)%9?。hile(1);編譯完的指令們,這時已經在L1中,F(xiàn)etch會節(jié)省不少能耗。這也是達成同樣功能,ASIC很省電,而CPU很費電的原因:

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

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

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

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

      耗能和頻率的關系

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

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

      P代表能耗。C可以簡單看作一個常數(shù),它由制程和設計等因素決定;V代表電壓;而f就是頻率了。理想情況,提高一倍頻率,則能耗提高一倍??雌饋聿⒉皇謬乐?,不是嗎?但實際情況卻沒有這么簡單。

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

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

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

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

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

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

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

      Exynos頻率和功耗的關系

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

      其他因素

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

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

      結論

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

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

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多