• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      源碼級(jí)和算法級(jí)的功耗測(cè)試與優(yōu)化

      2010-06-22 08:20:08廖海艷范明明
      關(guān)鍵詞:源碼數(shù)據(jù)類型功耗

      廖海艷,范明明

      (1.四川大學(xué) 計(jì)算機(jī)學(xué)院,成都610065; 2.中鐵十九局集團(tuán)有限公司)

      廖海艷(碩士),主要研究方向?yàn)榍度胧綄?shí)時(shí)系統(tǒng);范明明(總工程師),主要研究鐵道質(zhì)量與安全。

      引 言

      軟件設(shè)計(jì)中,代碼優(yōu)化是一件非常有意義的事情。優(yōu)化的本質(zhì)是對(duì)代碼進(jìn)行等價(jià)變換,使變換前后的代碼運(yùn)行結(jié)果相同,但變換后的代碼比變換前的代碼具有更多優(yōu)越性能。傳統(tǒng)的觀點(diǎn)要求變換后的代碼運(yùn)行速度較快或占用較少運(yùn)行資源,或二者兼?zhèn)洹kS著嵌入式系統(tǒng)的快速發(fā)展,軟件功耗問題顯得越來越重要,應(yīng)該將“省電”作為軟件優(yōu)化的一項(xiàng)技術(shù)指標(biāo),這樣對(duì)軟件優(yōu)化的評(píng)價(jià)體系才算完整。值得注意的是,大多數(shù)情況下性能和功耗并不矛盾,減少程序執(zhí)行時(shí)間同樣會(huì)使程序功耗減少。

      在功耗優(yōu)化這個(gè)問題上,研究者普遍比較關(guān)注硬件功耗優(yōu)化,應(yīng)用各種技術(shù)想方設(shè)法改進(jìn)硬件的功耗,比如在芯片制造工藝上采用更精細(xì)的納米技術(shù),不斷降低芯片驅(qū)動(dòng)電壓,不斷改變片內(nèi)系統(tǒng)結(jié)構(gòu)等[1]。事實(shí)上,整個(gè)系統(tǒng)的運(yùn)行管理是由軟件體現(xiàn)的。在硬件基礎(chǔ)一定的情況下,只有將軟件系統(tǒng)對(duì)能量的損耗降至最小,才能使整個(gè)系統(tǒng)工作于最佳狀態(tài)。面向功耗的軟件優(yōu)化方法是當(dāng)前嵌入式系統(tǒng)低功耗研究領(lǐng)域的熱點(diǎn)。掌握軟件運(yùn)行時(shí)的能量消耗特征、準(zhǔn)確獲取能量消耗數(shù)據(jù)信息,是面向低功耗的軟件優(yōu)化研究的前提。經(jīng)過多年的努力,許多學(xué)者也提出了關(guān)于如何減少軟件功耗的方法[2-3]。研究表明,軟件優(yōu)化對(duì)降低功耗會(huì)有數(shù)量級(jí)的貢獻(xiàn)。針對(duì)同一任務(wù),所選擇的算法不同或采用不同的實(shí)現(xiàn)方式,不僅性能有差別,能耗也大不一樣。因此在進(jìn)行系統(tǒng)優(yōu)化設(shè)計(jì)時(shí),除了代碼的規(guī)模和執(zhí)行性能之外,功耗也是一個(gè)需要認(rèn)真考慮的問題。

      1 軟件功耗優(yōu)化方法

      常用的軟件功耗優(yōu)化方法大致可分為以下4類:

      (1)軟件體系結(jié)構(gòu)級(jí)

      不存在沒有體系結(jié)構(gòu)的軟件。通??紤]軟件體系結(jié)構(gòu)都是注重軟件的可修改性、可重用性和可靠性等問題,軟件體系結(jié)構(gòu)的好壞直接關(guān)系到軟件性能的好壞。而目前,關(guān)于軟件體系結(jié)構(gòu)對(duì)軟件功耗影響這方面的研究較少,用不同軟件體系結(jié)構(gòu)開發(fā)出的軟件功耗會(huì)有差異,怎樣選擇合適的軟件體系結(jié)構(gòu)使軟件功耗最小化,將成為軟件低功耗優(yōu)化的重要研究方向。

      (2)源程序級(jí)

      C語言的源程序級(jí)功耗優(yōu)化指的是實(shí)現(xiàn)同一功能的不同語句間的選擇。比如,同樣實(shí)現(xiàn)循環(huán)功能,有多種選擇(for、while、goto等)。這些語句的功耗會(huì)有差異,為了實(shí)現(xiàn)低功耗的軟件,應(yīng)采用功耗最低的語句來完成相同的功能。這就需要對(duì)所有語句的功耗進(jìn)行測(cè)試與研究。同時(shí),對(duì)C語言不同數(shù)據(jù)類型操作的功耗進(jìn)行分析。比如,同樣表示數(shù)目,可以用8位int型、16位int型和32位int型。再者,對(duì)不同變量的存儲(chǔ)類型功耗也要進(jìn)行分析,如寄存器變量、靜態(tài)變量、自動(dòng)變量等??傊?在源碼級(jí)對(duì)軟件功耗進(jìn)行優(yōu)化是一個(gè)重要的研究方向。

      (3)算法級(jí)

      算法是為解決某個(gè)特定問題而定義的無二義性的操作序列,算法復(fù)雜性分析就是對(duì)算法運(yùn)行時(shí)所消耗的計(jì)算機(jī)資源作量化的分析和預(yù)測(cè)。以往,程序設(shè)計(jì)者關(guān)心的資源主要是運(yùn)行時(shí)間和存儲(chǔ)空間。由于能量消耗已成為軟件設(shè)計(jì)中的關(guān)鍵約束條件,因此本文將能耗作為一項(xiàng)重要資源,對(duì)算法運(yùn)行時(shí)所消耗的能量進(jìn)行分析和比較。

      (4)編譯級(jí)

      對(duì)于某個(gè)硬件來說,執(zhí)行程序所產(chǎn)生的功耗取決于它的機(jī)器代碼,而機(jī)器代碼是從源代碼編譯而來的,這就說明編譯過程也影響了硬件的功耗。既然編譯器可以很大程度上控制硬件的運(yùn)行軌跡,除了性能這一傳統(tǒng)的優(yōu)化目標(biāo)之外,編譯器也可以通過適當(dāng)?shù)恼{(diào)度優(yōu)化,使得硬件執(zhí)行某一個(gè)程序時(shí)的功耗變小。國際上對(duì)于低功耗編譯的歷史并不長,是從20世紀(jì)90年代初才開始研究的,這方面的文章最早出現(xiàn)于文獻(xiàn)[4-5],Tiwari等人在這些文章中提出了對(duì)軟件進(jìn)行功耗分析的一些基本概念,建立了基本的指令級(jí)功耗模型,以486DX為例初步探討了低功耗編譯技術(shù)。

      本文主要從源程序級(jí)和算法級(jí)這兩個(gè)方面對(duì)軟件功耗特征進(jìn)行測(cè)試與分析,并根據(jù)分析結(jié)果對(duì)μ C/OS-II進(jìn)行源碼級(jí)的功耗優(yōu)化。

      2 源碼級(jí)和算法級(jí)的功耗測(cè)試

      測(cè)試環(huán)境是T.K.Tan等人研發(fā)的EMSIM[6],它是一個(gè)基于指令級(jí)的嵌入式軟件功耗模擬器,其主要的功耗估算思想是累計(jì)函數(shù)中所有單條指令的功耗作為該函數(shù)的總功耗。嵌入式硬件平臺(tái)是ARM公司的Strong-ARM110。EMSIM測(cè)試功耗的單位為函數(shù),即它只能測(cè)試某個(gè)函數(shù)的功耗。在本文的測(cè)試中,將要測(cè)試的語句放入函數(shù)中,測(cè)得整個(gè)函數(shù)的功耗,記為E1,然后測(cè)試同樣參數(shù)及返回值的空語句函數(shù)的功耗,記為E2,最后計(jì)算得到語句的功耗為:E=E1-E2。

      2.1 源碼級(jí)的功耗測(cè)試

      本小節(jié)對(duì)C語言的源碼級(jí)功耗進(jìn)行測(cè)試,測(cè)試過程分為以下幾步:

      ①對(duì)每種數(shù)據(jù)類型的不同操作的功耗進(jìn)行測(cè)試。要測(cè)試8位整型、16位整型、32位整型以及32位浮點(diǎn)型和64位浮點(diǎn)型的基本操作功耗?;静僮饔?加、減、乘、除、取余、賦值、移位、與、或、非。此處測(cè)試的結(jié)果與處理器的位數(shù)有關(guān),StrongARM110為32位精簡指令集系統(tǒng),在此基礎(chǔ)上測(cè)試的結(jié)果如表1所列。

      表1 不同數(shù)據(jù)類型、不同操作的能耗nJ

      從表 1可知,對(duì)于相同數(shù)據(jù)類型,加、減、乘、除和取余操作的功耗一樣,與、或、非操作的功耗一樣,而移位功耗最低。對(duì)于不同數(shù)據(jù)類型來說,32位數(shù)比16位數(shù)的操作功耗低,16位數(shù)比8位數(shù)的操作功耗低。32位浮點(diǎn)數(shù)與32位整形數(shù)的操作功耗一樣。在所有數(shù)據(jù)類型中64位浮點(diǎn)數(shù)的操作功耗最高。

      測(cè)試環(huán)境的處理器StrongARM110為32位處理器,對(duì)8位數(shù)和16位數(shù)的處理要考慮字節(jié)對(duì)齊問題,而對(duì)32位就不用考慮該問題。

      ②對(duì)函數(shù)、內(nèi)聯(lián)函數(shù)和宏定義的功耗進(jìn)行測(cè)試。如表2所列,內(nèi)聯(lián)函數(shù)和宏定義的功耗比一般函數(shù)的功耗低,CPU周期數(shù)及指令數(shù)也小。

      表2 一般函數(shù)、內(nèi)聯(lián)函數(shù)及宏定義的比較

      ③對(duì)相同功能不同實(shí)現(xiàn)語句的功耗進(jìn)行測(cè)試。主要針對(duì)循環(huán)語句、選擇語句(二元和多元)、乘法、移位、除法、移位進(jìn)行測(cè)試,測(cè)試結(jié)果如表3所列。

      表3 同一功能不同語句的比較

      從表3可知,同樣實(shí)現(xiàn)循環(huán)功能,for循環(huán)的功耗比while、goto的要大,goto語句的功耗明顯最低;二元選擇運(yùn)算中三目運(yùn)算比if語句的功耗低,但是只能在單條賦值語句中使用三目運(yùn)算,在復(fù)雜的多條語句的情況下,兩者功耗一樣;多元選擇運(yùn)算中,switch語句比if…elseif…語句功耗低;寄存器變量的操作比自動(dòng)變量的操作功耗低近50%,因?yàn)樘幚砥鲝募拇嫫骼镏苯幼x取變量省去了反復(fù)從內(nèi)存讀取變量的過程,從而達(dá)到降低功耗的目的。

      2.2 算法級(jí)功耗測(cè)試

      算法級(jí)功耗測(cè)試是比源碼級(jí)功耗測(cè)試更高一層次的測(cè)試,不同的算法針對(duì)同一問題的考慮方面不同,如可靠性、易用性、時(shí)間復(fù)雜度、空間復(fù)雜度、功耗等。以往對(duì)軟件算法的研究著重在性能上面,本文把功耗作為主要考慮對(duì)象,研究算法對(duì)功耗的影響。為了便于討論,本文提出一具體問題,針對(duì)該問題提出5種不同的算法,然后分析這些算法對(duì)軟件功耗的影響。

      問題描述:對(duì)于1字節(jié)的變量v,求其二進(jìn)制表示中1的個(gè)數(shù)。

      算法1:用除法和取余實(shí)現(xiàn)。對(duì)于二進(jìn)制操作,除以2,原來的數(shù)將會(huì)減少1個(gè)0,如果在除的過程中有余,就表示當(dāng)前位置為1。

      算法2:使用與 &(即移位﹥﹥)操作。&操作,把8位數(shù)字v與00000001進(jìn)行與操作,如果結(jié)果為1,表示當(dāng)前8位的最后1位為1,否則為0,然后再將v右移1位,循環(huán)進(jìn)行。

      算法3:使用與 &操作,僅考慮v中1的個(gè)數(shù)。

      算法4:使用分支操作,直接把0~255的情況都羅列出來,使用switch…case…,即可得到答案。

      算法5:使用查表法,將0~255中1的個(gè)數(shù)直接存儲(chǔ)在數(shù)組Array中,v作為數(shù)組的下標(biāo),則Array[v]就是v中1的個(gè)數(shù)。

      測(cè)試結(jié)果如表4所列。

      表4 用不同算法實(shí)現(xiàn)同一問題

      其中,M是v中1的個(gè)數(shù),log2v為v的位數(shù)。

      由表4可知,算法1~5的執(zhí)行效率越來越高,算法5的查表法比算法1節(jié)省80%的功耗,其CPU周期數(shù)也相應(yīng)減少,但是它們的指令數(shù)卻有所增加,所以算法5的查表法是以空間換取時(shí)間和功耗的算法。在內(nèi)存充分大的嵌入式系統(tǒng)中,為盡量降低功耗,算法5是很好的選擇。

      3 μC/OS-Ⅰ的源碼級(jí)功耗優(yōu)化

      μ C/OS-II是一種可移植、可固化、可裁減及可剝奪型的多任務(wù)實(shí)時(shí)內(nèi)核(RTOS),適用于各種微處理器和微控制器。所有代碼用ANSI C語言編寫,具有良好的可移植性。對(duì)μ C/OS-II的源碼級(jí)功耗優(yōu)化分以下幾步實(shí)行:

      ①對(duì)計(jì)數(shù)器數(shù)據(jù)類型的改進(jìn)。由表1可知,32位數(shù)據(jù)類型的加1操作比8位數(shù)據(jù)類型的加1操作能耗低27 nJ,將μ C/OS-II中常用數(shù)據(jù)的數(shù)據(jù)類型改為INT32U,如任務(wù)控制塊 OS_TCB中的 prio、OSTCBDly、OSTCBX、OSTCBY 、OSTCBBitX、OSTCBBitY 等 。

      ②對(duì)循環(huán)控制語句的改進(jìn)。由表3可知,while、goto循環(huán)語句的功耗比for循環(huán)語句的功耗低。將μ C/OS-II中for循環(huán)句換成while循環(huán)語句,經(jīng)查看μ C/OS-II的源碼,發(fā)現(xiàn)μ C/OS-II在設(shè)計(jì)時(shí)已考慮到該問題,多數(shù)循環(huán)使用while實(shí)現(xiàn)。在此只對(duì)OSInit()函數(shù)改進(jìn),同時(shí)μ C/OS-II中固定的任務(wù)(如OS_TaskIdle、OS_TaskStat中的控制)改為goto語句,減少應(yīng)用程序的功耗。

      ③對(duì)內(nèi)聯(lián)函數(shù)和宏的使用。對(duì)簡短的常用函數(shù)加上inline關(guān)鍵字,或用宏來實(shí)現(xiàn),內(nèi)聯(lián)函數(shù)和宏的使用使軟件功耗降低。讀RAM比讀Flash功耗更大。處理器進(jìn)入子程序時(shí),會(huì)首先將當(dāng)前處理器的寄存器推入堆棧(RAM),在離開時(shí)又將處理器的寄存器彈出堆棧,這樣至少兩次對(duì)RAM操作。而宏在編譯時(shí)展開,處理器順序執(zhí)行指令,避免了調(diào)用子程序,同時(shí)減少了系統(tǒng)的功耗。μ C/OS-II中常用的短函數(shù)改為內(nèi)聯(lián)函數(shù),如每個(gè)時(shí)鐘都要執(zhí)行的OSTimeTick()和開關(guān)中斷等,同時(shí)μ C/OS-II中采用條件編譯,也會(huì)在一定程度上降低功耗。

      ④對(duì)變量存儲(chǔ)類型的優(yōu)化。對(duì)于大部分嵌入式系統(tǒng)來說,為了提高運(yùn)行速度,通常寄存器做得很大,如ARM系列處理器有31個(gè)通用寄存器。有時(shí)許多寄存器空著沒使用,可以將程序中常用的常量或變量直接置于寄存器中,而不是置于內(nèi)存的靜態(tài)存儲(chǔ)區(qū)或動(dòng)態(tài)存儲(chǔ)區(qū)中。這樣做不僅提高了軟件運(yùn)行速度,而且也節(jié)省能量消耗。由表3可知,使用寄存器變量能省近50%的功耗,μ C/OS-II中每個(gè)時(shí)鐘周期都要使用的計(jì)數(shù)變量OSTime,將其用關(guān)鍵字register聲明即可。還有循環(huán)控制語句的計(jì)數(shù)變量,將其聲明為寄存器變量,降耗效果明顯。

      ⑤算法級(jí)的改進(jìn)。從算法級(jí)功耗的算法5可以看出,將一些運(yùn)算的結(jié)果預(yù)先算好,放在Flash中,用查表的方法替代實(shí)時(shí)的計(jì)算,減少微控制器的運(yùn)算工作量,可以有效地降低微控制器的功耗;不可避免的實(shí)時(shí)計(jì)算,達(dá)到精度就結(jié)束,避免“過度”計(jì)算;在精度允許的情況下,使用簡單函數(shù)代替復(fù)雜函數(shù)作近似,也可以減少功耗。μ C/OS-II中的任務(wù)調(diào)度和事件管理模塊都采用查找就緒表的方式來提高性能和降低功耗。為此,針對(duì)μ C/OS-II的內(nèi)存管理機(jī)制采用查表算法,借用任務(wù)管理中的就緒表實(shí)現(xiàn)內(nèi)存塊的分配,這樣不但不會(huì)增加額外的空間需求,而且使內(nèi)存管理的功耗更低。

      對(duì)μ C/OS-II的部分功能函數(shù)進(jìn)行源碼級(jí)功耗優(yōu)化,其優(yōu)化前后的結(jié)果如圖1所示。圖中,縱軸表示能耗(nJ),橫軸表示改進(jìn)前后的功能函數(shù)。

      圖1 μ C/OS-Ⅰ部分功能函數(shù)改進(jìn)前后的功耗

      結(jié) 語

      功耗較大的軟件,使用了較多功耗大的操作指令或是使用了不必要的指令。本文的創(chuàng)新之處在于,對(duì)軟件功耗優(yōu)化中的源碼級(jí)和算法級(jí)的功耗優(yōu)化進(jìn)行分析,對(duì)用不同語句實(shí)現(xiàn)相同功能的情況進(jìn)行分類討論,測(cè)試其功耗特征,最后將功耗測(cè)試與分析結(jié)果運(yùn)用到嵌入式操作系統(tǒng)μ C/OS-II中,對(duì)其進(jìn)行源碼級(jí)的功耗優(yōu)化,實(shí)驗(yàn)結(jié)果證明,源碼級(jí)的功耗優(yōu)化能明顯降低軟件的功耗。

      [1]Gowan M,Biro L,Jackson D.Power considerations in the design of the Alpha 21264 microprocessor:35th Design Automation Conference,San Francisco,1998[C].NY:ACM,1998:726-731.

      [2]Tan T K,Raghunathan A.Software Architectural Transformation:A new approach to Low Energy Embedded Software[J].Design,Automation&Test in Europe,2003(3).

      [3]Tiwari V,Malik S,Wolfe A.Power analysis of embededed sofware:a first step towards sofware power minimization[J].IEEE Transactions on VLSI Systems,1994,2(4):437-445.

      [4]Tiwari V,Malik S,Wolfe A.Power analysis of embedded software:a first step towards software power minimization[J].IEEE Transactionson VLSI Systems,1994,2(4):437-445.

      [5]Tiwari V,Malik S,Wolfe A.Compilation techniques for low energy:an overview:Proceedings of the IEEE Symposiumon Low Power Electronics[C].San Diego:IEEE,1994:38-39.

      [6]Tan T K,Raghunathan A,Jhan K.EMSIM:An energy simulation framework for embedded operating system[J].Circuit&Systems,2002(5):464-467.

      [7]Labrosse J J.MicroC/COS-II:The Real-Time Kernel[M].Lawrence:Miller Freeman,1999.

      猜你喜歡
      源碼數(shù)據(jù)類型功耗
      基于網(wǎng)頁源碼結(jié)構(gòu)理解的自適應(yīng)爬蟲代碼生成方法
      基于圖神經(jīng)網(wǎng)絡(luò)的軟件源碼漏洞檢測(cè)方法
      詳談Java中的基本數(shù)據(jù)類型與引用數(shù)據(jù)類型
      企業(yè)如何保護(hù)源碼
      如何理解數(shù)據(jù)結(jié)構(gòu)中的抽象數(shù)據(jù)類型
      揭開GPU功耗的面紗
      數(shù)字電路功耗的分析及優(yōu)化
      電子制作(2016年19期)2016-08-24 07:49:54
      基于數(shù)據(jù)結(jié)構(gòu)教輔系統(tǒng)的實(shí)驗(yàn)課程改革
      “功耗”說了算 MCU Cortex-M系列占優(yōu)
      電子世界(2015年22期)2015-12-29 02:49:44
      IGBT模型優(yōu)化及其在Buck變換器中的功耗分析
      仁怀市| 唐河县| 上高县| 伊宁市| 深州市| 鸡西市| 长垣县| 灌云县| 石城县| 呼和浩特市| 靖宇县| 彩票| 哈巴河县| 郑州市| 清丰县| 阿图什市| 重庆市| 呼伦贝尔市| 敦化市| 西峡县| 盘锦市| 独山县| 重庆市| 方山县| 柘荣县| 嘉义县| 密山市| 焉耆| 湖州市| 渑池县| 仙游县| 松桃| 正阳县| 运城市| 丽江市| 满城县| 邛崃市| 陇南市| 自治县| 文昌市| 涿州市|