低功耗CPU是怎麼做到的?

同樣是4核8線,i7 帶T結尾的CPU TDP大約是不帶T的一半,如i7 4790t 和 i7 4790 TDP分別是45w 和 84w ,而跑分性能差距大約是10%左右。既然性能比差這麼多,為何不全做成低功耗的CPU?而在實際應用中,低功耗的處理器大約能省電多少?


更新:

實在抱歉術語有點多。

MTBF - Mean Time Between Failure

ICG - Integrated Clock Gating

S/B/ELCG - 不同 level 的 clock gating

Actmon - Activity Monitor

PG - Power Gating

DVFS - Dynamic Voltage Frequency Scaling

--------------------------------

謝邀。唉,又好久沒有答題了,邀請我基本就是坑,答不答完全沒譜。 (′?????)

我感覺之前大家的答案很多都是學校里的知識。理論、公式、圖表該有的基本都有,可是看了總感覺有一丁點彆扭。其實說得都對,但真正 SoC 低功耗設計遠不止那些,是個做起來很複雜很麻煩,也不容易總結的事情。舉個例子,和 ASIC 前端聯繫最緊密的應該是動態功耗了。看了那公式之後,我決定跟後端商量一下,綜合的時候把 max fanout 調小、選好 lib 降壓降頻、retime 不要太奇葩。前端我負責 switching 多的組合邏輯放後級,是不是就大功告成可以啵一個了呢?現實總是殘酷的,這樣做綜合,report 出來肯定沒法看。就算奇蹟出現沒有 violation,我感覺高頻非同步邏輯 MTBF 檢查也過不了。說白了做出來的都是廢品。

那好我們看看有什麼別的辦法。減少 switching activity,最主流的做法是插 ICG,這招確實挺管用的,但要看你 CG 做到什麼程度。前端工程屍說咱代碼風格特別好,綜合工具自動插。不好意思,這樣搞只是一級 FGCG,真的是杯水車薪。在此之上還有 1-2 級的 SLCG、BLCG、ELCG 以及時鐘模塊的 CG。加上這些就還要做 actmon 以確保各級 ICG 關斷正確。這其實給驗證帶來不少麻煩。而且還有個問題,actmon 也是硬體,也有功耗和面積,多少粒度放一個?ICG 如果做得好,和完全 ungated flops 比起來動態功耗大約能減少 10 到 30 倍,開心。

ICG 完了還有 PG,之前大家的答案也有提到。跑 benchmark 應該已經算比較要求性能的 app 了吧?即便如此如果你看跑分時候的整個 SoC,utilisation 能有 50% 已經很不錯了。很多特定功能的 accelerator 其實都是閑置的,加上還有大量像 cache 這樣的結構導致 I/O 空閑(空閑就對了,越空閑越好)。人家沒活干就可以關電源了對吧?(關了意味著靜態功耗是 0 哦!)現實是 ELPG 已經普及多年,而且只是一種 PG。現如今好的低功耗設計已經在用 firmware 里的演算法區分 power state,根據特定硬體模塊使用的 cell、實時的電壓、頻率、溫度、工作狀態等信息計算出來下一刻的 state 以及對應的 perf/watt sweet spot。這樣硬體幾乎時刻處在最優狀態。相信 Apple A8 這種玩大遊戲都不怎麼 thermal throttling 的肯定下了不少功夫。其實基本原理還是 DVFS,但複雜很多。而且既然有了軟體參與,可以做很多更 fancy 的事情,比如 active power management。另外 PG 是有 overhead 的,power down 之前很多握手動作,硬體軟體要配合。電源也不是說關就關的,電壓要 staggered cut-off,否則 di/dt noise 大,功耗又上去了。。。又回到那個問題,多少粒度做一個 PG 才最合適?寫到這感覺又給驗證帶來不少麻煩,不敢繼續寫了。


大家說的比較好了,我再做些補充吧

