源碼級和算法級的功耗測試與優(yōu)化
軟件設計中,代碼優(yōu)化是一件非常有意義的事情。優(yōu)化的本質(zhì)是對代碼進(jìn)行等價(jià)變換,使變換前后的代碼運行結果相同,但變換后的代碼比變換前的代碼具有更多優(yōu)越性能。傳統的觀(guān)點(diǎn)要求變換后的代碼運行速度較快或占用較少運行資源,或二者兼備。隨著(zhù)嵌人式系統的快速發(fā)展,軟件功耗問(wèn)題顯得越來(lái)越重要,應該將“省電”作為軟件優(yōu)化的一項技術(shù)指標,這樣對軟件優(yōu)化的評價(jià)體系才算完整。值得注意的是,大多數情況下性能和功耗并不矛盾,減少程序執行時(shí)間同樣會(huì )使程序功耗減少。
在功耗優(yōu)化這個(gè)問(wèn)題上,研究者普遍比較關(guān)注硬件功耗優(yōu)化,應用各種技術(shù)想方設法改進(jìn)硬件的功耗,比如在芯片制造工藝上采用更精細的納米技術(shù),不斷降低芯片驅動(dòng)電壓,不斷改變片內系統結構等。事實(shí)上,整個(gè)系統的運行管理是由軟件體現的。在硬件基礎一定的情況下,只有將軟件系統對能量的損耗降至最小,才能使整個(gè)系統工作于最佳狀態(tài)。面向功耗的軟件優(yōu)化方法是當前嵌入式系統低功耗研究領(lǐng)域的熱點(diǎn)。掌握軟件運行時(shí)的能量消耗特征、準確獲取能量消耗數據信息,是面向低功耗的軟件優(yōu)化研究的前提。經(jīng)過(guò)多年的努力,許多學(xué)者也提出了關(guān)于如何減少軟件功耗的方法。研究表明,軟件優(yōu)化對降低功耗會(huì )有數量級的貢獻。針對同一任務(wù),所選擇的算法不同或采用不同的實(shí)現方式,不僅性能有差別,能耗也大不一樣。因此在進(jìn)行系統優(yōu)化設計時(shí),除了代碼的規模和執行性能之外,功耗也是一個(gè)需要認真考慮的問(wèn)題。
1軟件功耗優(yōu)化方法
常用的軟件功耗優(yōu)化方法大致可分為以下4類(lèi):
(1)軟件體系結構級
不存在沒(méi)有體系結構的軟件。通??紤]軟件體系結構都是注重軟件的可修改性、可重用性和可靠性等問(wèn)題,軟件體系結構的好壞直接關(guān)系到軟件性能的好壞。而且前,關(guān)于軟件體系結構對軟件功耗影響這方面的研究較少,用不同軟件體系結構開(kāi)發(fā)出的軟件功耗會(huì )有差異,怎樣選擇合適的軟件體系結構使軟件功耗最小化,將成為軟件低功耗優(yōu)化的重要研究方向。
(2)源程序級
C語(yǔ)言的源程序級功耗優(yōu)化指的是實(shí)現同一功能的不同語(yǔ)句間的選擇。比如,同樣實(shí)現循環(huán)功能,有多種選擇(for、while、goto等)。這些語(yǔ)句的功耗會(huì )有差異,為了實(shí)現低功耗的軟件,應采用功耗最低的語(yǔ)句來(lái)完成相同的功能。這就需要對所有語(yǔ)句的功耗進(jìn)行測試與研究。同時(shí),對C語(yǔ)言不同數據類(lèi)型操作的功耗進(jìn)行分析。比如,同樣表示數目,可以用8位int型、16位int型和32位int型。再者,對不同變量的存儲類(lèi)型功耗也要進(jìn)行分析,如寄存器變量、靜態(tài)變量、自動(dòng)變量等??傊?,在源碼級對軟件功耗進(jìn)行優(yōu)化是一個(gè)重要的研究方向。
(3)算法級
算法是為解決某個(gè)特定問(wèn)題而定義的無(wú)二義性的操作序列,算法復雜性分析就是對算法運行時(shí)所消耗的計算機資源作量化的分析和預測。以往,程序設計者關(guān)心的資源主要是運行時(shí)間和存儲空間。由于能量消耗已成為軟件設計中的關(guān)鍵約束條件,因此本文將能耗作為一項重要資源,對算法運行時(shí)所消耗的能量進(jìn)行分析和比較。
(4)編譯級
對于某個(gè)硬件來(lái)說(shuō),執行程序所產(chǎn)生的功耗取決于它的機器代碼,而機器代碼是從源代碼編譯而來(lái)的,這就說(shuō)明編譯過(guò)程也影響了硬件的功耗。既然編譯器可以很大程度上控制硬件的運行軌跡,除了性能這一傳統的優(yōu)化目標之外,編譯器也可以通過(guò)適當的調度優(yōu)化,使得硬件執行某一個(gè)程序時(shí)的功耗變小。國際上對于低功耗編譯的歷史并不長(cháng),是從20世紀90年代初才開(kāi)始研究的,這方面的文章最早出現于文獻[4-5],Tiwari等人在這些文章中提出了對軟件進(jìn)行功耗分析的一些基本概念,建立了基本的指令級功耗模型,以486DX為例初步探討了低功耗編譯技術(shù)。
本文主要從源程序級和算法級這兩個(gè)方面對軟件功耗特征進(jìn)行測試與分析,并根據分析結果對μC/OS-II進(jìn)行源碼級的功耗優(yōu)化。
2源碼級和算法級的功耗測試
測試環(huán)境是T.K.Tan等人研發(fā)的EMSIM,它是一個(gè)基于指令級的嵌入式軟件功耗模擬器,其主要的功耗估算思想是累計函數中所有單條指令的功耗作為該函數的總功耗。嵌入式硬件平臺是ARM公司的StrongARM110。EMSIM測試功耗的單位為函數,即它只能測試某個(gè)函數的功耗。在本文的測試中,將要測試的語(yǔ)句放入函數中,測得整個(gè)函數的功耗,記為E1,然后測試同樣參數及返回值的空語(yǔ)句函數的功耗,記為E2,最后計算得到語(yǔ)句的功耗為:E=E1-E2。
2.1源碼級的功耗測試
本小節對C語(yǔ)言的源碼級功耗進(jìn)行測試,測試過(guò)程分為以下幾步:
①對每種數據類(lèi)型的不同操作的功耗進(jìn)行測試。要測試8位整型、16位整型、32位整型以及32位浮點(diǎn)型和64位浮點(diǎn)型的基本操作功耗?;静僮饔校杭?、減、乘、除、取余、賦值、移位、與、或、非。此處測試的結果與處理器的位數有關(guān),StrongARM110為32位精簡(jiǎn)指令集系統,在此基礎上測試的結果如表1所列。
評論