既快又准並且低開銷!一作親解MICRO 2021最佳論文:一種自動化功耗模擬架構


由於摩爾定律效用放緩,在設計芯片時,伴隨着性能的提升,功耗也與日俱增。為了更加了解功耗,就要對出現的各種問題進行模擬,而真實模擬代價太大。就在這時,APOLLO應運而生,在芯片設計和運行時期,都能夠對功耗進行既快又準確地預測。
作者 | 謝知遙
整理 | 王曄

編輯 | 青暮

第54屆IEEE/ACM計算機體系結構頂會MICRO 2021於2021年10月16-20日作為全球在線活動舉辦。希臘雅典作為主辦城市進行轉播。

IEEE/ACM 微體系結構國際研討會(IEEE/ACM International Symposium on Microarchitecture)是介紹和討論先進計算和通信系統創新微架構思想和技術的主要論壇。本次研討會彙集了與微架構、編譯器、芯片和系統等相關領域的研究人員,就傳統微結構主題和新興研究領域進行技術交流。

來自杜克大學的謝知遙介紹了他們團隊的最新工作《 APOLLO: An Automated Power Modeling Framework for Runtime Power Introspection in High-Volume Commercial Microprocessors 》,該論文獲得了MICRO2021最佳論文獎(Best Paper Award)。

謝知遙是杜克大學計算機工程專業的博士生、 致力於EDA/VLSI 設計機器學習算法,擅長機器學習、電子設計自動化、VLSI設計、編程。

他的導師是陳怡然教授。陳怡然教授是杜克大學電子與計算機工程系教授,計算進化智能中心主任,致力於新型存儲器及存儲系統,機器學習與神經形態計算,以及移動計算系統等方面的研究。

他們的工作APOLLO是針對於現代化的商業CPU或Micro processors所研發的一個自動化的功耗模擬架構(Power-Modeling Framework)。

AI科技評論有幸邀請到謝知遙,為我們親自解讀這篇論文的來龍去脈。

以下,AI科技評論對謝知遙的分享進行了不改變原意的整理:



1

原因及目的

該工作是在CPU設計或運行中所遇到的現實性問題的基礎之上進行研究的。

首先第一個也是最大的問題。在CPU設計時期需要對power有更多的了解,而我們現在對power了解是不夠的。這取決於設計時的trade off,即權衡或取捨。芯片設計最大的一個trade off是performance and power,即要好的性能,還是要低的功耗。

設計師在設計每一代芯片時都要提升芯片的性能,通常反應在提升IPC或者最大頻率等方面。在過去幾十年間,因為摩爾定律,性能的提升較為容易。

但由於摩爾定律效用放緩,導致性能提升變得不再那麼容易。在這種情況下,設計師就需要在微架構上有更多的創新,但在這個過程中,伴隨運行速度的增加,功耗往往也不斷增加。

另一方面輸電資源(power delivery sources)技術的發展非常緩慢。首先輸電線上的電阻很大,導致不能提供足夠的power。另外封裝技術有限,封裝上面的電感(inductance)會導致無法提供所需的快速變化的電流或power。

power和電流通常成正比,因此很難得到一個快速變化的電流。要一瞬間電流突然增大,只能慢慢的增大,不能一瞬間增大那麼多。

結合兩方面因素,促使我們不僅想要在設計時對功耗有更多的了解,而且在運行中要對power進行管理,而不能出現很多不想要的情況。

運行管理中最常見問題在於peak power mitigation。最大功耗有一個閾值,如果超過了閾值,就需要進行管理,使功耗壓降低,否則會出現一系列的問題。管理power的峰值通常要準確實時計算power。在CPU運行時,根據power的計算減少給定CPU的指令,隨之功耗就會降低。

但現在在設計CPU時,很多情況下都是人工在芯片上找能夠模擬功耗的信號,這種方式不僅困難而且非常不準確。

此外,更重要的一個問題是快速電流的變化(或者power的變化)會導致一個很快的電壓降叫做voltage-droop。

圖註:電流的快速變化導致的電壓的急劇變化

如圖所示,起初電壓保持不變,假設這一段時間CPU處於睡眠狀態,沒有執行任何指令。然後突然運行一個很大的程序,此時功耗和電流會突然增大。di/dt(即電流對時間求導)電流的變化量也會變得非常大。此時voltage-droop從1伏變成0.9伏,這會造成很多問題。要避免這個問題也並非容易,由於發生時間非常短暫,因此對應的處理策略也必須要在極短的時間內將其控制住。