------------------------------------------------------------------------------------------------------------------------------------------

首先是為什麼要降低功耗?第一,延長移動設備一次充電後能使用時間;第二,降低發熱;第三,也是為了安全考慮,因為P=UI,當前MOS電路電壓0.9V左右,所以當power幾十W時,需要幾十安電流,長時間就有可能燒壞晶元。 基於以上原因,我們要進行低功耗設計。

接著上圖,power consumption公式:

C_{L}: Switching Capacitance, E: Energy, Pavg: Average Power

有了power consumption公式,就能進行低功耗設計,基本思路如下圖:

具體Low power 方法如下:

  • Clock Gating:給每個模塊的clock加上gate,不需要時關閉gate, to minimize dynamic power

  • Power Gating:原理同上,minimize dynamic power and leakage power

  • Asynchronous circuit(非同步電路):對於asynchronous circuit大家第一反應好像是提高系統處理速度,其實因為asynchronous circuit需要使用多次handshake,處理速度未必比時序電路快多少。Asynchronous circuit另一個重要作用就是降低功耗,超過一半的power都是消耗在clock tree及其連接的flip-flop上,使用asynchronous circuit能消除clock,從而消除clock tree降低功耗;

  • 降低頻率:利用並行處理增加電路來降頻,犧牲area降低功耗;

  • 降低電壓:電壓受頻率影響,可以通過降低頻率來降低所需電壓。當頻率降低,電路switch速度降低,所以能有更多時間去進行一次充電,因此所需充電電壓降低(電壓越大充電速度越快)。同時可通過pipeline,分割combinational logic(組合邏輯),若同時保持frequency不變,circuit能有更多時間去進行一次充電,從而降低所需充電電壓。

  • DVFS:動態電壓頻率調整,動態調整頻率電壓到需要的值,避免浪費,從而降低功耗

  • GALS:全局非同步局部同步, 將系統劃分成不同的clock domain,每個domain使用合適的clk frequency,避免frequency浪費,同時提高系統速度,也方便進行clock gating.

  • 再另外就是系統設計時考慮優化,如減少circuit switch,用RAM代替register file,減少存儲器讀寫。

----------------------------------------------------------------------------------------------------------------------------

PS. 看到一個講RTL power reduction不錯的文章,傳上來跟大家分享下:

原文鏈接: 446 ASIC chip design engineers surveyed on RTL power reduction


看到@ 燙走大大神的答案,我就補充說明一下晶元前端設計中ICG和PG技術,供大家理解。

我們首先要知道晶元所有低功耗技術的基礎:就是MOS管的功耗從哪裡來?

MOS管的功耗分靜態功耗動態功耗。影響靜態功耗的主要因素有電壓和工藝,影響動態功耗的主要因素有電壓、頻率、翻轉率和翻轉因子(反轉因子一般有工藝決定)。他們之間的關係都有公式說明,抱歉我把公式早忘了·····

上面提到的影響動態功耗的一個重要因素:翻轉率。降低翻轉率,就可以動態功耗。D觸發器的翻轉是根據時鐘上升沿或者下降沿來翻轉的,那麼就有牛人想到如果在D觸發器需要保持不變的時候,我不讓時鐘翻轉,那麼D觸發器就不會翻轉,不就降低了翻轉率從而降低了動態功耗了么?

所以給時鐘做門控,在D觸發器該翻轉的時候打開門控,時鐘翻轉,D觸發器踩到有效的值翻轉;其他時候把時鐘門控住不讓它翻轉。這就是逆天的ICG技術:插入時鐘門控,恩英文名Integrated Clock Gating······

當然不單單是在一個個D觸發器前面插入ICG,在實際工程中也會給一個模塊做上ICG,當這個模塊不工作的時候門控住時鐘,降低動態功耗。現代低功耗設計的一個重要指標就是寄存器的ICG比例。

