摘 "要: 數(shù)據(jù)實時處理能力是雷達(dá)信號處理等實時系統(tǒng)的重要指標(biāo),提高軟件運行效率是系統(tǒng)軟件設(shè)計中必須要考慮的問題。大批量數(shù)據(jù)讀取和存儲操作存在于信號處理各工作階段,對其進行充分優(yōu)化是信號處理軟件設(shè)計的重要組成部分。在此以ADSP TS201平臺數(shù)據(jù)轉(zhuǎn)存為例,描述了軟件優(yōu)化的設(shè)計思路和處理方法,運行結(jié)果表明,充分應(yīng)用DSP并行處理特性和寬數(shù)據(jù)操作,采用匯編語言編程,可以使軟件運行效率得到顯著提高。
關(guān)鍵詞: TS201; 匯編語言; 優(yōu)化設(shè)計; 指令并行; 信號處理
中圖分類號: TN919?34; TP312 " " " " " " " " " "文獻標(biāo)識碼: A " " " " " " " " " 文章編號: 1004?373X(2015)02?0046?03
Software optimization design based on TS201
REN La?mei, GU Kang, LI Zeng?yuan
(Shaanxi Huanghe Group Co., Ltd., Xi’an 710043, China)
Abstract: The capability of real?time data processing is a significant index for evaluation of real?time processing systems, such as radar signal processing system. Improvement of software efficiency must be considered in system software design. Due to the fact that the readout and storage of mass data exist in every stage of data processing, the sufficient optimization becomes imperative for design of signal processing software. Taking data dump based on ADSP TS201 platform for example, the principle of optimization design and its processing approach are illuminated. Preliminary results verify that the software running efficiency can be dramatically improved by the parallel processing and broad data operation with DSP, as well as application of assembler language programming.
Keywords: TS201; assemble language; optimization design; instruction parallel; signal processing
雷達(dá)作為一種探測、捕獲及跟蹤目標(biāo)的現(xiàn)代化設(shè)備,要求具有較高的實時處理能力。信號處理系統(tǒng)作為雷達(dá)的重要組成部分,負(fù)責(zé)對回波信號進行處理并檢測目標(biāo)信號,是雷達(dá)系統(tǒng)中數(shù)據(jù)處理量最大、運算復(fù)雜度最高的部分,其實時處理能力的提高能夠達(dá)到提升雷達(dá)系統(tǒng)整體性能的目的[1?2]。對信號處理軟件的優(yōu)化通常需結(jié)合具體DSP處理器平臺進行,本文主要介紹了基于ADSP TS201的軟件優(yōu)化設(shè)計方法。
1 "優(yōu)化設(shè)計方法
軟件的優(yōu)化設(shè)計通常包括如下兩部分:
(1) 對軟件算法的優(yōu)化,即通過尋找最適合硬件實現(xiàn)的算法,提高軟件運行效率;
(2) 對代碼的優(yōu)化,即通過優(yōu)化代碼的組合及順序,提高代碼執(zhí)行效率。當(dāng)實現(xiàn)算法確定后,軟件的優(yōu)化主要是代碼的優(yōu)化。
為了提高軟件執(zhí)行效率需采用匯編語言進行編程,通過充分利用CPU資源,使其在最少的時間完成最多的指令。ADSP TS201是ADI的一款支持浮點數(shù)運算的高性能數(shù)字信號處理芯片,其內(nèi)部包含兩個運算模塊(X、Y模塊)及2個整數(shù)運算寄存器組(J、K寄存器組),雙運算模塊及雙整數(shù)運算寄存器組支持并行操作。4條相互獨立的128位寬度的內(nèi)部數(shù)據(jù)總線分別連接6個4 Mb內(nèi)部存儲器塊中的一個,提供4字的數(shù)據(jù)、指令及I/O訪問。內(nèi)部靜態(tài)超標(biāo)量結(jié)構(gòu)使得DSP每周期可執(zhí)行多達(dá)4條指令,24個16位定點運算和6個浮點運算[3?5]。
結(jié)合ADSP TS201的硬件結(jié)構(gòu),對軟件的優(yōu)化主要可從如下幾個方面進行考慮:充分利用雙運算模塊和雙整型ALU,進行并行操作;使用自增的指針尋址方式,減小尋址時間;充分利用單周期多指令操作。
2 "軟件優(yōu)化實例
通常雷達(dá)信號處理包括脈沖壓縮、MTI、MTD、恒虛警等一系列處理[6?8]。這些處理包含大量的乘法、加法等運算,計算處理較為復(fù)雜,不可能將處理中間結(jié)果直接存儲在寄存器中用于后續(xù)處理,因此需要將各算法處理結(jié)果及時存儲在DSP內(nèi)存中,這樣就要對數(shù)據(jù)進行反復(fù)地讀取和存儲[9?10]。數(shù)據(jù)讀取和存儲操作的優(yōu)化設(shè)計就成為軟件優(yōu)化中的重要部分。本文就以包含數(shù)據(jù)讀取和存儲的數(shù)據(jù)轉(zhuǎn)存操作為例,介紹軟件的優(yōu)化設(shè)計方法。數(shù)據(jù)轉(zhuǎn)存操作要求將數(shù)組Source中的200項數(shù)據(jù)轉(zhuǎn)移到數(shù)組Destination中。該功能可使用C語言實現(xiàn),也可以使用匯編語言編寫。
2.1 "方案1:C語言for循環(huán)實現(xiàn)數(shù)據(jù)轉(zhuǎn)移
采用C語言編程,最簡單的方法是用for循環(huán)語句進行數(shù)據(jù)的循環(huán)讀取和存儲,如下所示:
int Trans_loop;
for (Trans_loop =0; Trans_loop lt;200; Trans_loop ++)
{ " " Source[Trans_loop] = Destination[Trans_loop]; }
該段代碼經(jīng)編譯器編譯后產(chǎn)生的匯編代碼如表1所示。
表1 for循環(huán)語句執(zhí)行過程
注:表中的黑體字表示插入了等待周期。
表1匯編代碼中,第2~16行循環(huán)執(zhí)行200次,實現(xiàn)200項數(shù)據(jù)的轉(zhuǎn)移。一個數(shù)據(jù)的轉(zhuǎn)移需15行指令,若無等待周期需消耗15個指令周期,則轉(zhuǎn)存200項數(shù)據(jù)總共需要1+15×200=3 001個指令周期。實際運行中,有時會由于數(shù)據(jù)不穩(wěn)定,DSP自動插入等待周期;部分跳轉(zhuǎn)指令會打斷流水的執(zhí)行,也會插入等待周期,導(dǎo)致實際消耗指令周期大于理論值。表1中給出了實際的指令周期消耗數(shù),表中的黑體字表示插入了等待周期,其中第3行、第4行、第8行、第11行的插入是因為指令中用了立即數(shù),此指令在執(zhí)行時需從程序存儲塊中取出數(shù)據(jù),導(dǎo)致指令執(zhí)行時間增加??傊噶钪芷谟嬎銜r最后加10是因為循環(huán)結(jié)束時,PC預(yù)測錯誤,指令流水被打斷,系統(tǒng)插入10個等待周期,該段代碼總共消耗4 823個指令周期。
2.2 "方案2:匯編語言雙字轉(zhuǎn)移
第2種方案是用匯編語言編寫實現(xiàn)數(shù)據(jù)轉(zhuǎn)移,編寫代碼如下:
行號 指令
1 j10=j31+_Source;;
2 k10=k31+_Source+2;xr0 = 200;;
3 j0=j31+_Destination;;
4 k0=k31+_Destination+2;;
5 xr0=lshift r0 by ?2;;
6 lc0=xr0;;
7 xr1:0=l[j10+=4];;
8 transfer_begin:
9 yr1:0=l[k10+=4];l[j0+=4]=xr1:0;;
10 .align_code 4;
11 if nlc0e,jump transfer_begin; l[k0+=4]=yr1:0;xr1:0=l[j10+=4];;
與方案1相比,該方案使用TS201的零開銷循環(huán)計數(shù)器lc0減少循環(huán)開銷;通過j9和j10地址自增尋址減小尋址時間;并行運行雙寄存器減少存取次數(shù);利用DSP寬數(shù)據(jù)總線進行數(shù)據(jù)雙字訪問,減少循環(huán)次數(shù),理論上總共需要107個指令周期。實際運行時,第9行、第11行的在前兩次執(zhí)行時由于數(shù)據(jù)不穩(wěn)定會插入等待周期,當(dāng)Source與Destination處于相同存儲塊時,由于第9行和第11行中讀數(shù)和寫數(shù)是對同一存儲塊進行的,而DSP對同一存儲塊分配的數(shù)據(jù)總線不能同時進行讀和寫,因此第9行和第11行執(zhí)行時插入等待周期,各消耗2個指令周期,總共消耗246個周期;當(dāng)Source與Destination處于不同存儲塊時,DSP的不同數(shù)據(jù)總線可以同時訪問兩個存儲塊,第9行和第11行的執(zhí)行不需額外等待,共消耗116個指令周期。
2.3 "方案3:匯編語言四字轉(zhuǎn)移
由于200是8的整數(shù)倍,因此還可以考慮采用128位數(shù)據(jù)總線進行4字訪問,此時代碼如下:
行號 指令
1 j10=j31+_Source;;
2 k10= k31+_Source+4;xr0 = 200;;
3 j0=j31+_Destination;;
4 k0=k31+_Destination+4;;
5 xr0=lshift r0 by ?3;;
6 lc0=xr0;;
7 xr3:0=q[j10+=8];;
8 transfer_begin:
9 yr3:0=q[k10+=8];q[j0+=8]=xr3:0;;
10 .align_code 4;
11 if nlc0e,jump transfer_begin;q[k0+=8]=yr3:0;
xr3:0=q[j10+=8];;
與方案2相比,該方案將雙字訪問變?yōu)?字訪問,進一步減少了讀取次數(shù),理論消耗57個指令周期。實際執(zhí)行時由于第7行到第9行、第9行到第11行以及第11行到第9行2個連續(xù)的指令行中都有對xr1:0和yr1:0寄存器的操作,當(dāng)數(shù)據(jù)未穩(wěn)定時,會插入等待周期。當(dāng)Source與Destination處于相同存儲塊時,總共消耗132個周期。當(dāng)Source與Destination處于不同存儲塊時,總共消耗66個指令周期。
從3種方案的執(zhí)行結(jié)果可以看到,通過充分利用指令并行、寬數(shù)據(jù)總線以及零開銷循環(huán)計數(shù)器,并將源數(shù)據(jù)區(qū)和目的數(shù)據(jù)區(qū)分配到不同的存儲塊中,對匯編代碼進行一步步的優(yōu)化,方案2可以在116個周期內(nèi)完成方案1中需用4 823個指令周期才能完成的任務(wù),效率提高了約40倍;方案3可以在66個指令周期內(nèi)完成,相對方案1效率提高了約70倍。
需要說明的是,此時統(tǒng)計的指令周期數(shù)包含了循環(huán)運行前的準(zhǔn)備計算,這些計算與循環(huán)次數(shù)無關(guān),此處僅以200個數(shù)據(jù)為例,當(dāng)轉(zhuǎn)存數(shù)據(jù)越大時,實際的效率差異越大。方案3要求使用存儲區(qū)是雙字對齊的,方案4要求存儲區(qū)都是4字對齊的,這要求在數(shù)組定義時使用關(guān)鍵字align進行設(shè)置。
3 "結(jié) "語
通過充分利用指令并行、寬數(shù)據(jù)總線以及零開銷循環(huán)計數(shù)器,可以顯著提高數(shù)據(jù)轉(zhuǎn)移的運行效率。本文所述方法為軟件優(yōu)化中的基礎(chǔ)方法,更多的方法可結(jié)合具體算法進行,包括充分利用雙運算模塊和雙整型ALU進行并行操作、合理安排指令順序減少指令等待延時充分發(fā)揮軟件流水作用、將程序和數(shù)據(jù)或同一指令周期中涉及的數(shù)據(jù)放在不同存儲器塊中、循環(huán)展開等[11?13]。數(shù)據(jù)的讀取與存儲是所有算法實現(xiàn)的基礎(chǔ),本文所述優(yōu)化處理方法可應(yīng)用到各類需要對大批量數(shù)據(jù)進行處理的算法中。本文以AD公司TS201為例進行了說明,對于諸如TI6678等其他DSP處理器,雖然具體指令有所不同,但優(yōu)化處理的思路是同樣適用的。
參考文獻
[1] 蘇濤.實時信號處理系統(tǒng)設(shè)計[M].西安:西安電子科技大學(xué)出版社,2005.
[2] Analog Devices. ADSP?TS201 TigerSHARC processor programming reference (1.0) [R]. USA: Analog Devices, 2004.
[3] Analog Devices. ADSP?TS201 TigerSHARC Processor hardware reference (1.1) [R]. USA: Analog Devices, 2004.
[4] 劉書明,羅勇江.ADSP TS20XS 系列DSP原理與應(yīng)用設(shè)計[M].北京:電子工業(yè)出版社,2007.
[5] 羅軍.基于TS20X DSP的機載雷達(dá)實時信號處理[D].成都:電子科技大學(xué),2004.
[6] 韓婧.微波稀布陣?yán)走_(dá)目標(biāo)檢測技術(shù)的設(shè)計與實現(xiàn)[D].西安:西安電子科技大學(xué),2010.
[7] 李軍華.脈沖壓縮線性調(diào)頻測距系統(tǒng)信號處理技術(shù)研究[D].南京:南京理工大學(xué),2007.
[8] 吳旖.雷達(dá)信號恒虛警檢測處理研究[D].南京:南京理工大學(xué),2009.
[9] 夏金艷.某末制導(dǎo)雷達(dá)信號處理機系統(tǒng)設(shè)計與實現(xiàn)[D].西安:西安電子科技大學(xué),2009.
[10] 吳順君,梅曉春.雷達(dá)信號處理和數(shù)據(jù)處理技術(shù)[M].北京:電子工業(yè)出版社,2010.
[11] 郭淑婷.DSP匯編語言優(yōu)化設(shè)計[J].河南師范大學(xué)學(xué)報:自然科學(xué)版,2009,37(1):151?154.
[12] Analog Devices. Writing efficient floating?point FFTs for ADSP?TS201 TigerSHARC processors [R]. USA: Analog Devices, 2004.
[13] 劉浪,陳伯孝,任臘梅.TS20XS系列DSP程序優(yōu)化設(shè)計方法及應(yīng)用[J].火控雷達(dá)技術(shù),2011(3):66?71.