如何在ARM平臺上開發(fā)低功耗的軟件系統(tǒng)
對于個別計算單元,選擇一種關(guān)機方案是很容易的。對于可以預(yù)測需要與否的單元,在不需要時通過應(yīng)用程序或操作系統(tǒng)就可以停止運行這些單元。對于不可預(yù)測需要與否的單元,可以通過按需通電啟動系統(tǒng),也可以在空閑超過某段時間之后再自動斷電。子系統(tǒng)斷電的時標可以通過以下兩方面來得出:通電但處于空閑狀態(tài)時的功耗以及睡眠喚醒循環(huán)的能耗。從根本上講,這取決于應(yīng)用場合。但是,動力循環(huán)代碼的簡單循環(huán)計數(shù)將是最明顯的起點。
測量數(shù)據(jù)表明,N e o n引擎相比C o r tex-A9等內(nèi)核的運行功率要高大約10%。但是,對于傳統(tǒng)的信號處理算法,其性能提升了40% - 150%。在任務(wù)期間啟用NeON而在不需要時切斷Neon的好處很明顯。很常見的是,不但N e o n引擎可以在任務(wù)完成時切斷,而且整個處理器系統(tǒng)可以節(jié)省更多功耗。
通常一個比較難的選擇是啟用計算組件提前完成計算(且因此切斷時間更長)還是完成計算時及時降低處理器速度以減少功耗。圖6顯示了每次迭代的能耗數(shù)據(jù),這是簡單的基準(Domeika, 2009)。采用不同的指令緩存和浮點協(xié)處理器組合,對于兩個時鐘速度,每個時鐘速度均要運行此基準四次。有兩個清晰的重點。首先,盡管指令緩存和浮點單元均減少了能耗,但是浮點單元比指令緩存的表現(xiàn)更優(yōu)異。
圖6:系統(tǒng)組件電源利用
其次,對于所有配置而言,每次迭代的能耗從本質(zhì)上講是相同的,與時鐘速度無關(guān)。因此,為了更快地完成任務(wù)而啟用所有功能并全速運行要比調(diào)慢時鐘速度更加高效。
多重處理
眾所周知,與調(diào)高單核的功率相比,采用多核可以獲得更高的性能和更好的能效。使用多核系統(tǒng)時,我們必須考慮在不需要時選擇中止一個或多個內(nèi)核。A R M的研究表明,S M PLinux系統(tǒng)中單核循環(huán)的成本是50000個周期(大部分周期用于清除一級緩存),這意味著此操作將在幾百毫秒內(nèi)完成,而不是更短的時間內(nèi)完成,否則其能耗成本將超過其具有的優(yōu)勢。
ARM是主動研究型架構(gòu),其包含兩個內(nèi)核,一個高性能的內(nèi)核用于全功能操作,一個較小的配套內(nèi)核則以較低的性能完成低功率操作。需要較高的處理功率時,系統(tǒng)運行較大的內(nèi)核。任務(wù)完成時,系統(tǒng)可以把所有信息傳遞給小內(nèi)核并關(guān)閉大內(nèi)核。需要逆向信息移動時,再切換回大內(nèi)核。如果這兩個內(nèi)核相連成為相關(guān)系統(tǒng),則切換的能耗成本可降到最低。
關(guān)于操作系統(tǒng)
不巧的是,在操作系統(tǒng)上運行時,應(yīng)用程序員無法這樣靈活處理。緩存配置、S PM使用與否、組件的電源周期等很大程度上都是操作系統(tǒng)架構(gòu)和設(shè)備驅(qū)動程序來專門決定的。但是,應(yīng)用程序員仍然有很多東西需要考慮。
研究已經(jīng)表明,設(shè)計不良的進程間通信(I P C)會大大增加系統(tǒng)的能耗。一個簡單的技術(shù)稱為“矢量化”進程間通信,這種技術(shù)批量處理小的消息并把大量小的消息作為一個大的消息來發(fā)送,這樣通常可以減少上下文的切換開銷。另外,減少進程數(shù)量可明顯降低進程間通信的需求。需要頻繁通信的進程可以合并成一個進程。
在嵌入式Linux中運行的最近研究(Tan, 2003)表明,分析和合理設(shè)計進程間通信2 可以潛在改進能耗多達60%。
結(jié)論
盡管我已經(jīng)強調(diào)了許多領(lǐng)域仍然屬于學(xué)術(shù)研究范圍,但我們現(xiàn)在還是可以做許多工作。結(jié)果相對比較簡單:減少外部內(nèi)存存取,減少指令執(zhí)行,并在不使用某些單元時關(guān)掉它們。
在做出這個結(jié)論的同時,我想起了2 0 0 9年中期在一次培訓(xùn)課上與客戶的一次談話。這些客戶關(guān)心如何在包含了N e o n的C or tex-A8平臺上實現(xiàn)信號處理算法且想要知道個別指令的確切能耗。我解釋說,實際上很多這種信息是未知的,而且不管在什么情況下,很難使用當(dāng)前的工具得出這些信息?;仡櫳衔?,我們已經(jīng)認識到在捕獵大象的這個長期任務(wù)中,這些信息都是無關(guān)緊要的。實際上,客戶要捕獵的大象與房間中的其他大象相比,非常的小。不管是經(jīng)過分析還是持續(xù)跟蹤數(shù)據(jù),都可以得出更好的建議,那就是估算每次實現(xiàn)中涉及的數(shù)據(jù)存取次數(shù)和類型。這樣,再結(jié)合指令計數(shù),可以做出更加明智的選擇。與內(nèi)存存取布置不良相比,個別指令的功耗幾乎無關(guān)緊要。
我們這些軟件開發(fā)人員要繼續(xù)對學(xué)術(shù)和工具供應(yīng)商施加壓力,讓他們在下一代工具中構(gòu)建出這些功能。這不容易但將會實現(xiàn)。
最后,我必須提醒大家所有這些取決于您所用的系統(tǒng)、平臺、應(yīng)用程序、操作系統(tǒng)、電池和用戶。就像俗話說的“優(yōu)勢各有不同”。
評論