一種基于gpp和simd技術(shù)的信道編譯碼的數(shù)據(jù)格式轉(zhuǎn)換方法
【專利摘要】一種基于GPP和SIMD技術(shù)的信道編譯碼的數(shù)據(jù)格式轉(zhuǎn)換方法,其中編碼前的處理是先將字長為n個字節(jié)的輸入數(shù)據(jù)流A0A1A2...An-1封裝為s個長度為M的SIMD格式數(shù)據(jù),使其數(shù)據(jù)格式并行化,能夠適用SIMD指令而對其執(zhí)行并行的“映射”操作,再執(zhí)行并行的“與”操作,最后執(zhí)行并行的“選取較小值”操作,生成字長為8n個字節(jié)的輸出數(shù)據(jù)流B0B1B2...B8n-1;其中譯碼后的處理是先將字長為8n個字節(jié)的輸入數(shù)據(jù)流C0C1C2...C8n-1封裝為8s個長度為M的SIMD格式數(shù)據(jù),對其執(zhí)行并行的“判斷是否相等”操作,再執(zhí)行并行的“選取最高位組合”操作,生成字長為n個字節(jié)的輸出數(shù)據(jù)流D0D1D2...Dn-1。本發(fā)明使用SIMD并行操作指令,大大加快數(shù)據(jù)格式的轉(zhuǎn)換速度,且保證傳輸性能和編譯碼的正確性。還具有成本低、可移植性好、調(diào)試簡單和升級簡便等特點。
【專利說明】一種基于GPP和SI MD技術(shù)的信道編譯碼的數(shù)據(jù)格式轉(zhuǎn)換方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種基于通用處理器GPP (General Purpose Processor)和單指令多數(shù)據(jù)流SIMD (Single Instruction Multiple Data)技術(shù)的信道編譯碼的數(shù)據(jù)格式轉(zhuǎn)換方法,屬于通信編譯碼的【技術(shù)領(lǐng)域】。
【背景技術(shù)】
[0002]在信道編碼技術(shù)中,如Turbo碼、低密度奇偶校驗LDPC (Low Density ParityCheck)碼和卷積碼等,由于其糾錯性能優(yōu)越,近10年來在高速無線通信制式(3G或4G的系統(tǒng))中得到了廣泛使用。例如,在長期演進(jìn)技術(shù)LTE/長期演進(jìn)技術(shù)升級版LTE-A (LongTerm Evolution/Long Term Evolution Advanced)的系統(tǒng)中,使用了 Turbo 碼和卷積碼;在802.11系統(tǒng)中,使用了 LDPC碼和卷積碼。
[0003]此類信道的編碼譯碼具有極高的時間復(fù)雜度,即需要耗費大量的計算時間。然而,新興的無線通信制式又是面向大數(shù)據(jù)量的通信手段。傳統(tǒng)的通信實現(xiàn)方案大都是基于硬件處理平臺,硬件平臺具有下 述多個問題:成本高,平臺適用范圍局限,調(diào)試過程繁瑣,開發(fā)周期長,程序升級不便等。
[0004]近5年來,以通用處理器GPP平臺為基礎(chǔ)的軟件無線電正在逐漸成熟。在克服了硬件平臺上述缺點的同時,軟件無線電技術(shù)在運(yùn)算速度上也存在瓶頸。如何減少信道編碼譯碼帶來的計算復(fù)雜度,降低時間延遲,已經(jīng)成為打破通信系統(tǒng)傳輸速率瓶頸的主要方法。
[0005]在GPP平臺上,數(shù)據(jù)的傳輸和存儲都是以字節(jié)為基本單位,因此在計算過程中,大多以字節(jié)為最小計算單位。而在通信系統(tǒng)中,信息是以比特形式存儲或處理的,也就是按照比特執(zhí)行:以一個比特表示一個單位信息,被稱之為比特形式。在GPP平臺上,目前最高效的信道編譯碼實現(xiàn)算法都是以字節(jié)作為最小計算單位,即以一個字節(jié)表示一個比特信息,被稱之為字節(jié)形式。因此,信道編碼必須具有將數(shù)據(jù)流的比特形式轉(zhuǎn)換為字節(jié)形式的數(shù)據(jù)格式轉(zhuǎn)換功能。如何完成數(shù)據(jù)流的比特形式與字節(jié)形式的相互轉(zhuǎn)換功能,已經(jīng)成為當(dāng)前不可避免的信道編碼前端的數(shù)據(jù)格式轉(zhuǎn)換功能和信道譯碼后端的數(shù)據(jù)格式轉(zhuǎn)換功能。
[0006]信道編碼的數(shù)據(jù)格式轉(zhuǎn)換的目的是:將字長為η個字節(jié)的比特形式的輸入數(shù)據(jù)流AtlA1A2...An^1轉(zhuǎn)換為字長為8η個字節(jié)的字節(jié)形式的輸出數(shù)據(jù)流BtlB1B2...B8n^10因為任意一個Ag (O≤g≤η-1)和Bh (O8n-l)都是I個字節(jié),即字長為8個比特,其下標(biāo)數(shù)字越小,代表其完成的數(shù)據(jù)格式轉(zhuǎn)換也越早。其中,Ag=(a8ga8g+1a8g+2a8g+3a8g+4a
8g+5a8g+6a8g+7),
因其中任意一個元素a都是I個比特,a的下標(biāo)數(shù)字越小,代表越靠近其所在字節(jié)的低位,Bh= (ah0000000),ah為輸入數(shù)據(jù)流A中的第h個比特,其位于Bh字節(jié)中的最低位。
[0007]信道譯碼的數(shù)據(jù)格式轉(zhuǎn)換的目的是完成上述信道編碼的逆操作:將字長為Sn個字節(jié)的字節(jié)形式的輸入數(shù)據(jù)流CtlC1C2...C8lri轉(zhuǎn)換為字長為η個字節(jié)的比特形式的輸出數(shù)據(jù)流D0D1D2...Dn_lt)因為任意一個C1(OSlSSn-1)和De (OSeSn-1)都是I個字節(jié),即字長為8個比特,其下標(biāo)數(shù)字越小,代表其完成的數(shù)據(jù)格式轉(zhuǎn)換也越早。其中,C1=(CiiOOOOOOO),di為輸出數(shù)據(jù)流D中的第I個比特,其位于C1字節(jié)中的最低位;De= (d8ed8e+1d8e+2d8e+3d8e+4d8e+5d8e+6d8e+7),而其中任意一個元素d都是I個比特,d的下標(biāo)數(shù)字越小,代表其越靠近所在字節(jié)的低位。
[0008]在GPP架構(gòu)下的信道編碼數(shù)據(jù)格式轉(zhuǎn)換的傳統(tǒng)方法是:使用基于移位和“與”的操作完成的。以單字節(jié)Atl為例,將其轉(zhuǎn)化為8個字節(jié)BtlB1B2B3B4B5B6B7時,該字節(jié)A0=(a0a1a2a3a4a5a6a7)要循環(huán)執(zhí)行8次下述操作:每次操作內(nèi)容都是Bf=(AQ〈〈f)&l,其中,f 為字節(jié)序號,且 O ≤ f ≤ 7 ;這樣,當(dāng) f=4 時,B4= (A0?4)&1= (a4a5a6a700 00)&(10000000) = (a400 0 0 0 00)。因此,將輸入數(shù)據(jù)流AtlA1A2...Alri轉(zhuǎn)換成輸出數(shù)據(jù)流BtlB1B2...B8lri時,就需要循環(huán)執(zhí)行上述操作η次:每次循環(huán)只是完成輸入數(shù)據(jù)流中一個字節(jié)的轉(zhuǎn)換,即第g (O ^ g ^ η-1)次循環(huán)是完成前述將Ag轉(zhuǎn)換為
B8gB8g+lB8g+2B8g+3B8g+4B8g+5B8g+6Bsg+7 的操作;也就是上述第g次循環(huán)都包含有8次子循環(huán),每次子循環(huán)轉(zhuǎn)換一個比特,即第f(0 < f < 7)次子循環(huán)完成B8g+f= (Ag〈〈f)&1的操作。
[0009]在GPP架構(gòu)下的信道譯碼的數(shù)據(jù)格式轉(zhuǎn)換傳統(tǒng)方法是:基于“移位”和“異或”的操作完成的。以8個字節(jié)CtlC1C2C3C4C5C6C7為例,將其轉(zhuǎn)化為I個字節(jié)Dtl時,其中的cq=(dqooooooo);先使得Dci=O=(Oooooooo),再循環(huán)執(zhí)行8次下述操作:每次操作內(nèi)容為:D0=D0' (Cq?q),其中,q 為字節(jié)序號,且 O ≤ q ≤ 7。這樣,當(dāng) q=4 時,D0=D0' (C4>>4) = ((10Cl1d2d30000) ~ (OOOOd4OOO)KcWAdWOO)。而將輸入數(shù)據(jù)流 CtlC1C2...C8lri 轉(zhuǎn)換成輸出數(shù)據(jù)流DtlD1D2...Dlri,就要循環(huán)執(zhí)行η次上述操作,每次循環(huán)完成輸入數(shù)據(jù)流中的8個字節(jié)的轉(zhuǎn)換,即第e(0≤e≤η-1)次循環(huán)是完成將
^8β^8β+1^8β+2^8β+3^8β+4^8β+5^8β+6^8β+7 轉(zhuǎn)換為De。上述的第e次循環(huán)操作內(nèi)容是:先將De=0,再進(jìn)行8次子循環(huán),每次子循環(huán)轉(zhuǎn)換一個比特,即第q(0≤q≤7)次子循環(huán)完成De=De~ (C8e+q?q)的操作。
[0010]上述兩種傳統(tǒng)方法的缺點是:每次運(yùn)算的操作單位只有I個字節(jié),進(jìn)行“移位”、“與”、“異或”等操作時,效率偏低。因此,如何提高編碼和譯碼的操作效率,解決處理速度問題,已經(jīng)成為業(yè)內(nèi)科技人員關(guān)注的焦點課題。
[0011]單指令流多數(shù)據(jù)流SIMD (Single Instruction Multiple Data)是一種米用一個控制器來控制多個處理器,同時對一組數(shù)據(jù)(又稱“數(shù)據(jù)矢量”)中的每一個數(shù)據(jù)分別執(zhí)行相同的操作,從而實現(xiàn)空間上的并行性處理的技術(shù)。在微處理器中,單指令流多數(shù)據(jù)流技術(shù)則是一個控制器控制多個平行的處理微元,例如Intel的MMX或SSE以及AMD的3D Now技術(shù)。
【發(fā)明內(nèi)容】
[0012]有鑒于此,本發(fā)明的目的是提供一種基于通用處理器GPP (General PurposeProcessor)和單指令多數(shù)據(jù)流 SIMD (Single Instruction Multiple Data)技術(shù)的信道編譯碼的數(shù)據(jù)格式轉(zhuǎn)換方法,該方法在保證傳輸性能和編譯碼正確性的基礎(chǔ)上,重新設(shè)計SMD適用的轉(zhuǎn)換算法,使用SMD并行操作指令,大大加快轉(zhuǎn)換速度;因本發(fā)明是采用GPP芯片實現(xiàn)的,具有成本低、可移植性好、調(diào)試簡單和升級簡便等特點。
[0013]為了達(dá)到上述目的,本發(fā)明提供了一種基于通用處理器GPP (General PurposeProcessor)和單指令多數(shù)據(jù)流 SIMD (Single Instruction Multiple Data)的信道編碼前的數(shù)據(jù)格式轉(zhuǎn)換方法,其特征在于:先將字長為η個字節(jié)的輸入數(shù)據(jù)流AtlA1A2...Alrl封裝為s個長度為M的SMD格式數(shù)據(jù),使其數(shù)據(jù)格式并行化,能夠適用于SMD指令而對其執(zhí)行并行的“映射”操作:將輸入數(shù)據(jù)流的每個字節(jié)復(fù)制為8個字節(jié),即將其轉(zhuǎn)換為第一中間數(shù)據(jù)流EtlE1...E8lri ;再對第一中間數(shù)據(jù)流EtlE1...E8lri執(zhí)行并行的“與”操作,提取各個比特信息后,將其轉(zhuǎn)換為第二中間數(shù)據(jù)流FtlF1...F8lri ;最后對第二中間數(shù)據(jù)流FtlF1...F8lri執(zhí)行并行的“選取較小值”操作,將各個比特信息移到其所在的字節(jié)的最低位,生成字長為8η個字節(jié)的輸出數(shù)據(jù)流BtlB1B2...B8lri ;其中,字節(jié)長度n=MXs,自然數(shù)M和s分別是SIMD封裝數(shù)據(jù)的長度和個數(shù)。
[0014]所述方法包括下列操作步驟:
[0015]( I)執(zhí)行并行的“映射” SMD指令,完成數(shù)據(jù)復(fù)制操作:
[0016]依次對s個SMD封裝數(shù)據(jù)使用“映射” SMD指令,“映射” SMD指令的X輸入的SIMD封裝數(shù)據(jù)為Am+0,AtM+1,...,Atsww,且每個X輸入數(shù)據(jù)都要參與8次內(nèi)層循環(huán);其中,t為執(zhí)行“映射” SIMD指令外層循環(huán)的操作次數(shù)序號,其取值范圍是[0,s-l] ;u為執(zhí)行“映射”SIMD指令內(nèi)層循環(huán)的操作次數(shù)序號,其取值范圍是[0,7];則第t次外層循環(huán)的第u次內(nèi)層循環(huán)的“映射” SMD指令的Y輸入的SMD封裝數(shù)據(jù)為:
[0017]
【權(quán)利要求】
1.一種基于通用處理器GPP和單指令多數(shù)據(jù)流SMD技術(shù)的信道編碼前的數(shù)據(jù)格式轉(zhuǎn)換方法,其特征在于:先將字長為η個字節(jié)的輸入數(shù)據(jù)流AtlA1A2...Alri封裝為s個長度為M的SMD格式數(shù)據(jù),使其數(shù)據(jù)格式并行化,能夠適用于SMD指令而對其執(zhí)行并行的“映射”操作:將輸入數(shù)據(jù)流的每個字節(jié)復(fù)制為8個字節(jié),即將其轉(zhuǎn)換為第一中間數(shù)據(jù)流EtlE1...E8lri ;再對第一中間數(shù)據(jù)流EtlE1...E8lri執(zhí)行并行的“與”操作,提取各個比特信息后,將其轉(zhuǎn)換為第二中間數(shù)據(jù)流FtlF1...F8lri ;最后對第二中間數(shù)據(jù)流FtlF1...F8lri執(zhí)行并行的“選取較小值”操作,將各個比特信息移到其所在的字節(jié)的最低位,生成字長為8η個字節(jié)的輸出數(shù)據(jù)流B0B1B2...B8lri ;其中,字節(jié)長度n=MXs,自然數(shù)M和s分別是SIMD封裝數(shù)據(jù)的長度和個數(shù)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于:所述方法包括下列操作步驟: (I)執(zhí)行并行的“映射” SIMD指令,完成數(shù)據(jù)復(fù)制操作: 依次對s個SMD封裝數(shù)據(jù)使用“映射” SMD指令,“映射” SMD指令的X輸入的SMD封裝數(shù)據(jù)為At_,AtM+1,...,AtMi1,且每個X輸入數(shù)據(jù)都要參與8次內(nèi)層循環(huán);其中,t為執(zhí)行“映射” SIMD指令外層循環(huán)的操作次數(shù)序號,其取值范圍是[O,s-1] ;u為執(zhí)行“映射” SIMD指令內(nèi)層循環(huán)的操作次數(shù)序號,其取值范圍是[O,7];則第t次外層循環(huán)的第u次內(nèi)層循環(huán)的“映射” SMD指令的Y輸入的SMD封裝數(shù)據(jù)為:
3.根據(jù)權(quán)利要求1所述的方法,其特征在于:所述SIMD技術(shù)在執(zhí)行每條指令時,能夠并行地對兩組各自包含M個元素的SIMD封裝數(shù)據(jù)Xtl, X1,...Xsh和Ytl, Y1,...Ysh執(zhí)行包括映射、與和選取較小值的各種操作,且此時,每對數(shù)據(jù)元素XJPYi同時執(zhí)行相同操作,其中,i是SIMD封裝數(shù)據(jù)中的數(shù)據(jù)序列號,其取值范圍為[0,M-1];再將所得到的M個計算結(jié)果作為數(shù)據(jù)元素被封裝在一組SIMD格式封裝數(shù)據(jù)Ztl, I1,...Zsh中;其中,SIMD封裝數(shù)據(jù)的長度M取決于封裝數(shù)據(jù)的比特長度P和數(shù)據(jù)元素類型所占的比特長度Q,其計算公式為
4.根據(jù)權(quán)利要求3所述的方法,其特征在于:所述SIMD技術(shù)在執(zhí)行每條指令時,也能夠按照所述方法只處理一組封裝數(shù)據(jù)。
5.根據(jù)權(quán)利要求3所述的方法,其特征在于: 所述“映射” SIMD指令的操作內(nèi)容是:對輸入的兩組SMD封裝數(shù)據(jù)Xtl, X1,...Xsh和Y。,Y1,...Ysh,并行地完成共M對數(shù)據(jù)執(zhí)行“映射” SMD指令后,輸出的SMD封裝數(shù)據(jù)為Z0,11,...Zsh ;其中,輸出的SIMD封裝數(shù)據(jù)中的第i個元素是以Yi為下標(biāo),尋找Xci, X1,...Xsh中的對應(yīng)值,即=I1.;其中,i是SIMD封裝數(shù)據(jù)中的數(shù)據(jù)序號,其取值范圍為[0,M-1]; 所述“與”操作的SIMD指令的操作內(nèi)容是:對輸入的兩組封裝數(shù)據(jù)為Xtl, X1,...Xsh和Ytl, Y1,...Ysh,并行地完成共M對數(shù)據(jù)執(zhí)行“與” SIMD指令操作后,輸出的SMD封裝數(shù)據(jù)為Ztl, Z1,...Zsh ;其中,Zi=XiMi ;其中,i是SIMD封裝數(shù)據(jù)中的數(shù)據(jù)序號,其取值范圍為[Ο,Μ-1]; 所述“選取較小值”操作的SIMD指令操作內(nèi)容是:對輸入的兩組封裝數(shù)據(jù)為X0, X1,...Xm-!和Yo,Y1,...Υ?-1;并行地完成共M對“選取較小值” SIMD指令操作后,輸出的SIMD封裝數(shù)據(jù)為Z0,11,...Zh ;其中,Zi=Hiin (Xi, Yi);其中,i是SIMD封裝數(shù)據(jù)中的數(shù)據(jù)序號,其取值范圍為[0,M-1]。
6.一種基于GPP和SMD的信道譯碼后的數(shù)據(jù)格式轉(zhuǎn)換方法,其特征在于:將字長為8n個字節(jié)的輸入數(shù)據(jù)流CtlC1 C2...C8lri封裝為8s個長度為M的SIMD封裝格式數(shù)據(jù),使其數(shù)據(jù)格式并行化,能夠適用于SMD指令結(jié)構(gòu)而對其執(zhí)行并行的“判斷是否相等”操作,將各個比特信息移到其所在的字節(jié)的最高位,從而將其轉(zhuǎn)換為中間數(shù)據(jù)流GtlG1...G8lri ;再對該中間數(shù)據(jù)流GtlG1...G8lri執(zhí)行并行的“選取最高位組合”操作,生成字長為η個字節(jié)的輸出數(shù)據(jù)流D0D1D2...Dlri ;其中,n=MXs,自然數(shù)M和s分別是SIMD封裝數(shù)據(jù)的長度和個數(shù)。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于:所述方法包括下列操作步驟: (1)使用并行的“判斷是否相等”SMD指令,完成將有效比特位移到所在字節(jié)的最高位的操作: 依次對8s個SMD封裝數(shù)據(jù)使用“判斷是否相等” SIMD指令,“判斷是否相等” SIMD指令的X輸入的封裝數(shù)據(jù)為CkM+(l,CkM+1,...,W1, “判斷是否相等” SIMD指令的Y輸入的封裝數(shù)據(jù)為{1,1,...,1};其中,k為執(zhí)行“判斷是否相等” SIMD指令的操作次數(shù)序號,其取值范圍是[0,8s-l];則完成該“判斷是否相等” SIMD指令后,得到的中間數(shù)據(jù)流Z為:GkM+O,GkM+1,...,GkM+M-1 ; (2)使用并行的“選取最高位組合”SIMD指令完成將連續(xù)的8個字節(jié)的每個字節(jié)的最高位合并為I個字節(jié)的操作: 依次對s個SMD封裝數(shù)據(jù)使用“選取最高位組合” SIMD指令,“選取最高位組合” SIMD指令的X輸入的封裝數(shù)據(jù)為G8wM+(i,G8wM+1,...,G8wM+8M_i ;其中,w為執(zhí)行“選取最高位組合”SIMD指令的操作次數(shù)序號,其取值范圍是[0,s-Ι];則完成該“選取最高位組合”SIMD指令后,得到的最終輸出數(shù)據(jù)流Z為:Dwm+0,Dwm+1,...,Dwm+m—I O
8.根據(jù)權(quán)利要求6所述的方法,其特征在于:所述SIMD技術(shù)在執(zhí)行每條指令時,能夠并行地對兩組各自包含M個元素的SIMD封裝數(shù)據(jù)Xtl, X1,...Xsh和Ytl, Y1,...Ysh執(zhí)行包括判斷是否相等和選取最高位組合的各種操作,且此時,每對數(shù)據(jù)元素Xi和Yi同時執(zhí)行相同操作,其中,i是SIMD封裝數(shù)據(jù)中的數(shù)據(jù)序號,其取值范圍為[0,M-1];再將所得到的M個計算結(jié)果作為數(shù)據(jù)元素被封裝在一組SIMD格式封裝數(shù)據(jù)Ztl, Z1,...Zihl中;其中,封裝數(shù)據(jù)的比特長度P=64X 2P ;數(shù)據(jù)元素類型為字節(jié)時,所對應(yīng)的Q=8,其中,SIMD封裝數(shù)據(jù)的長度M取決于封裝數(shù)據(jù)的比特長度P和數(shù)據(jù)元素類型所占的比特長度Q,其計算公式為
9.根據(jù)權(quán)利要求8所述的方法,其特征在于:所述SIMD技術(shù)在執(zhí)行每條指令時,也能夠按照所述方法只處理一組封裝數(shù)據(jù)。
10.根據(jù)權(quán)利要求8所述的方法,其特征在于: 所述“判斷是否相等”的SIMD指令的操作內(nèi)容是:對輸入的兩組封裝數(shù)據(jù)為X0, X1,...Xm-!和Yo,Y1,...YiH,并行地完成共M對數(shù)據(jù)執(zhí)行“判斷是否相等” SIMD指令操作后,輸出SMD封裝數(shù)據(jù)為ZQ,Z1,...Zsh ;其中,Zi=Xi==Yi?255:0,<< = "號右側(cè)的公式Xi==Yi?255:0為計算機(jī)語言中的條件運(yùn)算符,表示:若Xi==Yi成立,則Zi=255,即Xi與Yi相等時,Zi賦值為255 ;若Xi==Yi不成立,則Zi=O,即Xi與Yi不相等時,Zi賦值為O ;式中,i是SIMD封裝數(shù)據(jù)中的數(shù)據(jù)序號,其取值范圍為[0,M-1]; 所述“選取最高位組合”的SIMD指令的操作內(nèi)容是:對輸入的封裝數(shù)據(jù)為X0, X1,...X81-!,并行地完成M對選取最高位組合操作后,輸出的封裝數(shù)據(jù)為Ztl, I1,...Zh ;其中,
Zi= ((Xgi&0x80) <<7) ' ((Xgi+1&0x80) <<6) ' ((X8i+2&0x80) <<5) ' ((X8i+3&0x80) <<4);式 ~ ((X8i+4&0x80) ?3)' ((X8i+5&0x80) ?2)' ((X8i+6&0x80) ?I)' (X8i+7&0x80)中,i 是 SIMD 封裝數(shù)據(jù)中的數(shù)據(jù)序號,其取值范圍為[0,M-1]。
【文檔編號】H04L1/00GK103746771SQ201310729424
【公開日】2014年4月23日 申請日期:2013年12月26日 優(yōu)先權(quán)日:2013年12月26日
【發(fā)明者】牛凱, 丁憶南, 賀志強(qiáng) 申請人:北京郵電大學(xué)