從上面提到的ICG原理,就可以類比出PG了,就是在一個模塊不需要工作的時候,將這個模塊的整個電源關掉,那麼久降低了電壓的影響因素,這樣不但降低了動態功耗還降低了靜態功耗簡直太完美了····

當然,現代工程上的低功耗技術不單單有這些,還有架構上的Multi_Vt、後端Cell選擇行的hvt等等。但這些都是根據降低靜態功耗和動態功耗的那些因素來的。所以那個公式很重要啊·······


樓上各位都說得差不多了,好像還沒有人提到我想到的東西,隨便說兩句吧。

CPU低功耗最重要的手段就是把時鐘砍掉,一了百了。大家都知道時鐘樹現在在晶元里佔了多大比例的面積,產生了多大的功耗,不要覺得可惜,全部拿走。有人會問,沒有時鐘CPU還怎麼跑?額,有種東西叫非同步設計,對你沒有聽錯,跟跨時鐘域絕對沒有關係,他的意思是無時鐘設計。我曾經在FPGA上實現過一顆無時鐘AVR子集處理器,速度時快時慢,很好玩,可能大家同步電路的理論一套一套的,但是非同步電路連一個「非門」都想像不出來吧。手機不方便打,國內這方面研究的人很少,先提示一些關鍵詞好了,c-element,dual-wire logic

非同步設計的噱頭一向是超低功耗,因為第一,沒有時鐘功耗。第二,沒有時鐘頻率壓力,電壓可以直逼MOS管域值,事實上加州理工曾經開發出用土豆發電驅動的非同步處理器(別每天就知道intel,AMD行不)。第三,沒有時鐘減少了各種性能冗餘,例如因為流水線均衡不好造成的性能浪費,因為保證穩定留下的時鐘餘量(沒有餘量你咋超頻的?)。在非同步CPU的世界裡,如果你完成一次加法需要1納秒,完成一次乘法需要8納秒,那麼你完成加法後完成乘法需要9納秒。而垃圾同步電路里,你完成兩次同樣操作花的時間由時鐘頻率決定,而時鐘頻率由最慢那種運算所花的時間決定,並且最低電壓也因此被同時決定,你說傻不傻,這種電路還想省功耗?


道歉下,因為我平常做的活都是算力是恆定來核算,所以,有誤算。三次方的說法是正確的。

這個算是接近我最近的工作了。

1,首先,為啥上面的答案都提到功耗和頻率的三次方增長?這個是不對的。

對於同一個晶元,功耗和頻率是正比的。

2,其次,作為一顆晶元,即使降低功耗,也不是降頻來實現。而是通過降低電壓來實現。

power = V^2/R 。同一晶元的R是可以算不變化的。

晶元的速度下降基本上和電壓降成正比。

所以,對於10%的性能差異,大約是30%的功耗節省。

3,假設上面功耗50%的差異是正確的,那麼還有20%的差異就是來自低功耗的設計了。

低功耗設計有很多種辦法,它們都有一個共同的特點:就是要在多種電路中選擇,沒法很快完成設計。

所以簡單回答問題:做成低功耗的CPU,在設計周期上比普通流程要時間長,而且因為低壓,

很可能晶元穩定性不如普通晶元(如果要穩定,也就需要更多時間。)這在目前以快速timing-to-market 為主要目標的晶元行業來說,是一個致命的缺點。(別人一年出一款手機,你3年才出

一款,你就會被市場淘汰,一樣的道理)

另外,還有一個快速降低功耗的辦法,就是走更高的工藝節點。這個受制於生產廠家工藝和投資。

下面有提到降低電壓的風險。對於一般來說,降低10%左右是問題不大的。


謝謝邀請,樓上已經有各位同仁給出一些回答了,我不是cpu的專家,只能試著就我所知回答一二,歡迎批評指正。

