嵌入式系統(tǒng)中軟件優(yōu)化的低功耗研究
引言 從20世紀70年代世界上第一個為嵌入式應用而設計的微處理器intel 4004誕生以來,嵌入式系統(tǒng)已經(jīng)發(fā)展了30多年。近幾年,嵌入式系統(tǒng)(embedded system)已經(jīng)成為電子信息產(chǎn)業(yè)中最具增長力的一個分支。隨著手機、pda、gps、機頂盒等新興產(chǎn)品的大量應用,嵌入式系統(tǒng)的市場正在以每年30%的速度遞增,嵌入式系統(tǒng)的設計也成為軟硬件工程師越來越關心的話題。 嵌入式系統(tǒng)是以應用為中心、以計算機技術(shù)為基礎,并且軟硬件可裁減,適用于應用系統(tǒng)對功能、可靠性、成本、體積、功耗等有嚴格要求的專用計算機系統(tǒng)[1]。在嵌入式系統(tǒng)的設計中,低功耗設計(low-power design)是必須面對的問題。其原因在于嵌入式系統(tǒng)被廣泛應用于便攜式和移動性較強的產(chǎn)品中,而這些產(chǎn)品不是一直都有充足的電源供應,往往靠電池來供電,所以應從每一個細節(jié)來考慮降低功率消耗,盡可能地延長電池的使用時間。事實上,從全局來考慮低功耗設計已經(jīng)成為了一個越來越迫切的問題。 低功耗是便攜式電子設備必須具備的一個關鍵特性。過去 幾年的研究主要針對硬件部分,而現(xiàn)在人們則更注重通過優(yōu)化軟件部分來降低系統(tǒng)功耗。要想對軟件進行優(yōu)化,必須了解每條指令所產(chǎn)生的功耗,并選擇正確的編譯方法,以降低程序執(zhí)行的功耗。由于各種微處理器架構(gòu)不同,指令集和功耗也不一樣。因此,適用于某一處理器的優(yōu)化方式并不一定適用于其他處理器。這樣,選擇與可降低功耗的軟件相匹配的微處理器便十分重要。 1 編譯優(yōu)化 編譯器的作用是將由高級語言編寫的程序,如c/c++等,翻譯成能夠在目標機上執(zhí)行的程序。換句話說,編譯器為高級語言程序員提供了一個抽象層,使得程序員能夠通過編寫與實際問題相近的高級語言代碼(而不用匯編或者機器語言),方便地解決實際問題;同時,也使得程序的可讀性和可維護性得到保證,提高軟件開發(fā)的效率。另外,將程序移植到新的目標機,也只要用相應的編譯器對程序進行重新編譯,而不必重新編寫程序。 但是某些情況下,這樣的做法是以犧牲程序的執(zhí)行性能為代價的。編譯器的有效性以及它所生成的代碼效率,可以與專家級的匯編/機器語言程序員所編寫的代碼相比較得出,因此可以通過對編譯器的優(yōu)化,生成效率更高的代碼。 通過優(yōu)化編譯器可以有效地降低嵌入式設備的功耗。在一個程序中,每一條指令都將激活微處理器中的某些硬件部件,因此,正確選擇指令可降低處理器的功耗。通過建立特定處理器架構(gòu)下指令集的功耗信息,利用“減少跳轉(zhuǎn)的指令重排序”等方法,可以進行有效的軟件低功率優(yōu)化。 這里作兩點假設:① 每一條指令都有一個固定量的功率;② 每條指令的散熱與它的操作數(shù)及其他指令無關。從圖1可以看到,通過對指令的重新排序,可以把一段程序的初始功率狀況,如圖1(a)所示,轉(zhuǎn)換成圖1(b)所示的那樣??梢缘贸鲞@樣的結(jié)論:盡管兩種情況中局部區(qū)域的散熱狀況不一樣,但是它們所消耗的總電能是一致的。換句話說,可以在不影響總耗電的情況下,對程序的局部散熱情況作出某些調(diào)整,以符合實際的需要。下面通過將指令進行重新排序來實現(xiàn)系統(tǒng)功耗的降低[2]。
圖1程序內(nèi)局部區(qū)域功率的兩種可能性 2 指令排序 我們知道,運行某一特定程序的處理器的功率p=i×vdd(i為平均電流,vdd為給定的電壓),則程序的功耗e=p×t(t為程序的執(zhí)行時間);同時,t=n×t(t為指令周期),即為主頻的倒數(shù),n為程序執(zhí)行的周期數(shù))。在嵌入式系統(tǒng),尤其是在移動設備中,一般都通過電池供電,故系統(tǒng)的功耗是一個非常重要的指標。現(xiàn)在,vdd和t都是已知量,因此程序消耗的電能e與電流i和程序周期數(shù)n的乘積成正比。這里通過引用參考文獻[3]中所建立的模型來進行闡述。該模型中通過示波器等設備,測量并估計執(zhí)行每條指令所需要的電流i[4]。綜上所述,可以利用嵌入式處理器中的多數(shù)據(jù)存儲區(qū)域的特性,實現(xiàn)數(shù)據(jù)的并行處理,通過對指令的排序,減少指令的執(zhí)行周期,從而達到降低功耗的目的。2.1 舉例 假設有一段c語言程序,如圖2(a)所示。圖2(b)是其相應的匯編代碼,圖2(c)表示每個結(jié)點帶有兩個權(quán)值的數(shù)據(jù)依賴圖(data dependence graph,ddg)。第一個權(quán)值表示結(jié)點在ddg中的深度,如v10的第一個權(quán)值為1,v0的第一個權(quán)值為6。假設這個權(quán)值越大,表示其優(yōu)先級越高,如圖2(c)中v0和v1具有最高的優(yōu)先級。