欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于StarCore數(shù)字信號處理器的并行運算處理的優(yōu)化方法

文檔序號:6606446閱讀:309來源:國知局
專利名稱:一種基于StarCore數(shù)字信號處理器的并行運算處理的優(yōu)化方法
技術(shù)領域
本發(fā)明涉及具有并行運算結(jié)構(gòu)的數(shù)字信號處理器DSP的運算處理的優(yōu)化方法,尤其涉及一種基于StarCore(StarCore是一種新的DSP體系結(jié)構(gòu)的名稱,已被注冊了商標)數(shù)字信號處理器DSP的運算處理方法的優(yōu)化方法。
背景技術(shù)
現(xiàn)代通信產(chǎn)品中常常會使用DSP完成一些具有很高運算開銷的特殊運算,如語音編解碼、圖象或視頻編解碼,加密解密等。對運算處理速度開銷優(yōu)化的效果越好,則每片DSP的處理能力越高,相應的產(chǎn)品性能價格比也越高。因此DSP的運算處理優(yōu)化方法往往是通信產(chǎn)品中的關(guān)鍵技術(shù)之一。
只有單個算術(shù)邏輯單元ALU的DSP中的優(yōu)化思路很直觀,也比較簡單。現(xiàn)在隨著單片DSP芯片中集成的ALU增加和存儲空間的不斷增長,運算處理速度的并行優(yōu)化越發(fā)顯出其重要性。
代碼中,一般運算開銷比較大的部分集中在少數(shù)的一些循環(huán),尤其是一些多重循環(huán)體之中,因此集中主要力量對這部分代碼進行優(yōu)化,可以以較少的投入獲得較大的效果。在Motorola公布的基于StarCore內(nèi)核的DSP的程序重整及優(yōu)化方法介紹中(參見Motorola技術(shù)文檔Programming Techniques forParallel DSP ArchitecturesOptimal Performance on the StarCoreSC140)講述了幾種主流的優(yōu)化方法,主要有分裂求和技術(shù)與多路取樣技術(shù)。主要思路就是根據(jù)循環(huán)體內(nèi)代碼的獨立性,將其由一條單線變成多條線同步并進,這樣就能利用DSP中的多個數(shù)據(jù)算術(shù)邏輯單元DALU和地址產(chǎn)生單元AGU同時進行多個獨立的算術(shù)運算和地址運算,達到充分利用DSP資源的目的,從而提高運行速度。除了上面兩種主要技術(shù)以外,還有一些輔助技術(shù)在代碼優(yōu)化中也經(jīng)常使用,包括多字節(jié)對齊(有助于單指令在一個機器周期內(nèi)在寄存器和存儲器間傳輸多個字或雙字),循環(huán)拆解,等。
但是由于現(xiàn)代運算處理方法的復雜性和差異性越來越大,僅用上面這些直觀的優(yōu)化方法,一部分模塊不能達到充分優(yōu)化的效果。在SC140(StarCoreDSP)DSP核中有4個獨立的DALU和2個AGU,效率最高時可以在一個DSP機器周期里同時完成4個乘加運算和2個地址運算。但是由于DSP指令系統(tǒng)內(nèi)部的限制,這種并行運算的潛力常常很難全部發(fā)揮出來。特別是當循環(huán)體內(nèi)相鄰兩個循環(huán)的代碼計算之間有緊密的因果關(guān)系,而且循環(huán)體中代碼計算結(jié)果具有不確定的情況(如包含有if語句塊)時,通常的優(yōu)化方法不能做到充分的并行優(yōu)化。這種后一次循環(huán)依賴于前一次循環(huán)計算結(jié)果的情況是普遍存在的。

