如何在ARM平臺上開發(fā)低功耗的軟件系統(tǒng)
摘要:在強調(diào)便攜式設備的電池壽命時,看起來比較奇怪是,很少有軟件工程師在其日常項目任務中真正做到了減少能耗。我猜想對這個課題有所想法的那些人可能都是本著榮辱自擔的想法才關注此課題的。我們到了要做些改變的時期。隨著電池壽命和性能要求的矛盾持續(xù),我們作為軟件工程師不得不要用更多時間來找出如何才能以節(jié)能方式來設計和編寫我們的軟件,至少在工具能滿足我們要求之前需要這樣做。
本文引用地址:http://butianyuan.cn/article/148887.htm我們這些軟件工程師都熱衷于為我們遇到的問題找出完美的解決方案。但奇怪的是,我們會發(fā)現(xiàn)在這個特定的領域,沒有一個完美的解決方案。聰明的技巧可能會節(jié)省一些功率,但是這個領域是由其他更簡單的因素支配的。就象房間里有幾頭很大的大象,我們必須要先小心翼翼地獵取我們可以看到的大象,然后再花精力去獵捕體型小的動物。
在考量某個系統(tǒng)的功耗時,重要的是要弄清楚我們實際測量的對象是什么。我們說的“節(jié)省功耗”可能意味著幾個方面。它意味著“功率”還是“能量”。實際上,我們既需要功率也需要能量。大多數(shù)手持便攜式設備均具有以下兩個不同的預算:功率預算——它管理著瞬間功耗、避免過熱或產(chǎn)生熱應力,而能量預算則管理著長期使用的能量總數(shù)。而軟件則需要滿足短期的功率預算和長期的能量預算。
很明顯,我們可以把任何設備的功耗降低到接近零,只要不讓它做任何操作或任何有意義的操作即可!不得已的是,實現(xiàn)有用的功能就需要耗費能量。因此,我們只能在有意義的操作和節(jié)能二者中不斷采取折衷方案。為了實現(xiàn)所需的功能,我們必須耗能;但我們必須盡量確保以節(jié)能的方式來實現(xiàn)這些功能。
功耗時間積 有關該主題的學術材料中常用的更好度量方式是采用“功耗時間積”。盡管既沒有標準單位也沒有具體方法,但是這種度量方式將能耗和性能度量結(jié)合到了一起。增加能耗或降低性能會增加功耗時間積的值,因此我們的目標是找出最低的可接受的功耗時間積的值,換句話說,最低的能耗要與允許的時間內(nèi)所需任務的執(zhí)行保持一致。
能量去哪兒了? 所有計算器械均會執(zhí)行兩個基本功能。這兩個功能都是必需的,沒有這兩個功能就不能完成任何有意義的任務。
我們首先想到的自然是計算或數(shù)據(jù)處理。通常,計算是對機器寄存器中保存的值實施的操作。為了盡可能高效地實施計算任務,我們需要在最短的時間內(nèi)執(zhí)行最少的指令。最重要的是,高效計算允許以下二選一:要么我們可以早點完成計算去睡覺,要么我們調(diào)慢時鐘且仍然在規(guī)定時間內(nèi)完成計算任務。
這里經(jīng)常被人忽視的是數(shù)據(jù)通信(數(shù)據(jù)移動)。在大多數(shù)架構(gòu)中(A R M采用加載/存儲架構(gòu),也不例外),數(shù)據(jù)移動是必需的。如果不將信息從一個位置移動到另一個位置且經(jīng)常返回原來的位置,用戶就無法處理任何信息。例如,內(nèi)存中的值需要移動到寄存器中進行處理,然后把結(jié)果寫回到內(nèi)存中。
但是哪個耗用的能量更多呢?最大的償付在哪兒?
圖1顯示了普遍存在的事實,與程序有關的內(nèi)存存取操作中有大約60%是指令抓取,另外40%才是數(shù)據(jù)存取。
圖1:內(nèi)存存取分布
圖2:內(nèi)存存取能耗
圖2顯示了A R M進行的一些研究。如果執(zhí)行一條指令的能耗是1,那么,緊耦合存儲器(TCM)存取的能耗約為1/25,緩存存取的能耗大約為1/6。而外部R A M存取的能耗則是指令執(zhí)行能耗的7倍。
換言之,對于每次外部R A M存取所用的能耗,我們可以執(zhí)行7條指令,40次緩存存取或大約170次TCM存取。
計算廉價但通信昂貴
因此,似乎數(shù)據(jù)移動要比數(shù)據(jù)處理更昂貴。因此,第一頭大象就是數(shù)據(jù)效率。
我們可以為內(nèi)存存取的能耗管理提出兩個規(guī)則。
近距離 - 從能量角度講,內(nèi)存越靠近核心,訪問內(nèi)存的相對能耗越低。
少存取 - 減少內(nèi)存存取次數(shù)比減少指令數(shù)量更加重要。
充分利用片上存儲器
從我們的能量圖可以清楚地看出,TCM是到目前為止系統(tǒng)具有的最高效存儲器類型。不是所有的系統(tǒng)均具有A R M稱為TCM的存儲器(通過專用和優(yōu)化的接口連接到內(nèi)核),但是大部分系統(tǒng)至少具有某種片上快速存儲器類型。為了便于討論,我們指的是常見的片上存儲器(SPM)。假定S PM單次存取能耗大約是外部R A M存取能耗的1/170,充分利用這種SPM存儲器應該是首選。
圖3:SPM的能量優(yōu)勢
圖3中的圖表顯示了簡單的“多類”基準,甚至128個字節(jié)的S PM區(qū)域都可以減少大約一半的功耗。1k字節(jié)的存儲器最大可減少70%的功耗。本次研究(Mar wedel, 2004)中采用的方法是從外部R AM到S PM動態(tài)重定位代碼和數(shù)據(jù)片段。甚至在按需移動各項開銷方面,不僅降低了能耗,性能也提高了大約60%。
很顯然,我們在某個點上正在損失回報。這種情況下,S PM超過1k時,性能提升幅度變緩,系統(tǒng)總能耗也會稍微升高。在這里,我們實際上在承擔這種特定應用無法使用的S P M能耗,因為這種應用程序本身并不夠大。
您還可以注意到,在結(jié)合了所使用的分配算法時,這種特定的應用無法使用小于64字節(jié)的S P M區(qū)域,因為沒有足夠小的可用片段與之相配。本次研究中還展示了一個更加成熟的算法,可以在最佳狀況下節(jié)省能耗可以超過80%。
永遠做緩存友好的事
分析緩存優(yōu)點有時可能比分析S PM優(yōu)點更加復雜。一方面,緩存基本上是自我管理的。另一方面,緩存不是對單個存儲位置進行操作,而是對固定大小的“線路”進行操作。因此,訪問單個可緩存的存儲位置可能加載整條線路,從而造成突發(fā)的內(nèi)存存取。如果該附加的數(shù)據(jù)從未被訪問過,則所消耗的能量就浪費了。
另一個不利之處是緩存所需的其他邏輯成本(就硅片面積和功耗而言)。
評論