既然輸電上存在這麼多問題,因此在芯片設計時,就要充分模擬芯片CPU上會遇到的各種問題。但如果要做到真實模擬代價是非常大。

工業界標準的 Power模擬流程

上圖所示的模式是非常準確的,但可能需要花費幾周時間,並且非常昂貴,反覆花幾周時間進行模擬是非常困難的。即使花費了幾周時間,拿到了準確的power,但得到的power是平均power,這中間可能存在幾千甚至幾百萬個周期,一個平均power是不夠用的。我們還關心最大power、一瞬間的最大power、快速變化時power的變化等等。

不同類型的power simulation的方法

Netlist Simulation是上述介紹的最準確的,但可能需要花費幾周時間。APOLLO位於藍點位置,在保持速度快的同時,準確率很高(雖然不是最準確但準確率可達90%)。



2

APOLLO優異性質概括
  • 首先,它在設計和運行時,都能夠對power進行既快又准地預測。在商業化的CPU上能夠做到90%~95%的正確率,我們把它在Neoverse N1 CPU上進行實現,我們發現它面積的overhead只有0.2%。

  • 其次,對於任何一個設計該模型都可以自動生成。

  • 不僅如此,每個cycle都能得到一個準確的power,時間分辨率非常好。

  • 而且我們認為APOLLO模型可以延展到更高層次的模擬。

預測結果實例

我們在Neoverse N1商業化的CPU上面,運行了一個workload。這個workload非常大,一共有1700萬個時鐘周期。我們對這1700萬個時鐘周期的每一個cycle都進行預測,上圖展示的是4萬個。在工業界用傳統的方法可能需要兩個星期的時間,而用我們的方法的,幾分鐘就可以做完。

準確率高、速度快的同時,對存儲的要求減少了100倍以上,只需要存我們感興趣的信號,這也是一個非常大的提升。保持這樣的速度、準確度,得到每個周期的power這在之前的工作中幾乎是做不到的。



3

APOLLO的組成部分

圖註:APOLLO的組成部分

APOLLO由兩大部分組成。

在設計時,它是一個又快又準的 power 模型。如圖所示假如對信號模擬追蹤,所有信號都在不停的運動,根據這些可以得到一個準確的power估計。

在CPU運行時,它就會成為一個片上功率表(on-chip power meter)。我可以直接把它做的到CPU裡面變成CPU的一個模塊,相當於一個監測工具,可以每時每刻提供CPU的功耗。



4

研究方法
如圖,對於任何一個design我們得到的都是RTL level。然後運行一些程序,就會得到一個fsdb/VCD 文件,得知每個信號在每一個周期的一些信息,這是最基本的input。

基於此,每個cycle就可以進行這樣處理。每個cycle中,對每個信號(ABCDE)用1表示它翻轉了,0表示沒有翻轉,要翻轉就肯定會有功耗。這是cycle0,同樣可以得到cycle1、cycle2等等,翻轉活動就是模型的輸入,然後來預測功耗。

如圖,得到的矩陣的寬度是M, M表示design裡面一共有M個signal,因此一共有M個輸入,每個cycle就是一個sample。接着每個cycle都會做power simulation,得到最準確的power(p0、p1、p2……),將此作為一個vector。vector也是從p0開始的準確的功耗,有x、y,有輸入有label,就可以訓練一個machine learning模型,得出F(x)=y。

我們想要做的是訓練出既準確又效率高的F。強調一點,我們的工作始終主要關注的是動態的power。由於當代CPU都非常複雜,並不是那麼容易做,因此我們就要簡化F模型。

核心思想

開始我們認為一個線性的模型,就已經足夠提供既準確又快的power的估計。我們對動態的功耗進行模擬,計算的是電容的充放電,把所有的充放電的電容加起來得到總電容,然後乘以電壓的平方,就是cycle的功耗。因此它本身就是一個線性模型,我們認為當然也可以用一個線性模型來模擬總功耗的過程。

但是即使我們有一個線性模型,但這個線性模型還是M個input,M依然非常大,還是很複雜。

我們的第二個核心的思想是:一小部分cycle就能夠提供足夠的信息。因為很多信號都是相關的並不是完全相互獨立,很多信號甚至完全一樣。只需要看一部分最有代表性的信號,就足夠作為模型的輸入。

因此我們從M個信號中自動選取Q個有代表性的信號,我們把它叫做power proxies,然後讓Q遠小於M,這樣模型就會變得很簡單。

具體做法

我們用一種叫做剪枝的算法——pruning,比如開始是一個linear model,在 Linear model上面還要加一個penalty term,這個penalty term會懲罰所有的weight,如果weight過大,loss就會增加,使weight減少。這樣就可以讓絕大部分weight變為0,剩下則是不是0的weight,我認為這些不是零的weight很重要。