發(fā)明內(nèi)容
針對現(xiàn)有的優(yōu)化方法不能充分利用DSP的資源,對有緊密因果關(guān)系且代碼計算結(jié)果不確定的循環(huán)體不能作到充分優(yōu)化的缺點,本發(fā)明的目的是提供一種高效的并行運算處理的優(yōu)化方法,通過特別的錯位重組后,使循環(huán)體變成可以高度并行執(zhí)行的代碼,從而大大提高了數(shù)字信號處理器運算處理的效率。
為了達到上述目的,本發(fā)明采用如下技術(shù)方案a.首先分析循環(huán)體內(nèi)代碼,將其分解拆細成每行語句內(nèi)部的復雜度盡可能小,且能與SC140數(shù)字信號處理器匯編代碼一一對應;b.對上面的代碼進行簡單合并,變量替換等操作,使得代碼簡煉,消除冗余,易于做聚合重組處理;c.將循環(huán)中代碼根據(jù)因果關(guān)系聚合成幾個代碼塊或稱為代碼隊列,同時為每一行代碼加上相應的匯編命令及其所使用到的指令性質(zhì)的注釋,說明是數(shù)據(jù)算術(shù)邏輯單元指令還是地址產(chǎn)生單元指令;d.在循環(huán)內(nèi)找出運行時間最長的代碼塊,以此為代碼主干,將其它代碼塊中的代碼逐步加到該代碼塊中并進行聚合,形成若干可以并行執(zhí)行的代碼塊(并行塊),目的是使循環(huán)中并行塊的數(shù)目最少;e.一般步驟d中結(jié)果還不是最優(yōu)的,即對數(shù)字信號處理器中數(shù)據(jù)算術(shù)邏輯單元和地址產(chǎn)生單元資源的利用不夠充分。需要調(diào)整代碼組合方式,只要循環(huán)中代碼環(huán)繞的次序不變,以及不超出SC140數(shù)字信號處理器的資源限制和語言限制,并且不出現(xiàn)代碼計算的因果性沖突,循環(huán)內(nèi)幾個代碼塊錯位組合的方式可以靈活掌握,做法如下
e1.若循環(huán)中代碼總長度超出代碼主干的長度(指并行塊的數(shù)目)。可以調(diào)整某些代碼塊內(nèi)部各并行塊相對于主干的合并位置。即使將該代碼塊頭部定位在循環(huán)中的尾部也沒有問題,其后面的代碼將環(huán)繞到循環(huán)體的前面去,但其環(huán)繞順序不變;e2.當循環(huán)中代碼總長度等于代碼主干的長度時,可以通過調(diào)整代碼,將代碼主干的頭尾部分合并到一個并行塊中去,以壓縮主干長度,從而進一步提高代碼并行度;這種調(diào)整過程往往要反復進行若干次才能達到最優(yōu)效果;f.上一步中的重組完成后,因為其本質(zhì)上是一種多個循環(huán)代碼間的錯位重組。還需要將原循環(huán)中整合不到新循環(huán)體內(nèi)的頭尾部分代碼與原循環(huán)體以外部分代碼作并行合并處理;g.將處理完的代碼一一對應地翻譯成SC140匯編語言。
由于采用了以上技術(shù)方案,相比較于現(xiàn)有的優(yōu)化方法,本發(fā)明提供的優(yōu)化方法將同一個循環(huán)中的代碼重新組合,總的代碼長度一般比現(xiàn)有優(yōu)化方法小,本發(fā)明的優(yōu)化方法在處理相鄰循環(huán)代碼計算之間存在緊密關(guān)聯(lián),特別是存在if語句塊的代碼時,將大大提高了并行優(yōu)化的效果。


