如何在A(yíng)RM平臺上開(kāi)發(fā)低功耗的軟件系統
對于個(gè)別計算單元,選擇一種關(guān)機方案是很容易的。對于可以預測需要與否的單元,在不需要時(shí)通過(guò)應用程序或操作系統就可以停止運行這些單元。對于不可預測需要與否的單元,可以通過(guò)按需通電啟動(dòng)系統,也可以在空閑超過(guò)某段時(shí)間之后再自動(dòng)斷電。子系統斷電的時(shí)標可以通過(guò)以下兩方面來(lái)得出:通電但處于空閑狀態(tài)時(shí)的功耗以及睡眠喚醒循環(huán)的能耗。從根本上講,這取決于應用場(chǎng)合。但是,動(dòng)力循環(huán)代碼的簡(jiǎn)單循環(huán)計數將是最明顯的起點(diǎn)。
測量數據表明,N e o n引擎相比C o r tex-A9等內核的運行功率要高大約10%。但是,對于傳統的信號處理算法,其性能提升了40% - 150%。在任務(wù)期間啟用NeON而在不需要時(shí)切斷Neon的好處很明顯。很常見(jiàn)的是,不但N e o n引擎可以在任務(wù)完成時(shí)切斷,而且整個(gè)處理器系統可以節省更多功耗。
通常一個(gè)比較難的選擇是啟用計算組件提前完成計算(且因此切斷時(shí)間更長(cháng))還是完成計算時(shí)及時(shí)降低處理器速度以減少功耗。圖6顯示了每次迭代的能耗數據,這是簡(jiǎn)單的基準(Domeika, 2009)。采用不同的指令緩存和浮點(diǎn)協(xié)處理器組合,對于兩個(gè)時(shí)鐘速度,每個(gè)時(shí)鐘速度均要運行此基準四次。有兩個(gè)清晰的重點(diǎn)。首先,盡管指令緩存和浮點(diǎn)單元均減少了能耗,但是浮點(diǎn)單元比指令緩存的表現更優(yōu)異。

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