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