袁太生
(太原大學(xué) 計(jì)算機(jī)工程系,山西 太原 030009)
軟件功耗與軟件優(yōu)化技術(shù)
袁太生
(太原大學(xué) 計(jì)算機(jī)工程系,山西 太原 030009)
無論設(shè)計(jì)制造還是使用計(jì)算機(jī),功耗問題一直倍受關(guān)注。隨著嵌入式系統(tǒng)的深入研究和廣泛應(yīng)用,計(jì)算機(jī)系統(tǒng)的功耗問題越來越突出。過去我們對(duì)降低計(jì)算機(jī)硬件功耗給予較多的關(guān)注,現(xiàn)在我們必須對(duì)降低由軟件引起的功率損耗給予足夠的重視。特別是當(dāng)計(jì)算機(jī)芯片技術(shù)發(fā)展至幾納米級(jí)的時(shí)候,研究降低軟件功耗的途徑和方法尤為重要。對(duì)于軟件質(zhì)量的評(píng)價(jià),也應(yīng)將軟件功耗作為綜合評(píng)價(jià)軟件代碼優(yōu)化性能的一個(gè)指標(biāo)。
計(jì)算機(jī)軟件;功率損耗;軟件評(píng)價(jià);軟件功耗;優(yōu)化技術(shù)
在研究計(jì)算機(jī)的性能和應(yīng)用方面,計(jì)算機(jī)功耗一直是人們十分關(guān)心的問題。特別是近二十年來,嵌入式系統(tǒng)的應(yīng)用研究使計(jì)算機(jī)的應(yīng)用面迅速膨脹,而最近幾年中十分時(shí)尚的移動(dòng)通訊、移動(dòng)計(jì)算、移動(dòng)視屏、移動(dòng)網(wǎng)絡(luò)等一系列移動(dòng)系統(tǒng)則使計(jì)算機(jī)的普及達(dá)到新的高潮。不久的未來,電話演變的像耳飾,電腦控制的手術(shù)刀在人體的血管內(nèi)游來移去,類似的令人興奮的嵌入式設(shè)備會(huì)舉不勝舉,它們所需的動(dòng)力往往由體積和能量非常有限的電池來供給,在這種情況下,降低設(shè)備的功耗不僅意味著產(chǎn)品質(zhì)量的提高,更重要的是它將促使計(jì)算機(jī)系統(tǒng)向更高、更廣、更新的領(lǐng)域邁進(jìn)。所以如何降低計(jì)算機(jī)系統(tǒng)的功耗成為目前高品質(zhì)嵌入式系統(tǒng)研發(fā)中越來越重要的問題。在這個(gè)問題上,人們普遍對(duì)硬件比較關(guān)注,應(yīng)用各種技術(shù)想方設(shè)法改進(jìn)硬件的功耗,比如在芯片制造工藝上采用更精細(xì)的納米技術(shù),不斷降低芯片驅(qū)動(dòng)電壓,不斷改變片內(nèi)系統(tǒng)結(jié)構(gòu)等等。而對(duì)軟件功耗問題的研究一直是斷斷續(xù)續(xù),直到最近,芯片制造技術(shù)明顯改善了系統(tǒng)功耗時(shí),軟件功耗的問題才再次受到重視。事實(shí)上,整個(gè)系統(tǒng)的運(yùn)行管理是由軟件體現(xiàn)的,在硬件基礎(chǔ)一定的情況下,只有將軟件系統(tǒng)對(duì)能量的損耗降低至最小,才能使全系統(tǒng)工作在最佳狀態(tài)。那么軟件系統(tǒng)對(duì)能量的損耗有何影響?源自何處?如何設(shè)計(jì)軟件系統(tǒng)以使全系統(tǒng)工作在最佳狀態(tài)?本文通過對(duì)機(jī)器指令執(zhí)行時(shí)硬件各部件能量消耗狀況的定性分析,部分的對(duì)這些問題給予了回答,并從軟件優(yōu)化的角度提出了將功耗作為綜合評(píng)價(jià)軟件代碼優(yōu)化性能的一個(gè)指標(biāo)的看法。
只要打開電源,計(jì)算機(jī)系統(tǒng)就開始消耗能量了,這時(shí)的能耗包括硬件功耗和軟件功耗兩個(gè)方面。所謂軟件功耗,是指由于軟件的運(yùn)行而引起的能量消耗,其值為系統(tǒng)功耗與硬件功耗之差。在完成一個(gè)任務(wù)時(shí),比如對(duì)系統(tǒng)資源的管理任務(wù)、對(duì)高級(jí)語言的編譯任務(wù)或?qū)δ稠?xiàng)具體工程應(yīng)用的任務(wù),不同的設(shè)計(jì)思想會(huì)產(chǎn)生不同效果的軟件,除了軟件各方面的特點(diǎn)以外,這些軟件的功耗也不盡相同。功耗較大的軟件,一定使用了較多功耗大的操作指令或是使用了不必要的指令,不妨把由這部分指令引起的無用功耗稱為損耗,于是軟件功耗被劃分為兩部分:有用功耗與損耗。無論什么軟件(系統(tǒng)軟件和應(yīng)用軟件),只要運(yùn)行,功耗是不可避免的,研究軟件功耗的目的是如何減少軟件損耗,以使全系統(tǒng)工作在最佳狀態(tài)。對(duì)于一個(gè)常規(guī)配置的基本系統(tǒng),不外乎如下幾個(gè)部件組成:系統(tǒng)總線(控制總線、數(shù)據(jù)總線、地址總線)、內(nèi)部存儲(chǔ)器 RAM、寄存器、控制器、算邏部件ALU、指令CACHE和數(shù)據(jù)CACHE、I/O接口以及外部 I/O設(shè)備等等。不同的軟件指令對(duì)這些部件的操作所消耗的功率有大有小,對(duì)指令相對(duì)部件操作而消耗能量的情況做定量分析雖然理想,但由于軟件設(shè)計(jì)的復(fù)雜性,定量分析未必能有效地指導(dǎo)軟件設(shè)計(jì),或許定性分析對(duì)其更具實(shí)際意義。
我們對(duì)計(jì)算機(jī)部件與指令操作的功耗情況一般有如下一些共識(shí):
部件內(nèi)部操作指令的功耗小于部件間操作指令的功耗;訪問執(zhí)行時(shí)間短的操作指令功耗小于訪問執(zhí)行時(shí)間長的操作指令的功耗。
在CPU內(nèi)部,寄存器用D觸發(fā)器做功耗較大,用DRAM做功耗會(huì)較小。對(duì)每個(gè)寄存器來說,分別用各自的時(shí)鐘比統(tǒng)一用一個(gè)時(shí)鐘功耗要小得多,但電路會(huì)復(fù)雜些。
CACHE占用芯片面積三分之一左右,CACHE越大,功耗也越大。通常CACHE的能耗約為芯片總能耗的70%。
在指令設(shè)計(jì)上,指令執(zhí)行過程中使0、1翻轉(zhuǎn)越少,指令功耗也就最小,如何使0、1翻轉(zhuǎn)最少與指令格式設(shè)計(jì)相關(guān)。
在系統(tǒng)內(nèi),訪問MEMORY的指令執(zhí)行時(shí)間較長,耗能較多。
對(duì)于 RISK指令集,只有LOAD、STORE指令與MEMORY打交道。
對(duì)于與總線(BUS)打交道的指令能耗最多。
在現(xiàn)代計(jì)算機(jī)體系結(jié)構(gòu)中,多級(jí)流水線作業(yè)和并行運(yùn)算成為主流,充分利用計(jì)算機(jī)體系結(jié)構(gòu)的特點(diǎn)也能達(dá)到節(jié)能的目的。例如超標(biāo)量計(jì)算機(jī)工作時(shí),經(jīng)常是很多部件處于休閑狀態(tài)而消耗能量,若能實(shí)時(shí)地開關(guān)它們就能減少能量損耗。在多級(jí)流水線作業(yè)體系結(jié)構(gòu)中,采用“試探技術(shù)”使盡可能多的程序單元并行執(zhí)行,提高單位時(shí)間CPU的效率,也可達(dá)到節(jié)能的目的。
基于上面對(duì)系統(tǒng)指令、部件、結(jié)構(gòu)在能耗方面的定性分析,在軟件設(shè)計(jì)中,盡可能避開或少用功耗大的指令和部件,就能夠設(shè)計(jì)出較低能耗的軟件。對(duì)于超標(biāo)量計(jì)算機(jī),可增加一些開關(guān)部件的指令,以便在軟件中實(shí)時(shí)地打開和關(guān)閉各個(gè)部件。對(duì)于有些嵌入式系統(tǒng)來說,為了提高運(yùn)行速度,通用寄存器往往做得很大,有時(shí)許多寄存器都空著沒用,這樣就可以考慮將程序中常用的常量直接置于寄存器中,而不是置于內(nèi)存的靜態(tài)存儲(chǔ)區(qū)中,這樣做不僅提高了軟件運(yùn)行速度而且也節(jié)省能量消耗。Intel在這方面采用了另一種思路,即多線程技術(shù)。它是利用在一個(gè)處理器中同時(shí)執(zhí)行多個(gè)獨(dú)立的指令集的方法,這就像將一個(gè)處理器作為兩臺(tái)獨(dú)立的處理器使用,結(jié)果增加了每一具體時(shí)間處理器資源的使用比率,更有效地利用CPU相當(dāng)于獲取更高的性能,同樣意味著能量的節(jié)省。
下面我們用兩個(gè)例子說明低功耗軟件的設(shè)計(jì)技術(shù)。
例1、軟件設(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)?隨著嵌入式系統(tǒng)的快速發(fā)展,軟件功耗問題越來越顯重要,我們應(yīng)該將“省電”也作為軟件優(yōu)化的一項(xiàng)技術(shù)指標(biāo),這樣對(duì)軟件優(yōu)化的評(píng)價(jià)體系才算完整。
對(duì)于軟件優(yōu)化技術(shù),除我們常用的“代碼外提”、“強(qiáng)度削弱”、“條件變換”、“復(fù)寫傳播”等方法外,現(xiàn)在必須重視“功耗降低”的技術(shù)。如下面的兩段程序完成同樣的功能,程序A充分利用寄存器完成字符識(shí)別,程序B主要利用存儲(chǔ)器完成相應(yīng)功能,據(jù)本文2節(jié)關(guān)于指令運(yùn)行時(shí)部件的功耗分析,顯然A優(yōu)于B。[1]
例2、本例指令格式與程序來自參考文獻(xiàn)。[2]超標(biāo)量計(jì)算機(jī)系統(tǒng)中,依靠編譯器來預(yù)測(cè)需要實(shí)時(shí)開關(guān)的部件,同時(shí)硬件設(shè)計(jì)時(shí)也要支持這類開關(guān)操作,再增加開關(guān)部件的新指令,三方面配合完成節(jié)能的任務(wù)。新增加的指令如:
add.on 打開整數(shù)加法器
add.off 關(guān)閉整數(shù)加法器
mul.on 打開整數(shù)乘法器
mul.off 關(guān)閉整數(shù)乘法器
add.s.on 打開浮點(diǎn)加法器
add.s.off 關(guān)閉浮點(diǎn)加法器
mul.s.on 打開浮點(diǎn)乘法器
mul.s.off 關(guān)閉浮點(diǎn)乘法器
mov.s.on 在浮點(diǎn)寄存器與打開的浮點(diǎn)運(yùn)算器之間傳送數(shù)據(jù)
mov.s.off 在浮點(diǎn)寄存器與關(guān)閉的浮點(diǎn)運(yùn)算器之間傳送數(shù)據(jù)
利用新增指令的源程序段落如:
我們已經(jīng)看到,用這樣的方法并沒有增加多少軟件的復(fù)雜度,但卻能將大部分時(shí)間處于休閑狀態(tài)的部件所耗能量減低至最小,從而達(dá)到節(jié)能目的。據(jù)實(shí)驗(yàn),采用此方法設(shè)計(jì)的軟件節(jié)能效率超過90%。
當(dāng)一輛車耗油很大時(shí),司機(jī)總會(huì)說車有毛病,但這解釋不了同一輛車不同司機(jī)操作時(shí)耗油不同的事實(shí)。計(jì)算機(jī)功耗的情況與此完全類似,強(qiáng)調(diào)軟件功耗的重要性無異于強(qiáng)調(diào)軟件設(shè)計(jì)的正確性,因?yàn)橛?jì)算機(jī)的全部操作就靠它了。對(duì)于軟件功耗問題,只要算法得當(dāng),總可得到解決。特別是當(dāng)前嵌入式系統(tǒng)在計(jì)算機(jī)研究與應(yīng)用領(lǐng)域迅猛擴(kuò)展的形勢(shì)下,低功耗軟件設(shè)計(jì)技術(shù)會(huì)越來越受到廣泛的重視,而在未來軟件優(yōu)化度的評(píng)價(jià)指標(biāo)中,難道可以對(duì)軟件功耗如此重要的事給予忽略嗎?
[1]袁太生.單片機(jī)應(yīng)用技術(shù)[M].北京:中國電力出版社,2007.
[2]S Real,S Pande,S Onder,et al.Optimizing Static Power Dissipation by Functional Units in Superscalar Processors[C].International Conference on Compiler Construction,Grenoble,France,2002.
[責(zé)任編輯:趙自謙]
Software Energy Consumption and Software Optmization Technology
YUAN Tai-sheng
(Computer Engineering Department,Taiyuan University,Taiyuan,030009,China)
Not only in designing and making computer but also in using it,the problem of energy consumption has been paid close attention to extremely all the time.With further investigation and extensive application of the embedded system,the consumption question of the computer system is more and more outstanding.We paid more concerns in reducing the computer hardware consumption in the past,we must pay enough attention in reducing the power consumption caused by software now.Especially when the chip technology of the computer develops to several nanometers,it is particularly important to study the way and method of reducing the software consumption.And when we comprehensively appraise on the qualityof the software,we also should regard the software consumption as a guid line of optimizing performance of software code.
Computer Software;Power Consumption;software evaluation;software energy consumption;optimization technology
TP391
A
1671-5977(2010)03-0117-03
2010-09-01
袁太生(1955-),男,山西壽陽人,太原大學(xué)計(jì)算機(jī)工程系教授。