即使加了penalty之後,weight還必須要不是0,將不是0的weight保留,對應的信號就是要選取的信號。

在選取的過程中,會加一個非常強的penalty strength,使99.9%的weight全都變成0,這樣可以使選取的信號最具有代表性。對penalty加的是一個叫做Minimax concave penalty(MCP),用於剪枝算法。

選取有代表性的信號,基於這些信號,重新訓練一個線性的模型,這個線性的模型就是最終的模型。這是第一步,也是最重要的一步。

選用 MCP算法的原因

在剪枝的時候,選用的是 MCP算法,而不是很多人熟悉的Lasso或是其它的。是因為要讓選取的Q遠小於M,penalty實際上就要加的非常大,因此懲罰很大。

圖註:對不同的weight,Lasso和MCP的懲罰

如圖所示,Lasso很簡單,它是一視同仁的,weight越大,懲罰就越大。如果這樣就相當於所有的weight都在被懲罰。這會導致,在懲罰性很大的情況下,即使那些不是0的weight,也會被壓在一個非常小的值,模型就會變得不準確。由此基於一個不準確的模型,選出來的信號我們認為也是不準確的。

為了避免這種情況,所以我們使用了MCP。而使用MCP,當weight大到一定程度時,不會繼續增大penalty。用MCP訓練的模型,在整個訓練過程中準確率都是比較高的,基於準確的模型做的剪枝,我們認為也是比較準確的。

另外我們觀察到MCP選擇的信號,彼此之間的相關性更小,這說明我們選的信號是有代表性的。

全自動機器生成的基本算法

除了APOLLO的算法之外,我們還有一套算法來提供訓練數據來源。我們用純機器自動生成很多workload,基於這些workload,來生成上述的input x 、label y等等,workload的生成有一套遺傳算法。

開始有一些隨機 workload,由於是隨機生成的,因此它的功耗比較低。我們選取裡面功耗高的做crossover或mutate,這就是遺傳算法基本操縱。然後生成一些更高功耗的workload,一代又一代功耗會不斷增加。

最後生成的workload,我們把它叫做power virus,它們的功耗非常高。這樣我們就既得到了低功耗的workload,又有高功耗的,把兩個摻在一起,訓練數據就很全面了,就能夠很準確的訓練模型,這是我們全自動機器生成的一個基本算法。
實驗結果

首先我們的實驗是基於Neoverse N1和Crotex A77這兩個CPU來做的,因此我們既測了服務器端,又測了移動端的CPU,讓保證它在所有的CPU上都有很好的表現。

測試的時候也需要workload,這些workload是工程師手動寫出來的,非常具有代表性。我們選選擇了12個,既有有低功耗也有高功耗,還有快速變化的和保持不變的,覆蓋了各種類型。

預測的結果:粉色的是真實的值,綠色的是預測的值
結果表明,預測的結果和真實的值具有很明顯的相關性,匹配度很高。

我們測了它的error,MAE(mean absolute error)和RMSE(這兩個值是越小越好)小於10%,(該值越大越好)高於0.95,說明準確率非常高。

同時我們計算了每個workload的MAE,發現所有類型的workload的MAE都少於10%,這說明了它的準確性。並且即使是7%的錯誤,也是由於清晰度太高,導致每個cycle之間有一個小錯誤這個是很難避免的。如果從一個更大的measurement window來算平均power,就會更準確。

事實上,APOLLO可以對任何一個measurement window進行計算,而不僅僅是 per-cycle。

如上圖,如果現在不需要per-cycle,只要一個average power ,over128個cycle,在這種情況下,只需要70個input,就可以做出一個準確的預測。預測結果error小於3%,如果能夠容忍一個更大的measurement window,準確度將會幾乎接近100%,因此在降低條件的情況下,它的性能可以有進一步的提升。

將APOLLO植入CPU

考慮到它的input數量少,同時模型簡單、準確度高,因此我們要把它做到CPU裡面。

首先有Q個輸入作為input,輸入全都是0或者1,因此這個模型裡面不需要乘法器,這樣可以節省很大一筆開銷。

同時weight作為quantization,不需要64位的weight那麼准,只要需要十幾位的weight,就可以很準確,因此開銷又變得小了。

基於這個模型,用c++就可以很簡單實現這個OMP模型,然後基於 C++的template,進行Hign-Level Synthesis,獲得 design的RTL,如果這個RTL 可以和CPU的RTL合在一起,然後我們去做 tape out,這是一個最基本的思路,而流程本身也很簡單。

