優(yōu)化嵌入式軟件以提高電源效率:第 1 部分 – 測量電源
關(guān)于如何管理嵌入式軟件設(shè)計(jì)的電源要求的系列文章的篇。作者提供了有關(guān)在硬件、算法、數(shù)據(jù)流和內(nèi)存級別應(yīng)用優(yōu)化技術(shù)之前所需的功率測量的提示。
嵌入式項(xiàng)目的產(chǎn)品生命周期中重要的考慮因素之一是了解和優(yōu)化設(shè)備的功耗。手持設(shè)備的功耗非常明顯,需要電池供電才能保證充電之間的特定使用/空閑時(shí)間。其他嵌入式應(yīng)用,如醫(yī)療設(shè)備、測試、測量、媒
關(guān)于如何管理嵌入式軟件設(shè)計(jì)的電源要求的系列文章的篇。作者提供了有關(guān)在硬件、算法、數(shù)據(jù)流和內(nèi)存級別應(yīng)用優(yōu)化技術(shù)之前所需的功率測量的提示。
嵌入式項(xiàng)目的產(chǎn)品生命周期中重要的考慮因素之一是了解和優(yōu)化設(shè)備的功耗。手持設(shè)備的功耗非常明顯,需要電池供電才能保證充電之間的特定使用/空閑時(shí)間。其他嵌入式應(yīng)用,如醫(yī)療設(shè)備、測試、測量、媒體和無線基站,也對功耗非常敏感——因?yàn)樾枰芾砣找鎻?qiáng)大的處理器的散熱、電源成本和能源消耗成本——所以功耗是不容忽視的事實(shí)。
設(shè)置和保持功率要求的責(zé)任通常落在硬件設(shè)計(jì)人員的肩上,但軟件程序員有能力為功率優(yōu)化做出巨大貢獻(xiàn)。通常,軟件工程師對影響設(shè)備功耗的影響被忽視或低估。
本系列文章的目的是討論如何使用軟件來優(yōu)化功耗,從功耗的基礎(chǔ)知識(shí)開始,如何正確測量功耗,然后轉(zhuǎn)向化軟件功耗的技術(shù)在算法級別、硬件級別和數(shù)據(jù)流級別。這將包括各種技術(shù)的演示,以及某些方法如何以及為何有效降低功耗的解釋,以便讀者可以立即將這項(xiàng)工作應(yīng)用到他們的應(yīng)用程序中。
功耗基礎(chǔ)
一般而言,當(dāng)討論功耗時(shí),討論一個(gè)器件的四個(gè)主要因素是應(yīng)用、頻率、電壓和工藝技術(shù),因此我們需要了解為什么這些因素如此重要.
該應(yīng)用非常重要,以至于兩個(gè)手持設(shè)備的功率曲線可能不同,以至于使功率優(yōu)化策略完全相反。雖然我們稍后會(huì)解釋更多關(guān)于功耗優(yōu)化策略的信息,但基本概念已經(jīng)足夠清晰,可以在本節(jié)中介紹。
以便攜式媒體播放器與手機(jī)為例。便攜式媒體播放器需要能夠長時(shí)間以 100% 使用率運(yùn)行以顯示視頻(完整電影)、音頻等。我們稍后會(huì)討論這個(gè)問題,但此類的一般功耗配置文件設(shè)備的開發(fā)必須更多地關(guān)注算法和數(shù)據(jù)流功率優(yōu)化,而不是低功耗模式的有效使用。
將此與蜂窩電話進(jìn)行比較,蜂窩電話大部分時(shí)間都處于空閑狀態(tài),并且在通話期間用戶僅通話相對較小的時(shí)間百分比。對于這一小部分時(shí)間,處理器可能負(fù)載很重,執(zhí)行語音編碼/解碼和傳輸/接收數(shù)據(jù)。在剩余的通話時(shí)間里,手機(jī)的任務(wù)并不繁重,它會(huì)執(zhí)行諸如向蜂窩網(wǎng)絡(luò)發(fā)送心跳數(shù)據(jù)包和向用戶提供“舒適噪音”等程序,讓用戶知道手機(jī)在靜音期間仍然處于連接狀態(tài)。對于這種配置文件,功率優(yōu)化將首先集中在化處理器睡眠狀態(tài)以盡可能多地節(jié)省功率,然后是數(shù)據(jù)流/算法方法。
就工藝技術(shù)而言,當(dāng)前的嵌入式內(nèi)核基于
45 納米,不久的將來將采用 28 納米技術(shù),其尺寸比其前身 65 納米技術(shù)有所減小。這種更小的工藝技術(shù)提供的是更小的晶體管。更小的晶體管消耗更少的功率并產(chǎn)生更少的熱量,因此與它們的前身相比具有明顯的優(yōu)勢。
較小的工藝技術(shù)通常還可以實(shí)現(xiàn)更高的時(shí)鐘頻率,這顯然是一個(gè)優(yōu)勢,可以提供更多的處理能力,但更高的頻率和更高的電壓是以更高的功耗為代價(jià)的。電壓是其中明顯的,正如我們在物理學(xué)(和 EE101)中了解到的那樣,功率是電壓乘以電流的乘積。因此,如果設(shè)備需要大電壓供應(yīng),功耗增加是不可避免的。
在繼續(xù)討論P(yáng)=V*I的主題時(shí),頻率也是該等式的直接部分,因?yàn)殡娏魇菚r(shí)鐘速率的直接結(jié)果。我們在物理和 EE101 中學(xué)到的另一件事:當(dāng)在電容器兩端施加電壓時(shí),電流將從電壓源流向電容器,直到電容器達(dá)到等效電位。
雖然這是一種過度簡化,但我們可以想象內(nèi)核中的時(shí)鐘網(wǎng)絡(luò)以這種方式消耗功率。因此,在每個(gè)時(shí)鐘邊沿,當(dāng)電勢發(fā)生變化時(shí),電流會(huì)流過器件,直到達(dá)到下一個(gè)穩(wěn)定狀態(tài)。時(shí)鐘切換得越快,流過的電流就越多,因此更快的時(shí)鐘意味著嵌入式處理器消耗的功率更多。根據(jù)設(shè)備的不同,時(shí)鐘電路負(fù)責(zé)消耗 50% 到 90% 的動(dòng)態(tài)設(shè)備功率,因此控制時(shí)鐘是這里將重點(diǎn)討論的主題。
功耗類型
總功耗包括兩種功耗:動(dòng)態(tài)和靜態(tài)(也稱為靜態(tài)泄漏)功耗,因此總器件功耗計(jì)算如下:
P總計(jì) = P動(dòng)態(tài) + P靜態(tài)
正如我們剛才所討論的,時(shí)鐘轉(zhuǎn)換是動(dòng)態(tài)消耗的很大一部分,但是這個(gè)“動(dòng)態(tài)消耗”是什么?基本上,在軟件中我們可以控制動(dòng)態(tài)消耗,但我們無法控制靜態(tài)消耗。
靜態(tài)功耗 泄漏消耗是設(shè)備消耗的功率,與運(yùn)行的任何活動(dòng)或任務(wù)無關(guān),因?yàn)榧词乖诜€(wěn)定狀態(tài)下也存在低“泄漏”電流路徑(通過晶體管隧道電流、反向二極管泄漏等)。 ) 從設(shè)備的 Vin 到地。影響漏電消耗的因素只有電源電壓、溫度和工藝。
我們已經(jīng)在介紹中討論了電壓和過程。就溫度而言,理解為什么熱量會(huì)增加漏電流是相當(dāng)直觀的。熱量增加了電子載流子的遷移率,這將導(dǎo)致電子流量增加,從而導(dǎo)致更大的靜態(tài)功耗。由于本章的重點(diǎn)是軟件,靜態(tài)功耗理論到此結(jié)束。
動(dòng)態(tài)功耗 嵌入式處理器的動(dòng)態(tài)功耗包括設(shè)備主動(dòng)使用內(nèi)核、內(nèi)核子系統(tǒng)、外設(shè)(如 DMA、I/O(無線電、以太網(wǎng)、PCIe、CMOS 相機(jī))、內(nèi)存以及 PLL 和時(shí)鐘)所消耗的功耗. 在低級別,這可以解釋為動(dòng)態(tài)功率是開關(guān)晶體管對電容充電和放電所消耗的功率。
隨著我們使用更多的系統(tǒng)元素、更多的內(nèi)核、更多的算術(shù)單元、更多的內(nèi)存、更高的時(shí)鐘速率或任何可能增加晶體管開關(guān)量或它們開關(guān)速度的任何東西,動(dòng)態(tài)功耗也會(huì)增加。動(dòng)態(tài)消耗與溫度無關(guān),但仍取決于電壓供應(yīng)水平。
值、平均值、壞情況和典型值。在測量功率或確定系統(tǒng)的功耗時(shí),需要考慮四種主要的功率類型:功率、平均功率、壞情況功耗和典型功耗。
和平均功率是通用術(shù)語,用于描述功率測量本身,而不是軟件或其他變量對設(shè)備功耗的影響。
簡單地說,功率是在一段時(shí)間內(nèi)測得的瞬時(shí)功率讀數(shù)。這種測量有助于顯示設(shè)備保持適當(dāng)水平的信號完整性(可靠運(yùn)行所需)所需的去耦電容量。
平均功率在這一點(diǎn)上很直觀:技術(shù)上是一段時(shí)間內(nèi)消耗的能量除以該時(shí)間(功率讀數(shù)隨時(shí)間平均)。工程師通過計(jì)算隨時(shí)間消耗的平均電流并使用它來計(jì)算功率來做到這一點(diǎn)。平均功率讀數(shù)是我們重點(diǎn)優(yōu)化的內(nèi)容,因?yàn)檫@是電池或電源必須能夠?yàn)樘幚砥魈峁┒嗌俟β什拍茈S時(shí)間執(zhí)行應(yīng)用程序的決定性因素,并且這也用于了解熱量分布裝置。
壞情況和典型功率值均基于平均功率測量。壞情況功率或壞情況功率曲線描述了設(shè)備在給定時(shí)間段內(nèi)以 100% 使用率消耗的平均功率。百分之一百的使用率是指處理器同時(shí)利用數(shù)量的可用處理單元(內(nèi)核中的數(shù)據(jù)和地址生成塊、加速器、位掩碼等)、存儲(chǔ)器和外設(shè)。這可以通過將內(nèi)核置于一個(gè)無限循環(huán)中來模擬,每個(gè)循環(huán)執(zhí)行 6 條或更多指令(取決于內(nèi)核中可用的處理單元),同時(shí)具有多個(gè) DMA 通道連續(xù)讀取和寫入內(nèi)存,以及外圍設(shè)備不斷發(fā)送和接收數(shù)據(jù)。
在實(shí)際系統(tǒng)中,設(shè)備很少會(huì)消耗壞情況下的功率,因?yàn)閼?yīng)用程序不會(huì)長時(shí)間使用所有處理元件、內(nèi)存和 I/O,如果有的話。通常,設(shè)備提供許多不同的 I/O 外圍設(shè)備,盡管只需要其中的一部分,并且設(shè)備內(nèi)核可能只需要在一小部分時(shí)間內(nèi)執(zhí)行繁重的計(jì)算,只訪問一部分內(nèi)存。然后,典型功耗可能基于假設(shè)的“一般用例”示例應(yīng)用程序,該應(yīng)用程序可能使用處理器可用硬件組件的 50% 到 70%。這是軟件應(yīng)用程序的一個(gè)主要方面,我們將利用它來優(yōu)化功耗。
測量功耗
測量功率取決于硬件:一些嵌入式處理器提供內(nèi)部測量功能;處理器制造商也可能提供“功率計(jì)算器”,提供一些功率信息;有許多電源控制器 IC 提供不同形式的功率測量功能;一些稱為 VRM(穩(wěn)壓器模塊)的電源控制器具有這些內(nèi)部功能,可以通過外圍接口讀??;,還有將電流表串聯(lián)到電源的老式方法。
使用電流表測量功率。“老式”方法是通過使用串聯(lián)連接到電流表正極端子的外部電源來測量功率,電流表通過負(fù)極連接器連接到 DSP 設(shè)備電源輸入
請注意,圖 13.1 中顯示了三種不同的設(shè)置,它們都是針對單個(gè)處理器的。這是因?yàn)樘幚砥麟娫摧斎胧歉綦x的,通常在內(nèi)核(可能有多個(gè)電源)、外設(shè)和內(nèi)存之間。這是通過硬件設(shè)計(jì)完成的,因?yàn)樵O(shè)備的不同組件具有不同的電壓要求,這有助于隔離(并終優(yōu)化)各個(gè)組件的電源配置文件。
為了正確測量功耗,必須正確隔離每個(gè)組件的電源,在某些情況下可能需要修改電路板、特定跳線設(shè)置等。理想的情況是能夠?qū)⑼獠侩娫?電流表組合連接為盡可能靠近處理器電源輸入引腳。
或者,可以測量與電源和處理器電源引腳串聯(lián)的(分流)電阻兩端的壓降。通過測量電阻兩端的電壓降,只需計(jì)算 I = V/R 即可找到電流。
測量半個(gè)傳感器 IC 的功率。為了簡化高效的功率測量,許多嵌入式供應(yīng)商正在構(gòu)建使用基于霍爾效應(yīng)的傳感器的電路板。當(dāng)霍爾傳感器放置在設(shè)備電源電流路徑中的電路板上時(shí),它會(huì)產(chǎn)生一個(gè)電壓,該電壓等于電流乘以某個(gè)具有偏移的系數(shù)。
使用 VRM IC。,一些電壓調(diào)節(jié)器模塊電源 IC (VRM) 用于將大輸入電壓分成多個(gè)較小的電壓,以提供不同電位的各個(gè)電源,測量電流/功耗并將值存儲(chǔ)在寄存器中以供讀取用戶。通過 VRM 測量電流不需要任何設(shè)備,但這有時(shí)會(huì)以精度和實(shí)時(shí)測量為代價(jià)。
除了確定一般測量功率的特定方法外,還存在不同的方法來測量動(dòng)態(tài)功率與靜態(tài)泄漏消耗。靜態(tài)漏電消耗數(shù)據(jù)有助于為我們的低功耗預(yù)期奠定基礎(chǔ),并了解實(shí)際應(yīng)用消耗的功率與設(shè)備空閑時(shí)消耗的功率。然后我們可以從我們測量的總功耗中減去它,以確定處理器正在拉動(dòng)的動(dòng)態(tài)功耗,并努力將其化。行業(yè)中有各種工具可以在這方面提供幫助。靜態(tài)功率測量當(dāng)器件處于低功耗模式時(shí),通??梢詼y量處理器的泄漏消耗,假設(shè)該模式關(guān)閉了所有子系統(tǒng)和外設(shè)的時(shí)鐘。如果時(shí)鐘在低功耗模式下未關(guān)閉,則應(yīng)旁路 PLL,然后關(guān)閉輸入時(shí)鐘,從而關(guān)閉所有時(shí)鐘并從靜態(tài)泄漏測量中消除時(shí)鐘和 PLL 功耗。
此外,應(yīng)在不同溫度下測量靜態(tài)泄漏,因?yàn)樾孤?huì)隨溫度而變化?;跍囟龋ê碗妷海﹦?chuàng)建一組靜態(tài)測量值可以提供有價(jià)值的參考點(diǎn),用于確定應(yīng)用在這些溫度/電壓點(diǎn)實(shí)際消耗了多少動(dòng)態(tài)功率。
動(dòng)態(tài)功率測量功率測量應(yīng)區(qū)分設(shè)備中每個(gè)主要模塊的貢獻(xiàn),以便為工程師提供有關(guān)特定配置對系統(tǒng)功耗有何影響的信息。如上所述,通過測量總功率(在給定溫度下)然后使用上面的初始靜態(tài)測量值減去該給定溫度下的泄漏消耗,可以簡單地找到動(dòng)態(tài)功率。
初始動(dòng)態(tài)測量測試包括運(yùn)行睡眠狀態(tài)測試、調(diào)試狀態(tài)測試和 NOP 測試。睡眠狀態(tài)和調(diào)試狀態(tài)測試將使用戶深入了解在系統(tǒng)中啟用某些時(shí)鐘的成本。NOP 測試,就像在 NOP 命令循環(huán)中一樣,主要使用設(shè)備的獲取單元時(shí),將為您的內(nèi)核消耗提供基線動(dòng)態(tài)讀取,但不使用算術(shù)單元、地址生成、位掩碼、內(nèi)存管理等。
在比較具體的軟件功耗優(yōu)化技術(shù)時(shí),我們比較每種技術(shù)前后的功耗數(shù)字,以確定該技術(shù)的效果。
這種強(qiáng)大的測試用例生成可以通過使用高端分析器分析代碼性能來完成,以獲得對使用的處理元素和內(nèi)存百分比的一些基本了解。我們可以通過在標(biāo)準(zhǔn)工具 IDE 中創(chuàng)建一個(gè)新項(xiàng)目來演示這一點(diǎn)(有許多可用的) 啟用探查器,然后編譯并運(yùn)行項(xiàng)目。該應(yīng)用程序?qū)念^到尾運(yùn)行,此時(shí)用戶可以選擇一個(gè)分析器視圖并獲取任意數(shù)量的統(tǒng)計(jì)信息。
使用相關(guān)數(shù)據(jù),例如使用的 ALU 百分比、使用的 AGU、代碼熱點(diǎn)和正在訪問的內(nèi)存知識(shí),我們可以大致了解我們的代碼將在哪里花費(fèi)多的時(shí)間(和消耗多的功率)。我們可以使用它來生成一個(gè)在無限循環(huán)中運(yùn)行的基本性能測試,使我們能夠分析重要代碼段的平均“典型”功率。
例如,使用兩個(gè)主要函數(shù):func1 和 func2。剖析示例代碼,我們可以從圖 13.3中看出 ,絕大多數(shù)周期都被 func1 例程消耗了。
該例程位于 M2 內(nèi)存中,并從可緩存的 M3 內(nèi)存中讀取數(shù)據(jù)(這意味著可能導(dǎo)致對 L2 和 L1 緩存的寫回訪問)。通過使用分析器(如圖 13.4 所示),可以提取有關(guān)百分比 ALU 和百分比 AGU 的信息。
我們可以通過將代碼變成無限循環(huán)、調(diào)整 I/O 并在相同的優(yōu)化級別編譯,并驗(yàn)證我們看到相同的性能分解來有效地模擬這一點(diǎn)。另一種選擇是用匯編代碼編寫示例測試,以強(qiáng)制某些 ALU/AGU 使用模型與我們的配置文件相匹配,盡管這不是那么,并且使測試單個(gè)優(yōu)化更加困難。
然后我們可以設(shè)置一個(gè)斷點(diǎn),重新運(yùn)行我們的應(yīng)用程序,并確認(rèn)設(shè)備使用配置文件與我們的原始代碼一致。如果不是,我們可以調(diào)整編譯器優(yōu)化級別或我們的代碼,直到它與原始應(yīng)用程序匹配。
這種方法可以快速有效地測量各種負(fù)載的功耗,如果我們通過正確使用分析器來鏡像原始應(yīng)用程序,這應(yīng)該可以解決停頓和其他管道問題,因?yàn)榉治銎魈峁┝擞嘘P(guān)總周期數(shù)以及指令和 VLES 利用率的信息。通過無限循環(huán),測試變得更加容易,因?yàn)槲覀冎皇潜容^優(yōu)化和非優(yōu)化代碼的穩(wěn)態(tài)電流讀數(shù),希望獲得更低的數(shù)字。我們可以使用它來測量許多指標(biāo),例如一段時(shí)間內(nèi)的平均功率、每條指令的平均功率、每個(gè)周期的平均功率以及一段時(shí)間 t 內(nèi)以焦耳為單位的能量(功率 * 時(shí)間). 為了測量特定算法和節(jié)能技術(shù),我們將使用類似的方法形成小例程,然后優(yōu)化和測量隨時(shí)間推移的節(jié)能情況。
使用這些工具將能夠有效地測量和確認(rèn)本文下一節(jié)中共享的知識(shí),其中涵蓋了用于優(yōu)化功耗的軟件技術(shù)。