前面幾位的回答中已經從理論上指出頻率f(性能指標)和功率P(功耗)之間的邏輯關係,二者有著必然的衝突,不可能在相同條件下提高性能的同時降低功耗,不可能存在所謂全低功耗又全性能的產品。

實際的設計中一般是用盡各種辦法在不影響關鍵性能(critical function performance, critical path slack)或者高峰性能(peak usage performance)的情況下降低功耗。但具體到某個產品上具體的功率與性能的折算恐怕不是一兩個公式就能解決的問題,這要看產品設計中選用了哪些低功耗設計方法以及具體實現的方案。我沒有分析過i7的設計,所以無從置喙,只能講點理論的。

低功耗設計方法學本身就是個很大的專題。。。

從設計角度上低功耗設計與非低功耗設計有很大的差別,一般來說從系統級設計(包括軟體和硬體)開始就會有分叉,甚至指令集上也可能會有一定的差別。具體到晶元上又在前後端的設計流程中可以採用門控時鐘(ClockGating)、動態電壓頻率調整(DVFS),部分模塊電源關斷(Power ShutOff), 多電壓域多電源(Multi-Voltage/Multi-Supply,需要高性能的部件供給高電壓,不需要高性能的部件供給低電壓),襯底反偏(加反向電壓降低襯底漏電),多閾值單元(Multi-Vth cell)等等設計方法。。。

這個坑有點大。。。如果哪位對其中的那一點有興趣我們再討論吧。。。現在要去開會了


其他回答都非常專業,我沒有其他答主那麼多理論的知識,但是我覺得題主想要知道的可能是這個:我覺得低功耗CPU並沒有什麼特別的技巧,很有可能只是降低了頻率上限和限制了TDP而已。

下面列幾個數據,我手上只有一個6700T,標稱的TDP是35W,但是解鎖了TDP之後,用AIDA64,3.4GHz單烤FPU55W,2.8GHz單烤FPU32W,3.4GHz單烤CPU28W,2.8GHz單烤CPU17W。同樣是滿載(CPU佔用率100%)功耗差了近一倍。而最大功耗呢,3.4GHz烤FPU+Furmark烤顯卡,合計75W,說好的35W呢?

另外跑分時壓力可能並不像烤FPU那樣高,而且CPU還有可以短時突破TDP,比如6700T默認的短時功耗上限為43.75W。這樣一來跑分的差距就只有頻率的差距了。如果按照其他不少答案里都提到的三次方的說法計算(我也聽說過,但不知道對不對,反正先按這個算),6700四核睿頻3.7GHz,單烤FPU大約55*(3.7/3.4)^3=71W,不超頻的6700K四核4.0GHz,單烤FPU大約55*(4/3.4)^3=90W。

——以上內容純屬瞎掰,錯了我也不負責——

另外ThinkCentre M900 Tiny這麼個小機箱,設計給35W的CPU,居然能保持75W1分鐘不降頻,不愧是企業級的啊(雖然那個風扇速度飆起來絕對伺服器級的)


似乎大家都說的都差不多了。對於CMOS gate而言,power=leakage+dynamic+short circuit。

關於dynamic補充一點,他還與switching activity成正比,即P=a*C*f*V^2,大家都談到了如何通過降低C,f,V來優化power。同樣也可以通過限制a來達到優化power的目的。switching activity就是每個clock cycle gate 發生transient的幾率,同樣一個Boolean function用不同的circuit topology switching activity就會不同,比如用tree或者用chain結果可能就不盡相同。另外也可以通過減少resource sharing來限制switching activity,這個很好理解,sharing意味著使用更加頻繁,自然switching activity更高。還有就是合理使用bus encoding來優化,比如data bus上數據經常是random跳變,這時候可以使用bus invert encoding,這裡需要額外的encoder decoder logic。而address bus數據經常是遞增跳變的,我們可以採用gray encoding,00-&>01-&>11-&>10,每次遞增只有一個bit改變。