同時基於C++的硬件設計,還可以verifying,可以驗證硬件設計也是準確的。

上面的圖是APOLLO在軟件上運行的結果。下面是硬件設計做的verification

如圖所示,驗證的結果兩張圖幾乎是沒有任何區別的,計算後區別小於0.02%,肉眼幾乎不可見。

但注意下面這張圖首先沒有乘法器,另外它的weight現在不是64位,只有11位。在硬件已經優化的情況下它幾乎沒有準確率的損失,這說明硬件設計非常好。

硬件一定有trade off,在accuracy和hardware cost之間尋求一個平衡,因此我們計算了一下它到底是如何trade off的,然後來輔助我們設計一個這樣的模塊。

如圖所示,我們用y軸來表示它的accuracy in error,然後用這個顏色來表示它在硬件上的代價(area overhead),即佔CPU比例是多少。

首先可以改變input的數量,另外一方面可以改變 quantization bits,我們改變這兩個值觀察它對accuracy和area overhead的trade off。

如上圖,測量的結果中每個點都會有一個accuracy對應的hardware cost。當W繼續小於10時,area會飛快的上升,即quantization 加的太大了,已經使原來的X扭曲掉了。所以quantization不能加的過大,並且W沒必要大於12。因此我們策略是保持 W在10~12之間。

如果需要不同的solution,可以改變Q。比如我們根據這個策略,我們現在選到1個solution。如上圖,OPM的Q是159,weight是11位,error大概是10%,在Neoverse N1上它的area overhead小於0.2%。所以我們認為它的實現代價非常低,並且準確率足夠高,因此我們認為這是一個非常不錯的 solution。

所以到現在我已經介紹了它在設計時期,作為一個軟件的準確率,和它在片上作為一個硬件的準確率以及實現的代價。



5

潛在應用

它開啟了一些新的應用領域。舉兩個例子:

CPU中選取的信號的來源

在設計時期它可以給設計師很多反饋,如上圖可以幫助設計師來了解 CPU裡面功耗的組成。

為了進一步利用這個性質,我們可以允許CPU的設計師或架構師,自己限制來源範圍,從裡面找最有代表性的信號等,可以使設計師更容易理解這些信號。通過這種方法,這個模型的可解釋性就變得更強,然後更能夠輔助設計師來進行設計的決策。這當然這個是有一定代價的,如果限制了輸入,它的準確率會有一定的下降,但下降非常少。

那麼另外一個應用是上面所講的voltage-droop電壓降的問題,面對這個問題也可以用OMP來解決。

上圖是用OPM來預測di/dt的值,橫坐標是我們測到的真實值,縱坐標是預測的值。當di/dt是正的時候,電流和power需求在不斷的增加,那麼這個時候有一個voltage-droop,電流需求增加,它的電壓就會突然下降。當然,如果電流需求突然減少,它電壓就會突然上升。

相當於我們有四個象限,如圖兩個藍色區域預測和實際值完全相反,這兩個是錯的預測。而這兩個錯的預測的區域,幾乎沒有點是落在這個地方,就說明預測錯的很少。而在預測對的區域裡面,我們的預測非常準的。

因此我們的OPM可以在實際芯片運行的時候來指導我們去處理這些情況,因為它可以準確的預測。

中間很多的這些點,大家可能認為它的correlation看起來並不好。但請注意,我們的橫軸和縱軸都是log scale,並不是linear scale,其實中間這個點它的值是非常小的,我們只是主動的去把它放大,把這些correlation不好的地方讓大家去看清楚一些,實際上這些值非常小,所以實際上運行的時候影響是不大的。這點我們也可以從pearson simulation看出來,pearson只有0.946,這說明我們的預測是非常準確的,因此我們認為我們的這個模型可以用於voltage-droop的motivation。同時大家注意這是CPU內部主動避免這個行為,相當於是預防。因此就比再加一套電路去阻止它會有效得多。



6

總結
  • 快速的power-madelling對設計和部署CPU產生了實質性的影響

  • 該方法與micro-architecture無關,且是自動化的,可以擴展到多個計算解決方案--CPU、GPU、NPU,甚至是子塊。

  • 潛在應用範圍:從多核SoC中的power/thermel管理擴展到CPU驅動的主動降壓緩解。

  • ML/Data-Science方法是在設計中的許多方面擁有巨大潛力。

雷峰網



想在手機閱讀更多程式設計資訊?下載【香港矽谷】Android應用
分享到Facebook
技術平台: Nasthon Systems