圖1是本發(fā)明提供的具體實施例中一段優(yōu)化前的C代碼;圖2是將實施例中圖1的代碼進行變量替換并分解拆細后的效果圖;圖3是將實施例中圖2的代碼根據(jù)因果關(guān)系緊密程度分塊聚合后的效果圖;圖4是將實施例中圖3的循環(huán)三條代碼列經(jīng)過初步組合后的效果圖;圖5是將實施例中圖4的第二代碼列環(huán)移并重組后的效果圖;圖6是實施例中循環(huán)內(nèi)代碼經(jīng)過優(yōu)化重組后的最終效果圖;圖7是實施例中將圖6的循環(huán)拆開,以顯示其與重組前循環(huán)代碼之間的關(guān)系;圖8是按照本發(fā)明的循環(huán)體代碼錯位重組的示意圖;圖9是本發(fā)明所述的并行運算處理的優(yōu)化方法的流程圖。
具體實施例方式
下面將結(jié)合附圖,詳細說明本發(fā)明的一個具體實施例。
圖1是本實施例中優(yōu)化前的一段C代碼。為達到最好的優(yōu)化效果,同時也便于進行漸進式的模擬調(diào)試。本實施例采用C代碼來模擬并行優(yōu)化的過程,達到最終的優(yōu)化結(jié)果時,再以一一對應的方式,將C代碼翻譯成DSP匯編語言。
這樣做可以對優(yōu)化過程中的每一步使用集成開發(fā)環(huán)境進行仿真測試和錯誤檢查,每一步都能將大多數(shù)可能的錯誤消除,如果最終翻譯后的DSP代碼經(jīng)驗證仍然有錯誤,則可將C代碼的優(yōu)化過程作為調(diào)試檢查的參照,方便進行錯誤定位。
代碼中的幾個特殊函數(shù),均為國際電信聯(lián)盟ITU定義的基本算法函數(shù),其定義可參考相關(guān)文件。Add,mult,L_mac,L_msu,round的簡要含義分別是Add相加,mult相乘,L_mac乘累加,L_msu乘相減,round低位字舍入到高位并提取高位字。_1_4和_1_2分別代表1/4和1/2。
優(yōu)化過程的具體步驟描述如下a.如圖2所示,將循環(huán)體中代碼分解拆細,圖2是將原代碼進行變量替換并分解拆細后形成的代碼。這一步驟的目標是將C代碼盡可能分解拆細成語句內(nèi)部復雜度最小的情況,每一行C代碼都可以對應到一條簡單的DSP匯編代碼(圖2中有幾行由兩條C語句組成的代碼,可以對應到SC140 DSP的一條匯編語句)。例如,語句s=L_msu(L_mult(alp,sq1),sq,alp_16)拆解成如下兩行s1=L_mult(alp,sq1);s2=L_mult(sq,alp_16);之所以沒有出現(xiàn)s=s1-s2的計算式,是因為接下來的語句if(s>0)可以等價轉(zhuǎn)換成if(s1>s2),而該語句只用一條匯編語句即可實現(xiàn)。其它代碼的拆解直觀易懂,這里就不一一說明了。
b.這一步驟可選對拆細后的部分代碼進行簡單的合并與簡化,為的是使代碼最簡練也最易于進行并行重組,如圖3所示。例如拆解alp1=L_mac(alp0,rr[i1][i1],_1_4)語句,增加一個指針變量prr1=&rr[i1][i1]。拆解后的3條語句與其它語句并行執(zhí)行的可能性大了很多。
alp1=*prr1;prr1+=n0;alp1=alp1>>2;
alp1=alp1+alp0; (1)拆解alp1=L_mac(alp1,rr[i0][i1],_1_2)語句時,除了增加一個指針變量prr2=&rr[i0][i1]以外,還要多增加一個變量alp2,為的是以后alp2可與alp1進行并行計算。
alp2=*prr2;prr2+=n0;alp2=alp2>>1;alp2=alp2+alp1;考慮到代碼alp_16=round(alp2)及前面的代碼行(1);完全可以將對alp_16的計算改寫成alp_16=(L_add(alp0,alp2))>>16;前面的代碼行(1)可以取消,效果完全一樣。
c.繼續(xù)如圖3所示,將拆細后的代碼按照相關(guān)聯(lián)的緊密程度不同,分別聚合在幾個代碼塊或稱為代碼隊列中。使得塊內(nèi)代碼有直接的前后因果關(guān)系,代碼塊之間這種因果關(guān)系比較小,這樣形成的幾條代碼隊列是后面并行優(yōu)化的基礎。同時在每一行C代碼后面加注其翻譯成的DSP匯編命令及其屬于DALU指令還是AGU指令。這樣做的好處是可以為下面步驟中的代碼并行重組和調(diào)整提供每一個并行塊中DALU和AGU使用情況的最直觀描述。有了這種注釋,最終翻譯成匯編語言時也就是舉手之勞。要說明的是這里聚合成的每一個代碼塊都可以再分成若干個并行塊,只有屬于同一個并行塊的C代碼最終翻譯成DSP代碼后,才能并行執(zhí)行。
本例循環(huán)體中代碼被分成三塊,相互間用空行隔開(如圖3所示)。其中最長的主干代碼是圖3所示循環(huán)體中的第二塊,可以分成四個并行塊。如最左邊一列的數(shù)字21)22)23)24)所示,其中高位的數(shù)字2表示屬于第二個代碼塊,另兩個代碼塊都各分成三個并行塊。
d.從這些代碼塊中找出其內(nèi)部并行塊最多的那一塊。然后就以該代碼塊為主干,根據(jù)代碼相關(guān)性的限制,DALU和AGU數(shù)量限制以及翻譯后的DSP匯編代碼限制,將其它代碼塊中代碼逐步地附加到該主干代碼塊的各個并行塊中去,以充分利用各個并行塊中剩余的DALU和AGU資源。
d1.SC140指令集有一個重要特點在用某個變量作計算時,同時還可以將另一個計算的結(jié)果寫入該變量中,兩者可以并行執(zhí)行,對結(jié)果沒有影響。雖然是在同一個機器周期中完成,事實上讀操作比寫操作還是要略超前些。該特點在并行優(yōu)化時經(jīng)常使用,非常重要。
d2.各個代碼塊內(nèi)部代碼的環(huán)繞順序不可搞亂,但代碼塊附著到代碼主干上的起點位置是可以變化的,以達到在規(guī)定的限制內(nèi)讓主干上的每個周期都能充分地利用DALU和AGU資源。每個并行執(zhí)行周期中DALU運算不能超過4個,AGU運算不能超過2個。
如圖4所示是經(jīng)過初步組合后形成的新的代碼組合,由五個并行塊組成,各并行塊之間以空行隔開。
e.很明顯步驟d中完成的代碼還達不到充分利用DSP資源的最優(yōu)并行效果,應該進一步加以優(yōu)化調(diào)整,條件是不改變各個代碼塊內(nèi)部的循環(huán)次序及符合SC140 DSP的資源限制和語言限制,并且不出現(xiàn)代碼計算的因果性沖突。具體做法如下e1.因為循環(huán)中代碼總長度為5(并行塊數(shù)目)超出代碼主干的長度(4個并行塊)。將主干代碼塊(即第二個隊列)向上環(huán)移一次,其中原在第一并行塊中的兩行標為21)的代碼移到了最后一個并行塊中,其它標記為22)23)24)的代碼都依次上移一個并行塊,根據(jù)DALU及AGU資源利用情況,重新進行代碼分離與聚合。成為如圖5中的情況。
e2.觀察圖5,可知并行塊數(shù)目比圖4中減少了一個,與主干的并行塊數(shù)目一樣,但還不是最優(yōu)。這時可以通過將代碼主干的頭尾部分合并到一個并行塊中去的方法,達到壓縮主干長度,第3,4并行塊中標記為24)和21)的代碼分別是原第二代碼列的尾部和頭部。嘗試將第3,4并行塊合并成一個,正好能達到所有限制條件的要求。
圖6顯示的就是重組完成后的循環(huán)代碼??梢钥吹酱a由三個并行塊實現(xiàn),即翻譯成相應的DSP匯編后,一個循環(huán)只要3個DSP機器周期就可以完成。這三個并行塊使用的DSP資源分別列出如下(4 DALU,1 AGU),(3 DALU),(4DALU,2 AGU)可見優(yōu)化已經(jīng)很充分,不可能再壓縮到2個DSP周期了。
比較圖3與圖6,可以看到圖3中只有第一個代碼塊在重組后次序上未有變化,另2個代碼塊中的代碼都進行了環(huán)繞,而且圖6的主干代碼中alp_16的計算還與alp1和alp2的賦值運算合在一個并行塊中了,這樣主干代碼長度就由四個并行塊變成了三個并行塊。
圖6中的代碼已經(jīng)過重組,但還不是代碼優(yōu)化的最終結(jié)果,因為新循環(huán)體中代碼相互間依賴關(guān)系與原來不再相同,也就是說每一個循環(huán)都有部分的代碼計算依賴于前一個甚至是前兩個循環(huán)的計算結(jié)果,同時還為后面的1~2個循環(huán)預先做了計算處理。這樣重組后的第一個循環(huán)前面也必然有屬于原循環(huán)體開始部分的代碼;最后一個循環(huán)后面也肯定有原循環(huán)體最后部分的代碼。故而雖然重組后的循環(huán)體中代碼都能與原循環(huán)拆細后的代碼一一對應,但循環(huán)次數(shù)≤原循環(huán)次數(shù)-2。這就是圖1,圖2和圖3中循環(huán)次數(shù)為8,而圖6中循環(huán)次數(shù)為6的原因。
f.將重組后的代碼頭尾幾個循環(huán)展開,如圖7所示。圖中第一列標示的數(shù)字表明的是該行語句屬于原循環(huán)體中的第幾個循環(huán)。從圖中可見,重組后的新的循環(huán)1中包含了原循環(huán)1,原循環(huán)2,原循環(huán)3三個循環(huán)中的語句,而新的循環(huán)2中則包含了原循環(huán)2,原循環(huán)3,原循環(huán)4三個循環(huán)中的語句,依次類推。在第一個循環(huán)外還有屬于原循環(huán)1和原循環(huán)2中的代碼,這部分代碼一般可以和循環(huán)體外部的代碼進行并行化的合并,對尾部多出來的代碼也作同樣處理。
g.將最終完成所有處理工作的C代碼以一一對應的方式翻譯成SC140匯編語言。則本例的C代碼并行優(yōu)化工作即告完成。
圖8以形象的方式說明了本發(fā)明核心—錯位重組的概念。圖中多個灰色豎形方框代表原來循環(huán)體中的第1,2,3,4,5…等循環(huán),假設每個循環(huán)中代碼被初步重組成3塊,相應于每個框中的3個相同的數(shù)字;經(jīng)過錯位重組后的新循環(huán)體中的循環(huán)分別是虛線框表示的重組循環(huán)1,重組循環(huán)2,重組循環(huán)3等。重組后的每一個循環(huán)都跨越了原來循環(huán)體中的三個循環(huán),其錯位組合的概念一目了然。
現(xiàn)有的并行優(yōu)化方法將循環(huán)體中多個循環(huán)的代碼改變變量名稱,然后合并到一起,相應的循環(huán)次數(shù)少了幾倍,但一個循環(huán)中代碼行數(shù)卻增加了幾倍,這會造成循環(huán)內(nèi)變量數(shù)目成倍增加,而DSP所能提供的寄存器數(shù)目有限,只能通過先將寄存器暫存在存儲器中,需要時再調(diào)出來使用,結(jié)果額外增加了不小的運算開銷。而通過上述實施例可見,在本發(fā)明方法中,循環(huán)中變量數(shù)目改變不多,SC140的DSP核提供的寄存器足夠使用,也就沒有了這種額外的運算開銷。
參照實施例對所公開的涉及StarCore140 DSP的一種運算處理方法的優(yōu)化方法進行了詳細描述,使本領域技術(shù)人員能夠理解,在不偏離本發(fā)明的原理和創(chuàng)新特性的情況下,本領域的技術(shù)人員可以對其進行形式和細節(jié)上的種種顯而易見的修改,但本發(fā)明不被以上描述的實施例所限,而是要在最寬泛的范圍內(nèi)符合本發(fā)明的原理和創(chuàng)新的特征。
權(quán)利要求
1.一種基于StarCore數(shù)字信號處理器的并行運算處理的優(yōu)化方法,其特征在于,該方法包括以下步驟a.分析循環(huán)體內(nèi)代碼,進行分解拆細;b.對分解后的代碼進行簡單合并,消除冗余;c.將代碼按因果關(guān)系聚合成幾個代碼塊;d.確定代碼主干,將其它代碼塊聚合到代碼主干中,形成若干可以并行執(zhí)行的代碼塊,目的是使循環(huán)中并行塊的數(shù)目最少;e.在不改變代碼環(huán)繞的次序,不超出SC140數(shù)字信號處理器的資源限制和語言限制以及不出現(xiàn)代碼計算的因果性沖突的條件下以代碼塊錯位組合的方式來調(diào)整代碼組合;f.將原循環(huán)體中整合不到新循環(huán)體內(nèi)的頭尾部分代碼與原循環(huán)體以外部分代碼作并行合并處理;g.將代碼翻譯成SC140匯編語言。
2.如權(quán)利要求1所述的基于StarCore數(shù)字信號處理器的并行運算處理的優(yōu)化方法,其特征在于,所述步驟a中的分解拆細循環(huán)體內(nèi)代碼是指將代碼拆成每行語句的內(nèi)部復雜度最小,且能與SC140匯編代碼一一對應。
3.如權(quán)利要求1所述的基于StarCore數(shù)字信號處理器的并行運算處理的優(yōu)化方法,其特征在于,所述步驟d中的代碼主干是指循環(huán)內(nèi)運行時間最長的代碼塊。
4.如權(quán)利要求1所述的一種基于StarCore數(shù)字信號處理器的并行運算處理的優(yōu)化方法,其特征在于,所述步驟e中的以代碼塊錯位組合的方式來調(diào)整代碼組合,進一步包括e1.如果循環(huán)中總代碼長度超出代碼主干長度,可以調(diào)整代碼塊內(nèi)部個并行塊相對于主干的合并位置;e2.如果循環(huán)中代碼總長度等于代碼主干長度,可以將代碼主干的頭尾部分合并到一個并行塊中去。
全文摘要
一種基于StarCore數(shù)字信號處理器的并行運算處理的優(yōu)化方法,包括通過分析循環(huán)體內(nèi)代碼,進行分解拆細;對分解后的代碼進行簡單合并,消除冗余;將代碼按因果關(guān)系聚合成幾個代碼塊;確定代碼主干,將其它代碼塊聚合到代碼主干中;以代碼塊錯位組合的方式來調(diào)整代碼組合;將原循環(huán)體中整合不到新循環(huán)體內(nèi)的頭尾部分代碼與原循環(huán)體以外部分代碼作并行合并處理;將代碼翻譯成SC140匯編語言;本發(fā)明充分利用了DSP的資源,優(yōu)化后無論是對寄存器的需求還是代碼長度均小于現(xiàn)有優(yōu)化方法。
文檔編號G06F9/45GK1514358SQ0216054
公開日2004年7月21日 申請日期2002年12月31日 優(yōu)先權(quán)日2002年12月31日
發(fā)明者陳翔, 丁劍鋒, 李火林, 藺榮巖, 周海軍, 溫占波, 陳 翔 申請人:深圳市中興通訊股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
吴江市| 宜城市| 江口县| 通化县| 张北县| 樟树市| 会同县| 新宁县| 镇原县| 靖宇县| 屏东县| 讷河市| 凌源市| 浦县| 青龙| 石门县| 保靖县| 康马县| 建始县| 轮台县| 湖州市| 壤塘县| 九龙坡区| 乐清市| 泰兴市| 黎川县| 自治县| 南江县| 攀枝花市| 眉山市| 泰安市| 马山县| 思茅市| 九龙城区| 蚌埠市| 长岛县| 阿合奇县| 凌云县| 曲麻莱县| 阜城县| 逊克县|