關於dynamic和leakage power在過去前者是dominant的,畢竟頻率在以前提高的很厲害,supply voltage也比較高,transistor比較大。隨著工藝的提高,voltage下降了,transistor也越來越小,現在20nm左右了吧。leakage power已經成為很重要的contribution。很籠統的講,衡量ASIC也好CPU也好,主要三個方面performance power area,即PPA。當我們說優化low power的時候總是有個tradeoff在裡面的。我就從這三個方面切入聊聊如何優化leakage power:

  1. multi supply voltage,這個就是對於critical path上的logic採用較高supply voltage以保證performance,我們知道工作頻率是由critical path決定的,雖然頻率不等同於performance,但對於電路而言critical path是重要的指標,而對於non-critical path,我們可以採用較低voltage,只要沒有timing violation就好了。這種情況是犧牲performance優化power。
  2. multi threshold voltage,這個原理類似,critical path上用low threshold的gate,non-critical上的全都換成high threshold的gate保證沒有timing violation。不過提高threshold意味著gate的delay會增大。也是犧牲performance優化power。另外高threshold的gate一般要比低threshold的要大,所以他也可能犧牲area。

以上方法一般在後端實現,在synopsys tool里可能就一條命令,但實際上沒有看上去那麼容易,因為你在改變其他non-critical path的時候可能會影響到critical path。演算法真的很重要。

前端針對low power的優化也有很多,例如前面有人提到的clock gating。還有就是把不用的電路關掉比如加sleep transistor不過需要額外的logic產生控制信號。在往上走architecture level的話,可以用parallel architecture+pipeline architecture,方向就是縮短critical path增加throughput為降低頻率提供可能,代價就是area overhead。

所以感覺對於CPU而言,PPA也是總是在互相trade off的,以從單核到雙核的演變為例:

比起一味的提高主頻帶來的功耗大幅上升,將頻率降低20%採用雙核,性能上升將近一倍而power幾乎沒變,犧牲的是area cost,複雜度大幅上升。但由於工藝的進步,area的增長又被很大程度上抵消了,這大概就是整體水平的提高吧。相同的道理,保持性能基本不變而去優化power,也只是trade off的一個方向吧,現在不是很多人在提硬體性能過剩嘛。一代一代的產品肯定會在進步的,個人感覺進步的方向取決於面向的application和市場吧。


降電壓,降頻率都是方法。另外在設計上,一般會把晶元分成幾個不同電源區域(power domain),以進行分別斷電。這種斷電將其對應區域的電路供電完全關斷,可以避免漏電流。當晶元處在不同工作模式時候,會把不需要運行的電路所在的電源區域關閉;當晶元在待機模式時,可能絕大部分模塊都是斷電的,只有一小部分控制模塊還在工作。就好像家裡,當家人聚在客廳看電視的時候,把卧室的電燈都關掉;當回到各自卧室時,把客廳的燈關掉。

除了分區域控制電源外,晶元的時鐘樹也有類似的關斷機制,在待機時(電源未關斷),減少晶體管的反轉,降低功耗。


經驗上來看,功耗隨頻率的三次方增長。你可以算一下。差不多吻合。

==========分割線=========

有人說是忽悠出來的,汗。。。我真的是在認真答題。你可以說我經驗不足,畢竟沒有專註20年,但是用忽悠這個詞實在是太不專業了吧。

P=C*f*V^2

頻率乘以2,你得把delay除以二。就得增加電壓,增加多少呢?你也承認了速度是隨電壓線性下降的。所以經驗上看是電壓要乘以2。所以P就乘以8了。前提是對於同一代工藝,相同的架構,單純改變頻率和電壓。要想打破這個定律,就得想別的辦法,改變架構啊什麼的,就不能單純改變頻率和電壓這麼簡單。

而且跑分也不是說跟頻率成正比。這個展開說就羅嗦了。

