• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      TS20XS系列DSP程序優(yōu)化設(shè)計(jì)方法及應(yīng)用

      2011-06-22 12:46:36陳伯孝任臘梅
      火控雷達(dá)技術(shù) 2011年3期
      關(guān)鍵詞:存儲器寄存器延時(shí)

      劉 浪 陳伯孝 任臘梅

      (西安電子科技大學(xué) 西安 710071)

      1 引言

      在工程實(shí)踐中為了使復(fù)雜的算法能夠滿足實(shí)時(shí)性的要求,需要充分發(fā)揮DSP的高速處理能力,提高軟件的執(zhí)行效率,使處理器能夠以較高的性能實(shí)現(xiàn)設(shè)計(jì)的要求。一般的程序優(yōu)化的方法主要有[1]:在處理器允許的情況下盡量采用并行指令來實(shí)現(xiàn)相應(yīng)的運(yùn)算功能;將算法中的循環(huán)部分展開,充分利用軟件流水線的操作以獲得最大的并行性能,盡量避免流水線延時(shí);對算法的數(shù)學(xué)表達(dá)式進(jìn)行重建,使得重建后的工程實(shí)現(xiàn)算法更適合處理器的架構(gòu)。本文根據(jù)TS201S系列DSP內(nèi)部的結(jié)構(gòu)特點(diǎn)和指令的控制方式,以TS201S為例分別從DSP兩組寄存器組的同時(shí)使用、IF-DO-ELSE指令的靈活運(yùn)用、系數(shù)存儲單元的合理分配、指令間延時(shí)的減少、雙整型邏輯運(yùn)算單元的綜合運(yùn)用等方面介紹DSP程序的優(yōu)化設(shè)計(jì)方法。

      2 TS201S DSP的內(nèi)部結(jié)構(gòu)

      ADSP TS201S DSP內(nèi)部結(jié)構(gòu)如圖1所示[1]。主要特點(diǎn)有:兩個(gè)獨(dú)立的雙運(yùn)算模塊(X-ALU和YALU),使TS201S DSP具有雙核處理能力;兩組獨(dú)立的整型邏輯單元可以同時(shí)對核內(nèi)存儲器、外部存儲器、其它處理器的共享存儲單元尋址;4組相互獨(dú)立的128位寬度的內(nèi)部數(shù)據(jù)總線,借助于交叉連接器與每個(gè)內(nèi)部存儲塊相連,提供4字長的數(shù)據(jù)、指令及I/O的訪問。

      圖1 TS201S處理器內(nèi)核結(jié)構(gòu)[1]

      3 程序優(yōu)化設(shè)計(jì)方法

      在一個(gè)程序中,循環(huán)體內(nèi)的指令行(TS201S DSP一個(gè)時(shí)鐘周期執(zhí)行一個(gè)指令行,一個(gè)指令行中最多可有四條指令)執(zhí)行次數(shù)最多,程序優(yōu)化的重點(diǎn)在于如何減少程序中循環(huán)體內(nèi)指令行的執(zhí)行周期。特別對于多重循環(huán),嵌套越深,循環(huán)程序的優(yōu)化對提高整個(gè)程序的執(zhí)行效率的作用就越大。以一個(gè)兩層循環(huán)為例,若外循環(huán)次數(shù)為n,內(nèi)循環(huán)次數(shù)為m,如果在內(nèi)循環(huán)中通過優(yōu)化使得循環(huán)所需的指令執(zhí)行周期數(shù)減少1個(gè),則整個(gè)程序可節(jié)省大約(m·n)個(gè)指令周期。可見,減少循環(huán)體內(nèi)指令行的執(zhí)行周期數(shù),整個(gè)程序指令執(zhí)行周期數(shù)就會(huì)隨循環(huán)次數(shù)成倍的減少。

      下面從幾個(gè)方面介紹減少指令執(zhí)行周期數(shù)的方法。

      3.1 DSP兩個(gè)寄存器組的使用

      TS201S處理器內(nèi)核中有兩個(gè)運(yùn)算模塊[1],每個(gè)模塊中各有一組32個(gè)32位的寄存器,分別稱為X寄存器組和Y寄存器組。在編寫程序時(shí)要充分發(fā)揮DSP的雙核處理能力,盡量同時(shí)使用X和Y寄存器組,使得循環(huán)的執(zhí)行次數(shù)僅為使用單核處理時(shí)的一半,可使得運(yùn)算量減少,在理論上可以使得運(yùn)算效率提高50%。但是在有些情況下當(dāng)循環(huán)次數(shù)減少的同時(shí),循環(huán)中也會(huì)增加相應(yīng)的處理,使得循環(huán)中的指令行增多,最終會(huì)使得運(yùn)算效率的提高達(dá)不到50%。

      3.2 IF-DO-ELSE指令的使用

      在條件判斷時(shí)使用該指令,可以使在條件成立或不成立時(shí)要執(zhí)行的指令和條件判斷指令在同一時(shí)鐘周期運(yùn)行,以此提高指令的并行性[4],從而提高程序的運(yùn)算效率。在某些情況下還可以省去跳轉(zhuǎn)指令,進(jìn)而減少跳轉(zhuǎn)指令帶來的延時(shí),進(jìn)一步提高程序的運(yùn)算效率。

      例如,在雷達(dá)信號處理中,經(jīng)常需要從動(dòng)目標(biāo)檢測(MTD)處理結(jié)果中對相同距離單元、不同多普勒通道的信號中選取幅度最大值作為原始視頻信號,如圖2所示。假定距離單元數(shù)為M,多普勒單元數(shù)為N。第n個(gè)距離單元的輸出信號:

      式中A(m,n)代表MTD求模后的第n個(gè)距離單元、第m個(gè)多普勒通道中信號的幅值。

      圖3、圖4給出了采用不同編程方式實(shí)現(xiàn)上述功能的三種方案。表1中同時(shí)給出了當(dāng)M=380,N=8時(shí)程序所需的指令執(zhí)行周期數(shù)??梢?,按圖4中的方案B進(jìn)行編程比圖3中的方案進(jìn)行編程和圖4中的方案A進(jìn)行編程的程序所需指令執(zhí)行周期數(shù)分別減少了62%和53%。進(jìn)而說明同時(shí)使用X和Y寄存器組比僅使用X或Y寄存器組時(shí)程序的執(zhí)行效率要高,在條件判斷時(shí)使用IF-DO-ELSE指令會(huì)進(jìn)一步提高程序的執(zhí)行效率。

      表1 M=380,N=8時(shí)三種方案所需的指令執(zhí)行周期數(shù)

      3.3 濾波系數(shù)存儲單元的合理分配

      TS201S[1]可以對存儲器進(jìn)行單字、雙字、四字不同長度的讀寫操作。當(dāng)進(jìn)行單字寄存器的讀寫操作時(shí)對地址指針沒有特殊要求,但是在進(jìn)行雙字寄存器或四字寄存器的讀寫操作時(shí),地址指針必須分別可被2整除或被4整除。

      當(dāng)對同一存儲區(qū)的數(shù)據(jù)進(jìn)行訪問時(shí),假設(shè)每次只進(jìn)行數(shù)據(jù)的讀取不進(jìn)行別的操作運(yùn)算,分別進(jìn)行單字寄存器、雙字寄存器、四字寄存器讀取時(shí),單字寄存器讀取所用時(shí)間為雙字寄存器所用時(shí)間的2倍,雙字寄存器讀取所用時(shí)間為四字寄存器所用時(shí)間的2倍。所以在進(jìn)行存儲區(qū)的讀寫操作時(shí)應(yīng)盡量使用四字寄存器的加載或存儲訪問。此時(shí)就要求要讀寫的數(shù)據(jù)存儲區(qū)的起始地址要是四的倍數(shù)。但是有時(shí)要讀寫的數(shù)據(jù)的存儲起始地址并不是四的倍數(shù),這時(shí)可以將要讀的數(shù)據(jù)通過補(bǔ)零的辦法使其存儲起始地址成為四的倍數(shù),例如對9組脈壓數(shù)據(jù)進(jìn)行FIR濾波時(shí),一般事先將這9組FIR濾波器系數(shù)存儲在DSP內(nèi)部的一段存儲區(qū)中,在濾波時(shí)分別讀取這9組系數(shù)進(jìn)行濾波處理,但是9組系數(shù)每組按實(shí)虛部存儲,所以每組系數(shù)的數(shù)據(jù)量為18,則下一組濾波器系數(shù)的起始地址不是4的倍數(shù),此時(shí)在讀取下一組濾波器系數(shù)時(shí)就不能進(jìn)行4寄存器的讀取訪問,但是通過在每組系數(shù)后邊補(bǔ)兩個(gè)零使每組系數(shù)的數(shù)據(jù)量為20,就可進(jìn)行四字寄存器的訪問。這樣使得FIR濾波器系數(shù)所需的存儲空間變大,所以稱此辦法為犧牲空間換時(shí)間法。圖5為補(bǔ)零前后9組FIR濾波器系數(shù)存儲方式。圖中“實(shí)1n”和“虛1n”分別指第一組濾波器的第n個(gè)系數(shù)的實(shí)部和虛部。

      3.4 雙整型邏輯運(yùn)算單元的綜合運(yùn)用

      TS201S共有兩塊雙整型邏輯運(yùn)算單元(IALU)寄存器組,分別為J-IALU寄存器組和K-IALU寄存器組,每個(gè)IALU寄存器組包含32個(gè)數(shù)據(jù)寄存器和8個(gè)專用的循環(huán)緩沖尋址寄存器[1]。IALU中所有寄存器都是32位寬,也都是存儲器映射寄存器[1]。J-IALU寄存器組的寄存器是J31~J0,K-IALU寄存器組的寄存器是K31~K0。除了J31和K31外,這些寄存器都是通用的,且用于保存整型數(shù)據(jù)和用于存儲區(qū)的尋址[1]。當(dāng)對同一組數(shù)據(jù)進(jìn)行相同運(yùn)算處理時(shí),可以在同一指令行中讀取本次要進(jìn)行運(yùn)算的數(shù)據(jù),存儲上一次的運(yùn)算結(jié)果,這就要求在循環(huán)體外邊先進(jìn)行一次處理,這樣會(huì)提高指令間的并行性,進(jìn)而提高算法的運(yùn)算效率。但是按照TS201S的IALU指令約束[1]:在同一指令行中,J-IALU只能執(zhí)行一條指令,K-IALU也只能執(zhí)行一條指令??梢栽谕恢噶钚羞M(jìn)行一條J-IALU指令和一條K-IALU指令操作。這就要求分別使用J-IALU寄存器組中的一個(gè)寄存器和K-IALU寄存器組中的一個(gè)寄存器,分別指向要讀取的存儲區(qū)和要寫入的存儲區(qū),從而在同一指令行中使用J-IALU寄存器組中的一個(gè)寄存器進(jìn)行讀取操作,用K-IALU寄存器組中的一個(gè)寄存器進(jìn)行存儲操作,反之亦然。

      TS201S的內(nèi)部總線借助于交叉連接器與每個(gè)內(nèi)部存儲塊相連,且交叉連接器不能直接訪問存儲器,需要通過存儲器緩沖(包括預(yù)取數(shù)緩沖、讀緩沖、回存緩沖和高速緩沖)才能訪問存儲器,所以在訪問存儲器時(shí)存在存儲器緩沖是否命中的問題。如果所訪問的數(shù)據(jù)未在存儲器緩沖中,存儲器緩沖將花費(fèi)一些時(shí)鐘周期來訪問存儲器中的數(shù)據(jù),所以要采用相應(yīng)的措施來提高存儲器緩沖的命中率。由于預(yù)取數(shù)緩存的預(yù)取數(shù)操作是將存儲器指定地址對8取模后[5],將所在地址的8個(gè)32位字?jǐn)?shù)據(jù)傳輸?shù)筋A(yù)取數(shù)緩存內(nèi),數(shù)據(jù)的存儲起始地址最好是8的整數(shù),可避免第一次預(yù)取數(shù)操作取出無用數(shù)據(jù);指針的位移量盡可能不要超過8;所以一般要求對于存儲在同一存儲區(qū)并進(jìn)行相同處理的數(shù)據(jù),盡量使用同一指針;數(shù)據(jù)處理根據(jù)指針的方向順序進(jìn)行。

      3.5 減少指令間的延時(shí)

      對剛開始編寫TS201S匯編程序的設(shè)計(jì)者,往往存在一個(gè)誤區(qū):認(rèn)為程序中使用的指令行越少,程序的執(zhí)行效率越高,這是由于沒有考慮指令間的延時(shí)狀態(tài),而延時(shí)狀態(tài)并不是程序[1],也不是由用戶編寫的,在程序和反匯編程序中并不能直接觀察到。在延時(shí)狀態(tài)中,處理器基本處于空閑狀態(tài),僅僅是在等待延時(shí)的結(jié)束,而并不執(zhí)行任何指令,那么延時(shí)狀態(tài)的存在意味著處理器要浪費(fèi)一些指令周期,所以有時(shí)可能程序的并行程度設(shè)計(jì)得很好,但是程序的執(zhí)行效率反而下降。

      處理器的流水線執(zhí)行指令方式在執(zhí)行不同的指令行時(shí)會(huì)引起一些開銷,影響這些開銷的因素主要有指令間的相關(guān)和資源的沖突。

      對于指令m和指令n,如果指令n要用到指令m產(chǎn)生的結(jié)果,則稱指令n數(shù)據(jù)相關(guān)于指令m[2]。在上一個(gè)指令周期運(yùn)算的結(jié)果,如果在下一個(gè)指令周期中立刻作為源操作數(shù)使用,這兩條指令之間就存在數(shù)據(jù)相關(guān)。這時(shí),處理器會(huì)根據(jù)指令的不同在這兩條指令之間插入一定的延時(shí)狀態(tài),而在這段時(shí)間內(nèi),處理器基本上是處于空閑狀態(tài),僅僅在等待延時(shí)狀態(tài)的結(jié)束,而不執(zhí)行任何指令。在程序設(shè)計(jì)過程中,如果能避免延時(shí)或充分利用延時(shí)再進(jìn)行一些運(yùn)算,就能實(shí)現(xiàn)程序的進(jìn)一步優(yōu)化。

      資源沖突是內(nèi)部總線試圖進(jìn)行處理器的存儲器訪問時(shí)[1,3],相應(yīng)的存儲空間處于繁忙狀態(tài)或者沖突時(shí)產(chǎn)生的,所以在同一指令行中如果同時(shí)出現(xiàn)存儲指令和讀取指令時(shí)應(yīng)注意這一問題。建議對同一程序中的不同緩存區(qū)分配在不同的存儲區(qū)(TS201S共有6個(gè)4Mbits的存儲區(qū)),從而減少資源沖突,提高程序的運(yùn)行效率。

      例如,在三脈沖對消過程中,需要在每個(gè)距離單元對三個(gè)脈沖重復(fù)周期的回波信號進(jìn)行處理。在第m個(gè)距離單元、第n個(gè)脈沖重復(fù)周期的輸出信號:

      表2給出了當(dāng)M=380時(shí)采用不同編程方案實(shí)現(xiàn)上述功能的所需的指令周期數(shù),可見方案B的執(zhí)行效率比方案A提高了16%。進(jìn)而說明運(yùn)用雙整型邏輯運(yùn)算單元IALU比只采用一個(gè)整型邏輯運(yùn)算單元IALU可減少指令間延時(shí),進(jìn)而提高程序的執(zhí)行效率。

      表2 M=380時(shí)方案A和B所需的指令執(zhí)行周期數(shù)

      圖6 三脈沖對消時(shí)的程序流圖

      4 結(jié)論

      本文分別從DSP兩組寄存器組的使用、IF-DOELSE指令的使用、系數(shù)存儲單元的合理分配、指令間延時(shí)的減少、雙整型邏輯運(yùn)算單元的綜合運(yùn)用幾方面說明如何對程序進(jìn)行優(yōu)化,并給出了實(shí)例,從給出的實(shí)例可以看出本文提出的優(yōu)化方法是切實(shí)可行的。本文所述的優(yōu)化方法同時(shí)適用于TS20XS系列DSP程序的優(yōu)化,在其它DSP中可借鑒。

      [1]劉書明,羅勇江.ADSP TS20XS系列DSP原理與應(yīng)用設(shè)計(jì)[M].北京:電子工業(yè)出版社,2007.

      [2]John L.Hennessy,David A.Patterson(鄭緯民等譯).計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)-量化研究方法[M].北京:電子工業(yè)出版社,2004.

      [3]Analog Device Inc.ADSP-TS201TigerSHARC Processor Hardware Reference,2003.

      [4]Analog Device Inc.ADSP-TS201TigerSHARC Processor Programming Reference,2003.

      [5]錢誠.基于DSP雷達(dá)信號參數(shù)估計(jì)的準(zhǔn)實(shí)時(shí)處理方法研究[D].南京航空航天大學(xué)碩士學(xué)位論文,2008.

      [6]蘇濤,趙峰,盧剛.高速DSP新技術(shù)在雷達(dá)信號處理中的應(yīng)用[J].火控雷達(dá)技術(shù),2005.

      [7]www.analog.com.

      猜你喜歡
      存儲器寄存器延時(shí)
      靜態(tài)隨機(jī)存儲器在軌自檢算法
      基于級聯(lián)步進(jìn)延時(shí)的順序等效采樣方法及實(shí)現(xiàn)
      Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
      分簇結(jié)構(gòu)向量寄存器分配策略研究*
      Two-dimensional Eulerian-Lagrangian Modeling of Shocks on an Electronic Package Embedded in a Projectile with Ultra-high Acceleration
      存儲器——安格爾(墨西哥)▲
      桑塔納車發(fā)動(dòng)機(jī)延時(shí)熄火
      光控觸摸延時(shí)開關(guān)設(shè)計(jì)
      河南科技(2014年23期)2014-02-27 14:19:00
      基于Nand Flash的高速存儲器結(jié)構(gòu)設(shè)計(jì)
      高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
      腾冲县| 海兴县| 宁远县| 新河县| 武乡县| 屯昌县| 龙口市| 贡觉县| 奈曼旗| 恩平市| 昭苏县| 收藏| 平江县| 阳朔县| 玛多县| 清水县| 嘉兴市| 诸城市| 云霄县| 孟津县| 五台县| 广宗县| 张家界市| 潞城市| 永嘉县| 四平市| 通城县| 牡丹江市| 西贡区| 大关县| 怀仁县| 航空| 蓝山县| 靖江市| 嘉定区| 秭归县| 南京市| 乌拉特中旗| 淮南市| 惠安县| 大余县|