一種基于Intel CPU的并行Turbo譯碼方法
【專利摘要】本發明公開一種基于Intel CPU的并行Turbo譯碼方法,包括如下步驟:(1)使用單指令多數據流指令加快Turbo譯碼運算。在單指令多數據流指令中,每個碼塊分配128位,根據CPU支持的指令位寬決定并行碼塊個數,編寫針對性代碼,使每碼塊內部操作與單碼塊譯碼時相同;(2)在單指令多數據流指令中,以對數似然比形式同時計算并行碼塊的前向狀態度量值α和反向狀態度量值β,計算過程中會產生狀態分別為正負的兩個中間矢量,在時序為k時,設定α的序號為k,β的序號為碼長N?1?k。當k達到或超過N的一半時,將時序N?1?k的αβ載入矢量并互換位置,與時序k中的兩個中間矢量進行計算,得到輸出對數似然比信息。
【專利說明】
一種基于Inte I GPU的并行Turbo譯碼方法
技術領域
[0001] 本發明屬于數據傳輸領域,涉及一種發射機物理層中Turbo譯碼方法。
【背景技術】
[0002] 在通信系統中,為了使信道容量逼近香農極限,很多情況下會采用Turbo編譯碼技 術。Turbo編碼步驟較為簡單,而譯碼則相對復雜。為了滿足通信系統要求的高速率,需要盡 可能提高Turbo譯碼的吞吐量。
[0003] 以往移動通信的Turbo譯碼往往是在特定的DSP平臺上進行。隨著Intel CPU單指 令多數據流的發展,其計算能力越來越強,基于Intel CPU的Turbo譯碼也開始出現并不斷 改進。以往基于Intel CPU的Turbo譯碼并未實現在單指令多數據流指令下的并行譯碼。
【發明內容】
[0004] 技術問題:本發明提供一種使用單指令多數據流指令實現多碼塊并行Turbo譯碼 的方法。
[0005] 技術方案:本發明的基于Intel CPU的Turbo譯碼方法,具體包括如下步驟:
[0006] (1)在單指令多數據流指令中,每個碼塊分配128位,設定并行碼塊個數為CPU支持 的指令位寬除以128;設置迭代指示器index = 0;
[0007] (2)對每個碼塊分別進行解剪裁,每個碼塊得到兩串系統信息LsysQ,L sysjP兩串校 驗信息LpQ,Lpl,所述系統信息LsysI由系統信息LsysQ交織得到,所述L sysQ、Lp()由系統中的分量 譯碼器0處理,所述Lsysl、L pl由系統中的分量譯碼器1處理;
[0008] (3)以對數似然比形式計算分量譯碼器0各個碼塊中每個時序對應的分支度量值 y 11、y 10,即 y 11 = 0 · 5(LSyS+Lp+La),y 10 = 0 · 5(LSys-Lp+La),其中La為先驗f目息,L sys為LsysO和 Lsysl的通用符號,LALpq和Lpl的通用符號;
[0009] (4)分量譯碼器0中,在時序k,構建0k+1,具體為:根據各個碼塊的卷積碼生成矩陣 列出分支狀態度量值γ nk、γ 1Qk的對應序列,將γ nk、γ 1Qk按所述對應序列構建矢量γk;
[0010] 使用單指令多數據流指令進行矢量運算,即0k+= 0k+γ k,0k-= 0k-γ k,然后根據卷 積碼生成矩陣對應狀態位變化對9k+,0k-內部數據進行重新排列;求0 k+和Θ1-對應數據的最大 值作為下一時序的矢量91"1,然后進行歸一化處理;
[0011] 其中,0k由上一時序產生,0k中包含并行碼塊的八個前向狀態度量值α/和八個反 向狀態度量值& m,j為狀態序號,N為系統碼長,當k = 0時,Qt3內部數據為:^ = -!〗?,!^1 =-127,ajW = 〇,β護〇N-1 = 〇; 0k+、0k-為狀態分別為正、負的中間矢量,m = Ν-k-l;
[0012] (5)分量譯碼器0中,當時序k小于N的一半時,令k = k+l,并返回步驟(4),否則載入 矢量θ'將其內部的〇/和|3/調換位置,根據下式計算Lk+和L k^
[0013] Lk+ = 9m+0k+,Lk-=9m+0k-,
[0014] 其中Lk+和LK_分別為狀態為正負的輸出對數似然比中間矢量;所述Lk+和L 1-每個矢 量內部分別有并行碼塊的八個k時序的輸出對數似然比中間值和八個m時序的輸出對數似 然比中間值;
[0015 ]分別求出Lk+中k時序和m時序的輸出對數似然比中間值的最大值lk+和Γ+,L k沖k時 序和m時序的輸出對數似然比中間值的最大值IkIPl'然后計算出lk+-lk1卩是k時刻的輸出 對數似然比信息,Γ+-11卩是m時刻的輸出對數似然比信息;若k = N-l,則進入步驟(6),否 則令k = k+l,并返回步驟(4);
[0016] (6)按照所述步驟(3)至(5)中分量譯碼器0的處理方法和流程,在分量譯碼器1中 進行分量譯碼,得到輸出對數似然比信息,然后由公式U = U-Lsys-La得到外部信息U,當前 譯碼器為譯碼器0時,將Uo交織得到譯碼器1的先驗信息L al,當前譯碼器為譯碼器1時,將U1 解交織得到譯碼器0的先驗信息LaQ,其中U)、LaQ為譯碼器0的外部信息和先驗信息,L el、Lal 為譯碼器1的外部信息和先驗信息,Le是Let)、Lel的通用符號,1^是1^0、Ul的通用符號;
[0017] (7)迭代指示器index累加一次,如index〈6,則返回步驟(3),當index = 6時,譯碼 結束。
[0018] 進一步的,本發明方法中,所述步驟(1)中CPU指令集位寬為256位;設置并行碼塊 個數為2,所述步驟(3)至(6)中的運算使用AVX2指令集處理。
[0019] 進一步的,本發明方法中,所述步驟(1)中CPU指令集位寬為512位,設置并行碼塊 個數為4,所述步驟(3)至(6)中的運算使用AVX512指令集處理。
[0020] 進一步的,本發明方法中,所述步驟(4)中和(5)中使用單指令多數據流指令實現 前向狀態度量值和反向狀態度量值的并行計算。
[0021] 進一步的,本發明方法中,所述步驟(4)中的歸一化處理為:0k+1內部8個狀態的 α15+1、!^1都減去該度量值的0狀態值a〇k+1 jf1。
[0022] 本發明與現有的單碼塊譯碼方法相比,該方法在相同指令周期內處理多個碼塊數 據,效率提升與并行碼塊數相同的倍數。與現有的分別正向計算α并反向計算邱勺方法相比, 該方法在相同指令周期內完成前者的正反向計算,效率提升一倍。
[0023] 有益效果:本發明與現有技術相比,具有以下優點:
[0024]當前的Turbo譯碼器實現方案中以github上的srsLTE項目較為完善、性能較好,此 方案使用AVX指令集,128位高級矢量寄存器,16位定點化,單碼塊譯碼,順序計算α、β的方 法。本發明與此方案相比,具有如下特點:
[0025] (1)當CPU支持的單指令多數據流指令集為AVX2、AVX512或更新的指令集時,本發 明相應增加并行碼塊個數并在譯碼過程中使用對應的指令以充分利用指令集支持的位寬; srsLTE中并沒有針對AVX2或更新的指令集的方法,無法充分發揮處理器性能;由于AVX、 AVX2和AVX512的指令周期是相同的,但是處理的數據量一次翻倍,則使用AVX2和AVX512實 現的并行譯碼和使用AVX單碼塊譯碼所需時間相同,當指令集為AVX2時,本方法對應的矢量 運算吞吐量是srsLTE中矢量運算吞吐量的兩倍,當指令集為AVX512時,本方法對應的矢量 運算吞吐量是srsLTE中矢量運算吞吐量的四倍;
[0026] (2)本發明使用的并行計算α、β的方法是用8位表示定點數,在128位中排列8個狀 態的α和8個狀態的β,而srsLTE中用16位表示定點數,128位中只能排列8個16位定點數,因 此相同指令周期中,本方法可以并行計算α、β,而srsLTE中的方法只能串行計算α、β;另外在 計算輸出對數似然比時,由于α、邱勺并行排列,每次可以計算出兩個輸出對數似然比信息, 而srsLTE中的方法只能計算一個;使用8位定點和16位定點相比增加的誤碼率在0.3dB以 內。
【附圖說明】
[0027] 圖1是并行Turbo譯碼結構圖。
[0028]圖2是生成矩陣[1 0 I 1;1 I 0 1]對應狀態位變化圖。
[0029]圖3是α、β矢量計算流程圖。
[0030] 圖4是輸出對數似然比矢量計算流程圖。
【具體實施方式】
[0031] 下面結合實施例和說明書附圖對本發明作進一步的說明。
[0032]實施例1:一種基于Intel CPU的并行Turbo譯碼方法,此實施例中硬件平臺采用 Intel CPU Core i7-4790,支持AVX2指令集,配有16個256位高級矢量寄存器,主頻3.6GHz; Turbo碼生成矩陣為[1 0 I 1;1 I 0 1],數據采用8位定點表示。雙碼塊并行譯碼時碼塊1 在低128位,碼塊2在高128位,碼塊之間并沒有交互,如圖1所示。Turbo碼攜帶信息為系統信 息L sysQ,校驗信息一和Lpl,Lsysl由Lsys〇經過交織得到。以下說明其中一個碼塊的譯碼過程: [0033] (1)對碼塊進行解剪裁,得到兩串系統信息L syst),Lsysl和兩串校驗信息一,Lpl,所述 系統信息Lsysl由系統信息Lsyst)交織得到,所述LsysQ、L p()由系統中的分量譯碼器0處理,所述 Lsysl、LPi由系統中的分量譯碼器1處理;
[0034] (3)以對數似然比形式計算分量譯碼器0各個碼塊中每個時序對應的分支度量值 γ 11、γ ?ο;
[0035] 根據分支狀態度量計算公式:
[0036]
[0037] Lsys,Lp,La,U分別為系統信息,校驗信息,先驗信息和外部信息;u k,pk分別表示系 統碼和校驗碼;Slk表示k步第i個狀態位;
[0038] 得到 y 11 = 0 · 5(Lsys+Lp+La),y IQ = O · 5(LSyS-Lp+La),其中La為先驗f目息,Lsys為LsysO 和Lsysl的通用符號,LpSlpq和Lpl的通用符號;
[0039] (4)分量譯碼器0中,在時序k,構建0k+1,具體為:根據碼塊的卷積碼生成矩陣列出 分支度量值γ nk、γ IQk的對應序列,如圖2所示,將γ nk、γ IQk按所述對應序列構建矢量γk; 矢量 9k 內部的定點數排列是 因此本例中從高位到低位對應的γ排列為γ nm,γ i〇m,γ i〇m,γ nm,γ nm,γ i〇m,γ i〇m,γ nm, γ nk,γ nk,γ i〇k,γ i〇k,γ i〇k,γ i〇k,γ nk,γ nk,m為k的反向時序,m=N-k-l,N為系統碼長 度;
[0040] 根據前向狀態度量計算公式計算α:
[0041]
[0042I 集合F包含了 k步中與Sj(k+1)有關的2 個狀態位,aQ = {0,-00,-00,-00,-00,-00,- OO ^ -00 I .
[0043 ]根據后向狀態度量計算公式計算β:
[0044]
[0045]集合B包含與狀態Sj(k-υ有關的k步的狀態位,β Ν-1= {0,-°° OO ^ -OO I .
[0046] 使用單指令多數據流指令進行矢量運算,如圖3所示, 然后根據卷積碼生成矩陣對應狀態位變化對91{+,01-內部數據進行重新排列;求0&和Θ 1-對應 數據的最大值作為下一時序的矢量9k+1;使用單指令多數據流指令進行計算時,由于8位定 點的限制,得到9 k+1后要進行歸一化處理,即內部8個狀態的#+1、^1都減去該度量值的0狀 態值a〇 k+1、β〇η-1,BP 歸一化后內部排列為β/-Ιβ,-1,β6η-1ItT 1,β5η-Ιβ,-1,β/-Ιβ,-1,工一 Po""1, P2m^1-Pom"1, ^r1-Pom"1,0, a7k+1-a〇k+1, a6k+1-a〇k+1, a5k+1-a〇k+1, a4k+1-a〇k+1, a3k+1-a〇k+1, a2k+1-a0k+1,ai k+1-a0k+1,〇;
[0047] 其中,當k = 〇時,θ°部數據為:α〇° = -127,β〇Ν-1 = -127,α護。。=〇,β護〇Ν-1 = 〇; 0k+、0k-為狀態分別為正、負的中間矢量,9k由上一時序產生,9 k中包含并行碼塊的八個前向狀態度 量值ajk和八個反向狀態度量值β/,j為狀態序號;
[0048]此步驟所涉及的矢量計算中,每個碼塊占用矢量內部的128位,所涉及的矢量計算 中,低64位計算前向狀態度量值a,高64位計算反向狀態度量值β,高64位和低64位之間不會 有數據交換;
[0049] (5)分量譯碼器0中,當時序k小于N的一半時,令k = k+l,并返回步驟(4),否則根據 以下公式計算輸出對數似然比L。:
[0050]
[00511集合U1和IT1包含了當Uk分別為1和-1時的狀態位;
[0052]如圖4所示,載入矢量θ'將其內部的調換位置,根據下式計算Lk+和L1^ [0053] Lk+ = 0m+0k+,Lk- = 0m+0k-,其中Lk+和Lk-分別為狀態為正負的輸出對數似然比中間矢 量;所述L k+和L1^每個矢量內部分別有并行碼塊的八個k時序的輸出對數似然比中間值和 八個m時序的輸出對數似然比中間值;
[0054] 分別求出Lk+中k時序和m時序的輸出對數似然比中間值的最大值Ik+和Γ+,Ι^中k時 序和m時序的輸出對數似然比中間值的最大值I kIPl'然后計算出lk+-lk1卩是k時刻的輸出 對數似然比信息,Γ+-Γ_即是m時刻的輸出對數似然比信息,為視圖簡潔,圖中l k+、lk_用1表 示,而lm+、lm,x表示,狀態標注在框圖右側;若k=N-l,執行下一步操作,否則令k = k+l,并 返回步驟(4);
[0055] 此步驟所涉及的矢量計算中,每個碼塊占用矢量內部的128位,低64位計算當前時 序k的輸出對數似然比,高64位計算時序Ν-k-l的輸出對數似然比,除了將矢量Θ Ν^內部的 α/+1和β/調換位置時高64位數據和低64位數據互換外,其余矢量計算中高64位和低64位 之間不會有數據交換;
[0056] (6)按照所述步驟(3)至(5)中分量譯碼器0的處理方法和流程,在分量譯碼器1中 進行分量譯碼,得到輸出對數似然比信息,然后由公式U = U-Lsys-U得到外部信息U,當前 譯碼器為譯碼器0時,將Uo交織得到譯碼器1的先驗信息Lal,當前譯碼器為譯碼器1時,將U1 解交織得到譯碼器0的先驗信息LaQ,其中U)、LaQ為譯碼器0的外部信息和先驗信息,L el、Lal 為譯碼器1的外部信息和先驗信息,Le是LeQ、Lel的通用符號,1^是1^0、Ul的通用符號;
[0057] (7)迭代指示器index累加一次,如index〈6,則返回步驟(3),當index = 6時,譯碼 結束。
[0058] 這種基于Intel CPU的并行Turbo譯碼方法主要優點在于吞吐量高,而誤碼率性能 損失有限。實施例1的結果如表格1所示,對照組為SrsLTE中的順序計算α、β的Turbo單碼塊 譯碼方案。誤碼率損失的比較對象是MTLAB下使用雙精度浮點數進行Turbo譯碼的誤碼率。 [0059] 表格1單碼塊和雙碼塊并行Turbo譯碼性能比較
[0061]上述實施例僅是本發明的優選實施方式,應當指出:對于本技術領域的普通技術 人員來說,在不脫離本發明原理的前提下,還可以做出若干改進和等同替換,這些對本發 明權利要求進行改進和等同替換后的技術方案,均落入本發明的保護范圍。
【主權項】
1. 一種基于InteI CPU的并行Turbo譯碼方法,其特征在于,該方法包括如下步驟: (1) 在單指令多數據流指令中,每個碼塊分配128位,設定并行碼塊個數為CPU支持的指 令位寬除以128;設置迭代指示器index = 0; (2) 對每個碼塊分別進行解剪裁,每個碼塊得到兩串系統信息LsysQ,Lsysl和兩串校驗信 息LpQ,Lpl,所述系統信息Lsysl由系統信息LsysQ交織得到,所述LsysQ、LpQ由系統中的分量譯碼 器0處理,所述L sysl、Lpl由系統中的分量譯碼器1處理; (3) 以對數似然比形式計算分量譯碼器0各個碼塊中每個時序對應的分支度量值γη、 y 10,即 y 11 = 0 · 5(Lsys+Lp+La),y IQ = O · 5(LSyS-Lp+La),其中La為先驗f目息,Lsys為LsysQ和Lsysl 的通用符號,LALpq和Lpl的通用符號; (4) 分量譯碼器0中,在時序k,構建0k+1,具體為:根據各個碼塊的卷積碼生成矩陣列出 分支狀態度量值γ nk、γ IQk的對應序列,將γ nk、γ以按所述對應序列構建矢量γk; 使用單指令多數據流指令進行矢量運算,即9k+ = 0k+ γ k,Θ1-= 0k- γ k,然后根據卷積碼 生成矩陣對應狀態位變化對θ'θ1-內部數據進行重新排列;求0&和Θ1-對應數據的最大值作 為下一時序的矢量9 k+1,然后進行歸一化處理; 其中,9k由上一時序產生,0k中包含并行碼塊的八個前向狀態度量值a/和八個反向狀態 度量值&m,j為狀態序號,N為系統碼長,當k = 0時,Qt3內部數據為:€^ = -127 4(^ = -127, a護oQ = 0,β護oN-1 = 0; 0k+、0k-為狀態分別為正、負的中間矢量,m = Ν-k-l; (5) 分量譯碼器0中,當時序k小于N的一半時,令k = k+l,并返回步驟(4),否則載入矢量 Sm,將其內部的〇/和0/調換位置,根據下式計算Lk+和L1-: Lk+=0m+0k+,Lk-= 9m+0k-, 其中Lk+和LK_分別為狀態為正負的輸出對數似然比中間矢量;所述Lk+和L k_每個矢量內 部分別有并行碼塊的八個k時序的輸出對數似然比中間值和八個m時序的輸出對數似然比 中間值; 分別求出Lk+中k時序和m時序的輸出對數似然比中間值的最大值Ik+和Γ+,Ι^中k時序和 m時序的輸出對數似然比中間值的最大值IkIPl'然后計算出lk+-lk1卩是k時刻的輸出對數 似然比信息,Γ+-Γ1卩是m時刻的輸出對數似然比信息;若k=N-l,則進入步驟(6),否則令k = k+l,并返回步驟(4); (6) 按照所述步驟(3)至(5)中分量譯碼器0的處理方法和流程,在分量譯碼器1中進行 分量譯碼,得到輸出對數似然比信息,然后由公式U = U-Lsys-U得到外部信息U,當前譯碼 器為譯碼器0時,將Uo交織得到譯碼器1的先驗信息Lal,當前譯碼器為譯碼器1時,將U 1解交 織得到譯碼器0的先驗信息LaQ,其中LeQ、LaQ為譯碼器0的外部信息和先驗信息,L el、Lal為譯 碼器1的外部?目息和先驗?目息,Le是Le〇、Lel的通用符號,La是LaO、Lal的通用符號; (7) 迭代指示器index累加一次,如index〈6,則返回步驟(3),當index = 6時,譯碼結束。2. 根據權利要求1所述的基于Intel CPU的并行Turbo譯碼方法,其特征在于,所述步驟 (1)中CTU指令集位寬為256位;設置并行碼塊個數為2,所述步驟(3)至(6)中的運算使用 AVX2指令集處理。3. 根據權利要求1所述的基于Intel CPU的并行Turbo譯碼方法,其特征在于,所述步驟 (1)中CTU指令集位寬為512位,設置并行碼塊個數為4,所述步驟(3)至(6)中的運算使用 AVX512指令集處理。4. 根據權利要求1、2或3所述的基于Intel CPU的并行Turbo譯碼方法,其特征在于,所 述步驟(4)中和(5)中使用單指令多數據流指令實現前向狀態度量值和反向狀態度量值的 并行計算。5. 根據權利要求1、2或3所述的基于Intel CPU的并行Turbo譯碼方法,其特征在于,所 述步驟(4)中的歸一化處理為:0k+1內部8個狀態的a k+1 j-1都減去該度量值的〇狀態值aQk+1、 β〇Μ-、
【文檔編號】H03M13/29GK105915235SQ201610218721
【公開日】2016年8月31日
【申請日】2016年4月8日
【發明人】王捷, 畢明勇, 范鵬博, 李磊, 粟勇, 王東明
【申請人】東南大學