你所說的同一個晶元功耗隨頻率線性下降,這是因為你這個晶元已經生產出來了電壓定了,你把頻率降下去,timing constraint都符合,你不降低電壓,自然功耗線性下降。

我是從design角度說,你設計的晶元工作在極限頻率下的情況,你發揮出極限性能需要多大電壓。

既然是專業的不到一秒鐘就能想明白吧。

還有 @謝丹 提到「power = V^2/R」 我感到有些困惑,這不是靜態功耗的演算法么?數字電路動態功耗的表達式怎麼能沒有頻率項?我學的基礎不紮實,請賜教。


數字電路是容性元件。在同一代 CPU 里,功耗正比於主頻的三次方(因為電壓大致正比於頻率)。


為什麼我一個非專業人士會覺得和休眠中斷機制關係很大呢? 除了工藝和低電壓。 難道是我本末顛倒? 求專業人士給我解惑。另外樓上某個匿名人士你知道你的那句「畢竟沒有專註20年」很不友好嗎?


最簡單的辦法就是降頻


不需要抄課本,給個大家能聽懂的:

簡單講主要是兩點。

第一是工藝。同一個XX nm的工藝針對功耗還是性能做優化,生產出來的CPU功耗差別會很大的。Broadwell的TDP能低到5W,工藝也是有調整的。

第二是各種微架構的低功耗設計。這裡邊的原理繁多。比如分支預測器更准就能減少前端在wrong path上讀取指令和解析指令的功耗浪費。還有動態的調整電壓,給不用的模塊斷電等等。

在實際使用中能耗節省還是比較顯著的。缺點是很多軟體號稱支持多線程,實際上只有一個線程是瓶頸。這個時候單線程性能就重要了。低功耗CPU通常頻率較低,會犧牲單線程性能。


這個說起來有點複雜,簡單地說,總功耗=leakage+dynamic power,leakage和電壓、溫度、工藝相關,特別是溫度,近似是指數正相關。dynamic和電壓平方、頻率正相關,和utilization rate相關。前面貌似有人提到工藝?降低pitch size,會嚴重增大leakage,但也會大幅減小達到某performance需要的電壓,所以是一個tradeoff。


低電壓≈性能打折(實際使用打了不止10%)

主頻低≈響應速度慢(實際也是這樣子的)

基於上述問題,你還會選擇打過折扣的東西嗎?

節能可以,節約性能萬萬不可以!!


蟹妖 題主的問題和題目內容好像不太相符

標題的問題:

匿名三次方的那位給了詳細的低功耗設計原理。

功耗是動態功耗和靜態功耗的和值,靜態功耗跟工藝製程有關,動態功耗跟電源,切換頻率/翻轉率,時鐘頻率等等因素相關。

所以低功耗的實現基本上就是在這些因素上下工夫了,集具體的做法有:工藝升級,低壓設計和多電壓設計,門控時鐘,降頻,優化架構等

至於題目內容提到,個人認為跑分和頻率至少不是線性關係吧,其他回答介紹得比較詳細

粗略回答,不盡詳盡,題主別打我


厲害,補充幾個沒提到的:

RBB FBB

Near-threshold Voltage

Approximate computing Stochastic computing


專業知識不足 個人認為:粗暴降頻降tdp

原因:看最近的i7 6400t,加壓超頻完全可以到6700k的水平


個頭越大,飯量越大。

個頭越小,外設越大。

個數越多,總耗越高。


推薦閱讀:

為什麼gpu沒有像cpu那樣的二級緩存?
CPU和GPU的計算速度是如何計算的,一般軟體又如何佔用這些計算空間,1GHz是什麼概念?
智能手機的cpu性能 = 核心數 * 單核頻率?
會有i5 8400桌面U的藍天(神舟K680E)筆記本嗎?
為什麼14納米之後不研發13納米,而是以躍進的方式研發?

TAG:英特爾Intel | 中央處理器CPU | 晶元集成電路 | 數字電路 | 電腦硬體 |