陳殿杰,李雨桐,陳凡勝
(北京長城電子裝備有限責任公司,北京 100082)
水聲遙控裝置通過水聲發(fā)射換能器向水下節(jié)點發(fā)送遙控指令,遙控水下節(jié)點完成指定任務。其中遙控接收裝置需在水中超長時間待機。對遙控接收裝置的低功耗設計有利于提高用戶的使用感受?,F(xiàn)階段水聲遙控裝置低功耗設計一般進行硬件的低功耗設計,在硬件設計中,選取性能較高、功耗較低的設備和模塊,適時控制電源。在軟件設計中,按照可靠性、簡潔性和標準化的原則進行編寫,可大大降低對硬件的需求。因此采用硬件軟件相結合、相配合的方法,充分降低系統(tǒng)功耗,延長水聲遙控裝置通海上運行時間,不僅能夠延長設備的使用時間,而且能夠減少資源的浪費。遙控接收裝置的低功耗設計主要從 2方面進行考慮:1)硬件的低功耗設計;2)軟件的低功耗設計。軟件低功耗設計的最根本原則是在保證程序正確運行的大前提下,提高運算速度和占用更少的運行資源。
本文中的遙控接收裝置低功耗軟件優(yōu)化主要從源級低功耗優(yōu)化、算法級低功耗優(yōu)化及編譯級算法優(yōu)化3個方面進行,以達到編譯級匯編語言編寫的程序代碼能夠以最快的速度、占用最少的硬件資源進行正確的運行,從而實現(xiàn)對接收端低功耗的需求。
從普遍意義上講,在功耗優(yōu)化這個問題上,研究者普遍比較關注硬件功耗優(yōu)化,應用各種技術想方設法改進硬件的功耗。比如,在芯片制造工藝上采用更精細的納米技術,不斷降低芯片驅動電壓,改變片內系統(tǒng)結構等。事實上,整個系統(tǒng)的運行管理是由軟件體現(xiàn)的。在硬件基礎一定的情況下,只有將軟件系統(tǒng)對能量的損耗降至最小,才能使整個系統(tǒng)工作于最佳狀態(tài)。軟件設計中,所有頻繁調用的函數(shù)都需要優(yōu)化[1-2]。代碼優(yōu)化是一件非常有意義的事情。優(yōu)化處理是指產生更高效的目標代碼所做的工作。目標代碼占空間更小、執(zhí)行速度更快。低功耗軟件優(yōu)化的原則是基于阿姆達爾定律[3],優(yōu)化經(jīng)常使用的代碼,不經(jīng)常使用的代碼不做較多優(yōu)化考慮(或者完全不優(yōu)化)。
阿姆達爾定律:
式中:S表示固定負載情況下描述并行處理效果的加速比;a表示并行計算部分所占比例;n表示并行處理節(jié)點個數(shù)。
阿姆達爾定律同樣適合低功耗的軟件優(yōu)化,由此低功耗優(yōu)化的基本原則:1)等價原則優(yōu)化后不改變原程序運行的功能;2)有效原則優(yōu)化后產生的目標代碼運行時間較短;3)優(yōu)化后占用空間較小,包括代碼空間和數(shù)據(jù)空間。
一般而言,低功耗的優(yōu)化過程如圖1。其中:中間代碼優(yōu)化表示與硬件無關的優(yōu)化,目標代碼優(yōu)化依賴于硬件的優(yōu)化。
圖1 代碼優(yōu)化過程Fig.1 Code optimization process
根據(jù)以上過程并結合遙控接收裝置的自身特點,從算法級、源程序級(與硬件無關)以及編譯級(與硬件相關)3個方面研究常用的水聲遙控裝置接收軟件低功耗優(yōu)化方法。
水聲遙控裝置接收端系統(tǒng)如圖2所示,接收裝置獲得遙控信號后,首先去載波,然后進行信號搜索,搜到信號后進行跟蹤,并進行多普勒修正,然后由測量信號進行信道估計,根據(jù)估計的結果進行RAKE接收,解碼后得到輸出的信息。
圖2 遙控裝置接收系統(tǒng)框圖Fig. 2 Block diagram of remote control device receiving system
去載波是接收端所有信號處理算法執(zhí)行的大前提,對其進行優(yōu)化具有十分重要的意義。首先對其信號結構進行改造,按照傳統(tǒng)的操作,其流程如圖3。
圖3 去載波流程Fig. 3 Carrier elimination flow
去載波的改進優(yōu)化可分成數(shù)據(jù)流的改進優(yōu)化和數(shù)據(jù)結構的改進優(yōu)化2部分:
1)關于數(shù)據(jù)結構的改變,進行硬件平臺的低功耗性能優(yōu)化時,要建立對內存數(shù)據(jù)進行操作的概念。先分析內存,然后再根據(jù)算法的需要進行合理的分配設置。在本項目中,實現(xiàn)了真正意義的復數(shù)結構。去載波的過程中包絡數(shù)據(jù)的實部和虛部分別放到不同的地址中,進行后續(xù)的處理。改進優(yōu)化后的方案將分開存放包絡數(shù)據(jù)的實部和虛部,放到了數(shù)組內相鄰的2個short型中。從內存的角度看,這一操作是把數(shù)據(jù)放到了一個 4字節(jié)的高位和低位,不僅節(jié)約了內存,實現(xiàn)了內存的優(yōu)化,而且使后續(xù)的編譯級得到優(yōu)化。
2)對數(shù)據(jù)流進行改進優(yōu)化,在原有的算法中硬件中斷到達的時刻,將采集到的接收信號數(shù)據(jù)放到固定的地址,數(shù)據(jù)達到遙控裝置的1個信號周期后進行去載波的處理,處理后的數(shù)據(jù)進行后續(xù)的解碼計算。進行低功耗優(yōu)化后的數(shù)據(jù)流結構如圖5所示,中斷到達后直接進行去載波處理得到基帶信號,累計處理后的基帶信號達到1個周期后再進行后續(xù)算法處理。
圖4 優(yōu)化前去載波流程Fig.4 Carrier elimination flow before optimization
圖5 優(yōu)化后去載波流程Fig.5 Carrier elimination flow after optimization
去載波低功耗優(yōu)化的有益效果在當下步驟主要體現(xiàn)在程序占用內存的大量減少。統(tǒng)計僅對去載波部分進行比較,不包含程序的其他部分,不進行整體比較。在未進行編譯級優(yōu)化及源級優(yōu)化時速度的提高,是由于釋放了大量的內存,程序可以充分使用片內空間,消除了片內外讀寫速度的差異,同時節(jié)省了數(shù)據(jù)搬移的開銷。
要想進一步提高遙控接收裝置的抗多普勒、抗多途能力,就要在接收端采取額外措施——多普勒頻率搜索和多途分量的提取,再加上同步信號搜索和信號的解擴,這將會帶來很大量的相關運算。要進行低功耗的優(yōu)化,僅僅在編譯級進行優(yōu)化效果不是特別明顯,所以要在算法級進行優(yōu)化。一個快速算法,對低功耗性能優(yōu)化有著十分重要的意義。本設計中主要采用了快速沃爾什變換代替快速傅里葉變換。
快速沃爾什變換(FWHT)類似于FFT,WHT也有快速算法FWHT,也可將輸入序列f(x)按奇偶進行分組,分別進行 WHT[4]。FWHT的基本關系為
WHT是將一個函數(shù)變換成取值為+1或-1的基本函數(shù)構成的級數(shù),用它來逼近數(shù)字脈沖信號時要比FFT有利。同時,WHT只需要進行實數(shù)運算,存儲量比 FFT要少得多,運算速度也快得多。沃什-阿達瑪快速轉換圖解與傅里葉快速轉換圖解外觀相似,區(qū)別在于完全沒有復數(shù)乘法。這種特點在大多數(shù)硬件平臺上都占有絕對的優(yōu)勢,其避免了平臺對乘法器的需求和依賴。同時WHT將一個函數(shù)變換成取值為+1或-1,占用的存儲空間小,為硬件平臺的低功耗優(yōu)化帶來了極大的優(yōu)勢。沃什-阿達瑪快速轉換與傅里葉快速轉換相比帶來的效果增益,使其運行速度提高了4.3倍。
雖然水聲遙控裝置接收部分的軟件部分全部采用編譯級匯編代碼進行編寫,但是在編寫匯編程序之前進行了源程序級的 C語言程序設計,然后再進行匯編程序的編寫。所以高效的源程序記得代碼編寫及優(yōu)化是十分必要的,也是后續(xù)匯編程序的基礎。
常用優(yōu)化技術包括:刪除多余運算、循環(huán)不變代碼外提、強度削弱、變換循環(huán)控制條件、合并已知量與復寫傳播、刪除無用賦值等。這些方法在遙控通信的接收裝置的低功耗性能優(yōu)化中同樣有效。具體實施可實例化到堆棧和寄存器的合理利用,避免調用開銷[5],局部變量和使用查找表方面。主要體現(xiàn)在以下幾個方面:
1)堆棧和寄存器的合理利用包括:避免或減少使用本地變量,減少函數(shù)參數(shù)的個數(shù),盡量避免數(shù)據(jù)轉換[6],全局變量合理分配。
2)避免不必要的開銷包括:避免調用的開銷,尤其是循環(huán)的合理利用[7];局部變量的合理使用,應該盡可能地不使用 char和 short類型的局部變量;函數(shù)通??梢栽O計成查找表,這樣可以顯著提升性能;減小運算強度[6],非必要情況不采用除法和取余實現(xiàn)程序;充分利用指令層的并行機制。
由于水聲遙控裝置接收部分對低功耗的要求極高,所以僅僅對軟件部分進行算法的低功耗優(yōu)化及源程序級的低功耗優(yōu)化無法滿足需要。雖然軟件部分全部采用編譯級匯編代碼進行編寫,但是在編寫匯編程序之前進行了源程序級的 C語言程序設計,然后再進行匯編程序的編寫。所以高效的源程序記得代碼編寫及優(yōu)化是十分必要的,也是后續(xù)匯編程序的基礎。
編譯級的低功耗優(yōu)化主要集中在使用并行指令,用有用的指令(取代 NOP)填充延遲間隙,循環(huán)展開,字長優(yōu)化(使用LDW);排流水。
在指令級并行的機器上,程序的運行速度依賴于:程序中潛在的并行、處理器上可用的并行、從串行程序提取并行的能力、在給定的調度約束下發(fā)現(xiàn)最佳并行調度的能力。
指令級并行時,通常是一個處理器在單個時鐘周期內發(fā)射幾個操作。而指令級并行的獲得是通過使用流水線技術指令流水線和分支延遲。發(fā)現(xiàn)應該執(zhí)行一個分支而不是直接后繼,轉向一個分支時會引起取分支目的地址指令的延遲并引起指令流水線“打嗝”[8]??梢酝ㄟ^使用硬件,根據(jù)分支的執(zhí)行歷史來預測分支結果并從預測的目的地址預取指令。分支延遲不可避免,因為分支預測會發(fā)生偏差,此部分可以通過排流水的方法來解決。此處不過多說明。
NOP指令相當于未優(yōu)化,消除不必要的NOP指令,在很大程度上能提高程序的運算速度避免不必要的時序浪費[8]。其算法優(yōu)化的沃爾什哈達瑪變換中的速度提高,本質上可以看成是一種有效的去延遲間隙。
在不過度占用程序空間的情況下,展開循環(huán)來提高程序的運算速度是一種非常有效的方法。
字長優(yōu)化是指,在對一段連續(xù)地址內存的數(shù)據(jù)進行運算時,打破常規(guī)的按數(shù)據(jù)類型按址取數(shù)的方法,一次性獲取需要的地址的盡可能多的數(shù)據(jù)量的方法。例如short型數(shù)據(jù)一次獲取2個或4個short數(shù)據(jù)再進行計算,取數(shù)只占用一個指令時序。在前面涉及的沃爾什哈達瑪變換就十分適用這種方式。
這種方法可以運用到去載波的算法中,大大提高了運算速度,在之后的排流水結構中能大大調高程序的運行速度。尤其是在運算過程中,數(shù)據(jù)的讀取及乘法計算占運算時間的大部分時間,所以此部分優(yōu)化極有意義。
流水線是一種在時間上串行,在空間上并行的技術。將整個電路劃分為若干個流水線級,流水線每級之間設置寄存器鎖存上一級輸出的數(shù)據(jù);每一級只完成數(shù)據(jù)處理的一部分;一個時鐘周期完成一級數(shù)據(jù)處理,然后在下一個時鐘到來時將處理后的數(shù)據(jù)傳遞給下一級;第1組數(shù)據(jù)進入流水線后,經(jīng)過1個時鐘周期傳到第2級,同時第2組數(shù)據(jù)進入第1級,數(shù)據(jù)隊列依次前進。每組數(shù)據(jù)都要經(jīng)過所有的流水級后才能得到最后的計算結果,但是對整個流水而言,每個時鐘都能計算出一組結果,所以平均計算一組數(shù)據(jù)只需要1個時鐘周期的時間,這樣就大大提高了數(shù)據(jù)處理的速度。
排流水能使關鍵路徑縮短,從而提高時鐘速度,或者在同樣速度下降低功耗;同時流水的并行處理,多個輸入在一個時鐘周期內并行地處理,可使有效速度提高與并行級數(shù)相當?shù)谋稊?shù),同樣也可以降低功耗。
經(jīng)軟件功耗優(yōu)化改進后,在單片機上進行了多次的時間測試,測試條件為相同工作主頻。未改進前信號的去載波、搜索、跟蹤時間分別為 2.0 s、2.7 s、2.0 s。優(yōu)化后去載波、搜索、跟蹤時間分別為0.11 s、0.14 s、0.13 s。經(jīng)過統(tǒng)計最長解碼時間提高了近20倍。同時算法對空間的需求從原來的8 MB空間的需求降低為313 KB的需要,不需要硬件平臺提高額外的存儲空間。
優(yōu)化后可以對硬件進行無外部存儲空間設計,并且降主頻正常工作。經(jīng)測試,原硬件功耗為130 mW,優(yōu)化后約為12 mV,大大降低了平臺的功耗,相同電池電量的情況下可在海上進行更長時間的工作。
圖6 低功耗優(yōu)化測試仿真Fig.6 Low power optimization test simulation
在水聲遙控裝置項目中,為了實現(xiàn)接收端的低功耗穩(wěn)定運行,項目中采用了編譯級的機器語言(匯編語言)進行程序的編寫。在過程中經(jīng)歷了算法優(yōu)化設計、源程序優(yōu)化設計到將源程序轉化成所需的機器語言并進行手工流水的過程,極大地提高了程序的運行速度,降低了程序數(shù)據(jù)空間的占有率,使得在硬件運算芯片上實現(xiàn)算法設計成為可能,無需額外設計外掛存儲芯片,大大降低了設備的功耗。同時,在同樣的主頻下,運行程序的時間提高了近20倍,這種有利的條件可以使算法程序在一個更低的主頻條件下進行運算,對設備的低功耗運行也是十分有益的。