亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種基于gpu的卷積碼高速并行譯碼方法及譯碼器的制造方法

文檔序號(hào):10660549閱讀:446來源:國知局
一種基于gpu的卷積碼高速并行譯碼方法及譯碼器的制造方法
【專利摘要】本發(fā)明公開一種基于GPU的卷積碼高速并行譯碼方法及譯碼器,屬于通信領(lǐng)域。本譯碼方法先將碼流信息進(jìn)行分段,通過異步傳輸方式發(fā)送到GPU上,在GPU上按照維特比算法對(duì)每個(gè)分段并行進(jìn)行前向路徑量度計(jì)算和路徑回溯,實(shí)現(xiàn)全并行譯碼,最后合并每個(gè)分段的譯碼結(jié)果,輸出譯碼碼流信息。本發(fā)明的譯碼器包括位于主機(jī)和GPU設(shè)備上的初始化模塊、位于主機(jī)的串并轉(zhuǎn)換器、位于GPU設(shè)備的前向計(jì)算內(nèi)核和回溯內(nèi)核。主機(jī)與GPU設(shè)備之間通過異步傳輸通道實(shí)現(xiàn)數(shù)據(jù)的傳輸。本發(fā)明在保證抗誤碼性能不變的情況下,提升了譯碼并行度,并挖掘卷積碼網(wǎng)格圖蝶形結(jié)構(gòu)的特性,降低了運(yùn)算復(fù)雜度,所適用的卷積碼范圍廣泛,實(shí)現(xiàn)難度低,靈活性和兼容性強(qiáng)。
【專利說明】
一種基于GPU的卷積碼高速并行譯碼方法及譯碼器
技術(shù)領(lǐng)域
[0001] 本發(fā)明屬于通信領(lǐng)域,具體涉及一種基于GPU(圖形處理器)的卷積碼譯碼方法及 譯碼器裝置。
【背景技術(shù)】
[0002] 卷積碼于1955年由Elias提出,是一種不同于分組碼的信道編碼方式,其編碼器具 有一定的記憶性。一個(gè)碼率為1/R,編碼約束長度為K的卷積碼稱為(R,1,K)卷積碼。卷積碼 具有良好的譯碼性能,被廣泛應(yīng)用于各種通信標(biāo)準(zhǔn)中。例如,IEEE 802.11和IEEE 802.16通 信標(biāo)準(zhǔn)中均使用了( 2,1,7)卷積碼,CDMA2000標(biāo)準(zhǔn)中使用了( 3,1,9)卷積碼,4G LTE標(biāo)準(zhǔn)中 使用了(3,1,7)卷積碼等。卷積碼最常用的譯碼算法是維特比算法。維特比算法等價(jià)于求在 一個(gè)加權(quán)圖里尋找最短路徑問題的動(dòng)態(tài)規(guī)劃解。維特比算法實(shí)際上就是卷積碼的最大似然 (ML)譯碼算法。傳統(tǒng)的維特比譯碼是一種串行譯碼方式,譯碼速率低,延時(shí)大。如何設(shè)計(jì)一 種基于維特比算法的高速并行譯碼方式是非常有意義的。
[0003] 本領(lǐng)域內(nèi)公知,基于FPGA(現(xiàn)場可編程門陣列)、ASIC(專用集成電路)等大規(guī)模集 成電路設(shè)計(jì)的譯碼器,譯碼速率高,但研發(fā)周期長,成本高,靈活性差;而于DSP、x86-CPU和 ARM等處理器設(shè)計(jì)的譯碼器,雖然兼容性和靈活性較好,但受限于硬件資源,通常只能達(dá)到 兆級(jí)的譯碼速率,不能滿足高速通信系統(tǒng)中的應(yīng)用需求。近年來,隨著GPU的發(fā)展,其作為通 用處理器的能力得到了挖掘。基于GPU設(shè)計(jì)的譯碼器架構(gòu)繼承了 CPU的靈活性和通用性,開 發(fā)難度低,且譯碼速率能達(dá)到百兆級(jí)以上。

【發(fā)明內(nèi)容】

[0004] 基于上述需求,本發(fā)明提出一種基于GPU的卷積碼分段并行維特比譯碼方法,并設(shè) 計(jì)一種基于GHJ平臺(tái)的譯碼架構(gòu),以實(shí)現(xiàn)卷積碼的高速并行譯碼。
[0005] 本發(fā)明提供了一種基于GPU的卷積碼高速并行譯碼方法,包括初始化階段和譯碼 階段。初始化階段包括步驟1~步驟3,譯碼階段包括步驟4~步驟7。
[0006] 步驟1,主機(jī)初始化;主機(jī)啟動(dòng)系統(tǒng)線程,分配內(nèi)存空間;
[0007] 步驟2,GPU設(shè)備初始化;主機(jī)發(fā)送控制信號(hào),激活GPU設(shè)備,在GPU設(shè)備上分配GPU全 局內(nèi)存空間,創(chuàng)建異步流;
[0008] 在GPU設(shè)備上設(shè)置有網(wǎng)格圖存儲(chǔ)器和蝶形分組器;網(wǎng)格圖存儲(chǔ)器對(duì)卷積碼對(duì)應(yīng)的 網(wǎng)格圖進(jìn)行存儲(chǔ);蝶形分組器對(duì)卷積碼的蝶形結(jié)構(gòu)進(jìn)行分組,對(duì)于碼率為1/R,約束長度為K 的卷積碼(R,1,K),蝶形分組器對(duì)該卷積碼網(wǎng)格圖中的N/2個(gè)蝶形結(jié)構(gòu)進(jìn)行分組,同一組蝶 形結(jié)構(gòu)具有完全相同的分支路徑,組數(shù) Nc = 2R,N表示編碼器狀態(tài)總數(shù),Ν=2κ4χρυ設(shè)備上還 設(shè)置幸存路徑存儲(chǔ)區(qū)用于存儲(chǔ)譯碼過程中的幸存路徑,設(shè)置路徑量度存儲(chǔ)區(qū)用于對(duì)前向路 徑量度計(jì)算中得到的路徑累積量度進(jìn)行存儲(chǔ)。
[0009] 步驟3,給定信道模型和卷積碼接收碼流信息,選擇合適的分段長度D和交疊深度 L,對(duì)接收的碼流信息進(jìn)行分段和交疊處理,得到若干分段;
[0010] 步驟4: GPU設(shè)備為本次譯碼分配異步流,主機(jī)將分段碼流通過異步傳輸方式傳送 給GPU設(shè)備;
[0011] 步驟5:對(duì)每一個(gè)分段,按照維特比算法,進(jìn)行長度為L+2D的前向路徑量度計(jì)算;
[0012] 步驟6 :對(duì)每一個(gè)分段,在前向路徑量度計(jì)算結(jié)束后,進(jìn)行狀態(tài)估計(jì);對(duì)每一個(gè)分 段,按照估計(jì)得到的狀態(tài),選擇一條幸存路徑進(jìn)行長度為L+D的路徑回溯,并判決輸出長度 為D的譯碼結(jié)果;
[0013] 步驟7:合并每個(gè)分段的譯碼結(jié)果,得到譯碼輸出碼流信息。
[0014] 本發(fā)明的另一個(gè)目的是設(shè)計(jì)一種基于GPU的卷積碼高速并行譯碼器,包括位于主 機(jī)和GPU設(shè)備上的初始化模塊、位于主機(jī)的串并轉(zhuǎn)換器、位于GPU設(shè)備的前向計(jì)算內(nèi)核和回 溯內(nèi)核。所述的主機(jī)與GHJ設(shè)備之間通過異步傳輸通道實(shí)現(xiàn)數(shù)據(jù)的異步交換。
[0015] 初始化模塊,用于對(duì)主機(jī)和GPU設(shè)備進(jìn)行初始化操作;在主機(jī)上設(shè)置數(shù)據(jù)接收緩存 區(qū)、數(shù)據(jù)發(fā)送緩存區(qū)、第一分段信息存儲(chǔ)器和第一分段譯碼結(jié)果存儲(chǔ)器。主機(jī)發(fā)送控制信 號(hào),激活GPU設(shè)備。在GPU設(shè)備上分配GPU全局內(nèi)存空間,創(chuàng)建異步流,在GPU設(shè)備上設(shè)置第二 分段信息存儲(chǔ)器、第二分段譯碼結(jié)果存儲(chǔ)器、路徑量度存儲(chǔ)器、幸存路徑存儲(chǔ)器、網(wǎng)格圖存 儲(chǔ)器和蝶形分組器。數(shù)據(jù)接收緩存區(qū)對(duì)主機(jī)接收的碼流信息進(jìn)行存儲(chǔ);數(shù)據(jù)發(fā)送緩存區(qū)對(duì) 主機(jī)發(fā)送的譯碼輸出碼流信息進(jìn)行存儲(chǔ);分段信息存儲(chǔ)器對(duì)串并轉(zhuǎn)換后的各分段進(jìn)行存 儲(chǔ);分段譯碼結(jié)果存儲(chǔ)器對(duì)分段譯碼結(jié)果進(jìn)行存儲(chǔ)。路徑量度存儲(chǔ)器對(duì)前向路徑量度計(jì)算 中得到的路徑累積量度進(jìn)行存儲(chǔ);幸存路徑存儲(chǔ)器對(duì)前向路徑量度計(jì)算中篩選出的幸存路 徑進(jìn)行存儲(chǔ)。網(wǎng)格圖存儲(chǔ)器對(duì)卷積碼對(duì)應(yīng)的網(wǎng)格圖進(jìn)行存儲(chǔ)。蝶形分組器對(duì)卷積碼的蝶形 結(jié)構(gòu)進(jìn)行分組,對(duì)于碼率為1/R,約束長度為K的卷積碼(R,1,K),蝶形分組器對(duì)該卷積碼網(wǎng) 格圖中的N/2個(gè)蝶形結(jié)構(gòu)進(jìn)行分組,同一組蝶形結(jié)構(gòu)具有完全相同的分支路徑,組數(shù)N c = 2r, N表示編碼器狀態(tài)總數(shù),N=2k4。
[0016] 串并轉(zhuǎn)換器,位于主機(jī),對(duì)接收的碼流信息進(jìn)行分段和交疊處理,將各分段存入第 一分段信息存儲(chǔ)器。串并轉(zhuǎn)換器還將第一分段譯碼結(jié)果存儲(chǔ)器中存儲(chǔ)的分段譯碼結(jié)果進(jìn)行 合并,輸出給數(shù)據(jù)發(fā)送緩存區(qū)。
[0017] 所述的GPU設(shè)備譯碼時(shí),首先分配一條異步流,主機(jī)通過異步傳輸方式將第一分段 信息存儲(chǔ)器內(nèi)的各分段傳入GPU設(shè)備的第二分段信息存儲(chǔ)器。然后,啟動(dòng)前向計(jì)算內(nèi)核,前 向計(jì)算內(nèi)核從第二分段信息存儲(chǔ)器中獲取各分段,對(duì)每個(gè)分段的每個(gè)狀態(tài)進(jìn)行前向路徑量 度的計(jì)算,得到各狀態(tài)的路徑累積量度和幸存路徑。在前向計(jì)算內(nèi)核執(zhí)行結(jié)束后,啟動(dòng)回溯 內(nèi)核?;厮輧?nèi)核對(duì)每個(gè)分段以估計(jì)的狀態(tài)為起點(diǎn)沿幸存路徑進(jìn)行回溯,同時(shí)完成譯碼判決, 輸出譯碼結(jié)果,存儲(chǔ)在第二分段譯碼結(jié)果存儲(chǔ)器中。在GHJ設(shè)備譯碼完成后,GPU設(shè)備通過異 步傳輸方式將第二分段譯碼結(jié)果存儲(chǔ)器中的分段譯碼結(jié)果傳入主機(jī)的第一分段譯碼結(jié)果 存儲(chǔ)器中。
[0018] 所述的前向計(jì)算內(nèi)核中啟動(dòng)32 · Nc · Nc · Nbi條線程,其中包括Nc · Nbi個(gè)線程塊, 每個(gè)線程塊由Nc個(gè)線程束組成,每個(gè)線程束由32個(gè)線程組成。所述的回溯內(nèi)核中啟動(dòng)32 · Nc · Nbi條線程,其中包括Nbi個(gè)線程塊。每個(gè)前向計(jì)算內(nèi)核和回溯內(nèi)核均映射Nt = 32 · Nc · Nbi個(gè)并行處理分段。Nc、Nbi和Nt均為正整數(shù)。
[0019] 本發(fā)明的優(yōu)點(diǎn)與積極效果在于:
[0020] (1)本發(fā)明在保證抗誤碼性能不變的情況下,提升了譯碼并行度,對(duì)維特比算法進(jìn) 行簡化,并挖掘卷積碼網(wǎng)格圖蝶形結(jié)構(gòu)的特性,對(duì)譯碼過程進(jìn)行優(yōu)化處理,降低了運(yùn)算復(fù)雜 度。本方法適用的卷積碼范圍廣泛,實(shí)現(xiàn)難度低,靈活性和兼容性強(qiáng),適用于所有基于CUDA 架構(gòu)開發(fā)的GHJ硬件。
[0021] (2)本發(fā)明提出的基于GPU的譯碼架構(gòu),有效地結(jié)合了分段并行維特比譯碼方法和 GPU的硬件特點(diǎn),對(duì)譯碼并行度、數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)傳輸?shù)冗M(jìn)行了優(yōu)化設(shè)計(jì),最大限度提升了 GPU硬件資源利用率,提升了譯碼速率。通過大規(guī)模并行譯碼處理,在保證較低的譯碼延時(shí) 條件下,提升了譯碼吞吐率,達(dá)到Gbps量級(jí)的譯碼信息速率。
【附圖說明】
[0022] 圖1為本發(fā)明的卷積碼碼流分段方式示意圖;
[0023] 圖2為本發(fā)明的分段維特比譯碼方法示意圖;
[0024]圖3為本發(fā)明的分段并行譯碼處理示意圖;
[0025]圖4為本發(fā)明所涉及的卷積碼網(wǎng)格圖蝶形示意圖;
[0026]圖5為本發(fā)明所提出的基于GPU的卷積碼譯碼器架構(gòu)的工作框圖;
[0027]圖6為本發(fā)明所提出的基于GPU的卷積碼譯碼器內(nèi)核線程網(wǎng)格映射示意圖;
[0028] 圖7為本發(fā)明所提出的全局內(nèi)存中數(shù)據(jù)合并存儲(chǔ)方式設(shè)計(jì)圖;
[0029] 圖8為本發(fā)明所涉及的卷積碼編碼器的一個(gè)具體示例;
[0030] 圖9為本發(fā)明所涉及的卷積碼網(wǎng)格圖蝶形的一個(gè)具體示例;
[0031] 圖10為本發(fā)明所提出的譯碼器譯碼步驟的流程圖;
[0032]圖11為本發(fā)明所提出的異步流譯碼示意圖。
【具體實(shí)施方式】
[0033]下面將結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明。
[0034] 本發(fā)明提出的基于GPU的卷積碼高速并行譯碼方法及譯碼架構(gòu),適用于采用連續(xù) 編碼方式的卷積碼的譯碼,并且能夠?qū)Ω鞣N常見無線通信標(biāo)準(zhǔn)中所使用的卷積碼進(jìn)行譯 碼。本發(fā)明提供的譯碼方法,通過對(duì)接收碼流進(jìn)行分段處理,提升了譯碼并行度,適用于大 規(guī)模并行的硬件實(shí)現(xiàn)。本發(fā)明提供的譯碼器裝置基于GHJ架構(gòu)設(shè)計(jì),在減少譯碼群延時(shí)的前 提下,實(shí)現(xiàn)了 GPU資源利用率最大化,最大限度提升了譯碼的吞吐率。
[0035] 本發(fā)明的基于GPU的卷積碼高速并行譯碼方法,包括初始化階段和譯碼階段。初始 化階段包括步驟1~步驟3。譯碼階段包括步驟4~步驟7。
[0036] 步驟1,主機(jī)初始化。主機(jī)啟動(dòng)系統(tǒng)線程,分配內(nèi)存空間。
[0037] 在主機(jī)上設(shè)置接收緩存區(qū)用于存儲(chǔ)接收碼流信息,設(shè)置發(fā)送緩存區(qū)用于存儲(chǔ)譯碼 結(jié)果,設(shè)置第一分段信息存儲(chǔ)區(qū)用于存儲(chǔ)分段組,設(shè)置第一分段譯碼結(jié)果存儲(chǔ)區(qū)用于存儲(chǔ) 分段譯碼結(jié)果。
[0038] 步驟2,GPU設(shè)備初始化。主機(jī)發(fā)送控制信號(hào),激活GPU設(shè)備,在GPU設(shè)備上分配GPU全 局內(nèi)存空間,創(chuàng)建異步流。
[0039]在GPU設(shè)備上,設(shè)置如下存儲(chǔ)區(qū):設(shè)置第二分段信息存儲(chǔ)區(qū)用于存儲(chǔ)分段組,設(shè)置 第二分段譯碼結(jié)果存儲(chǔ)區(qū)用于存儲(chǔ)分段譯碼結(jié)果,設(shè)置幸存路徑存儲(chǔ)區(qū)用于存儲(chǔ)譯碼過程 中的幸存路徑,設(shè)置路徑量度存儲(chǔ)區(qū)用于對(duì)前向路徑量度計(jì)算中得到的路徑累積量度進(jìn)行 存儲(chǔ),設(shè)置網(wǎng)格圖存儲(chǔ)器對(duì)卷積碼對(duì)應(yīng)的網(wǎng)格圖進(jìn)行存儲(chǔ),設(shè)置蝶形分組器對(duì)卷積碼的蝶 形結(jié)構(gòu)進(jìn)行分組,將網(wǎng)格圖中N/2個(gè)蝶形結(jié)構(gòu)進(jìn)行分組,同一組蝶形結(jié)構(gòu)具有完全相同的分 支路徑,用于提供前向計(jì)算內(nèi)核中的線程與狀態(tài)映射關(guān)系。
[0040] 步驟3,主機(jī)根據(jù)給定的信道模型和卷積碼接收碼流信息,選擇合適的分段長度D 和交疊深度L,對(duì)接收的碼流信息進(jìn)行分段和交疊處理,得到若干分段,存入第一分段信息 存儲(chǔ)區(qū)。本步驟中,對(duì)信道模型沒有特殊要求。
[0041] 步驟3對(duì)接收的碼流信息進(jìn)行分段,以能實(shí)現(xiàn)在GPU上的并行執(zhí)行。如圖1所示,為 采用連續(xù)編碼方式在接收端得到的卷積碼碼流信息。首先,選取合適長度D作為基準(zhǔn),對(duì)半 無限長碼流信息進(jìn)行分段。然后,對(duì)每個(gè)長度為D的分段,向前和向后各延伸長度L,使其與 前后分段各交疊2L。這樣,碼流信息被分割成了長度為D+2L的若干分段。本方法中對(duì)長度D 的選擇無特殊要求,建議值為100~1000個(gè)符號(hào)。長度L與卷積碼約束長度K有關(guān),一般選擇 為約束長度K的4~6倍。對(duì)于碼流信息首尾不足部分,使用符號(hào)"0"將對(duì)應(yīng)的信息進(jìn)行填充。 [0042] 步驟4,進(jìn)入GPU譯碼階段,GPU設(shè)備為本次譯碼分配異步流,主機(jī)將分段碼流通過 異步傳輸方式傳送給GHJ設(shè)備。
[0043]步驟5,對(duì)每一個(gè)分段,按照維特比算法,進(jìn)行長度為L+2D的前向路徑量度計(jì)算。
[0044]步驟6,對(duì)每一個(gè)分段,在前向路徑量度計(jì)算結(jié)束后,進(jìn)行狀態(tài)估計(jì);對(duì)每一個(gè)分 段,按照估計(jì)得到的狀態(tài),選擇一條幸存路徑進(jìn)行長度為L+D的路徑回溯,并判決輸出長度 為D的譯碼結(jié)果。
[0045]下面對(duì)照?qǐng)D2敘述分段維特比譯碼方法。如圖2所示,一個(gè)長度為D+2L的分段,由同 步塊、譯碼塊和回溯塊三個(gè)部分組成。同步塊和回溯塊的長度均為L,譯碼塊的長度為D。對(duì) 于該分段的譯碼過程,進(jìn)行步驟5和6。
[0046]步驟5中,進(jìn)行長度為D+2L的前向路徑量度計(jì)算,通過維特比算法中加比選方法更 新當(dāng)前階段每個(gè)狀態(tài)對(duì)應(yīng)的路徑累計(jì)量度信息PM和幸存路徑信息SP。步驟6中的狀態(tài)估計(jì), 是維特比算法中狀態(tài)估計(jì)的簡化,不需要求出最短幸存路徑,而是僅需任選一個(gè)狀態(tài)。此處 通常選擇全零狀態(tài)。選擇全零狀態(tài)作為回溯過程的起點(diǎn),沿該起點(diǎn)對(duì)應(yīng)的幸存路徑進(jìn)行長 度為L的回溯,再繼續(xù)回溯長度D,同時(shí)進(jìn)行判決輸出,得到長度為D的譯碼結(jié)果。
[0047]前向路徑量度計(jì)算方法和路徑回溯方法依據(jù)維特比算法。維特比算法為本領(lǐng)域內(nèi) 公開技術(shù),此處不再贅述。
[0048] 步驟7:合并每個(gè)分段的譯碼結(jié)果,得到譯碼輸出碼流信息。
[0049] 下面對(duì)照?qǐng)D3敘述GPU設(shè)備上分段間并行譯碼方法。
[0050] 如圖3所示,以并行處理分段數(shù)Nt = 4為例進(jìn)行說明。首先,按照?qǐng)D1中所示方法對(duì) 輸入卷積碼碼流信息中長度為Nt X D的部分進(jìn)行分段,得到Nt個(gè)長度為D+2L的分段。然后,譯 碼器啟動(dòng)Nt個(gè)譯碼處理單元,分別映射N t個(gè)分段,進(jìn)行并行的維特比譯碼。最后,將各譯碼處 理單元輸出的長度為D的譯碼結(jié)果進(jìn)行合并,得到長度為NtXD的譯碼輸出,作為此次并行 分段譯碼的輸出。之后,對(duì)輸入碼流信息的下一個(gè)NtXD的部分重復(fù)上述操作,直至碼流末 尾。其中,對(duì)于并行處理分段數(shù)Nt的選擇,由GPU硬件條件和對(duì)譯碼器延時(shí)的要求共同決定。 [0051 ]下面敘述對(duì)卷積碼網(wǎng)格圖中蝶形結(jié)構(gòu)的分組方法。
[0052]首先進(jìn)行符號(hào)定義。一個(gè)碼率為1/R,約束長度為K的卷積碼記作(R,1,K)卷積碼; 定義N表示編碼器狀態(tài)總數(shù),且有N= 2V,其中,v = K-l;定義So,Si,…,3^分別表示N個(gè)狀態(tài); 定義Dm,Dv-2,…,Do分別為編碼器的v個(gè)移位寄存器的狀態(tài),對(duì)于狀態(tài)Sd,其編號(hào)d為移位寄 存器對(duì)應(yīng)的二進(jìn)制數(shù),即d=(Dv-iDwDo)2;定義g(1),g(2),…,g (R)分別表示卷積碼的R個(gè)生 成多項(xiàng)式,其中,…容^"],r = 1,2,…R;定義X表示編碼器當(dāng)前輸入比特信息; 定義c (Sd,X)表示在狀態(tài)Sd時(shí),輸入比特X對(duì)應(yīng)的編碼器輸出符號(hào)。
[0053]下面對(duì)照?qǐng)D4敘述卷積碼網(wǎng)格圖中的蝶形特征。
[0054]對(duì)于卷積碼N個(gè)狀態(tài)中的四個(gè)狀態(tài):S2j,S2j+1,Sj,Sj+N/2構(gòu)成一個(gè)狀態(tài)轉(zhuǎn)移圖,如圖4 所示,稱為蝶形結(jié)構(gòu),記作叫。其中,j = 0,l,2,…N/2-1。定義α,β,γ,θ分別表示四條分支對(duì) 應(yīng)的輸出符號(hào)。在四條分支中,兩條上分支表示輸入比特x = 〇時(shí)的狀態(tài)轉(zhuǎn)移,兩條下分支表 示輸入比特x = l時(shí)的狀態(tài)轉(zhuǎn)移。即有關(guān)系:a = c(S2j,0),P = c(S2j,l),γ = c(S2j+i,0),0 = c (S2J+1,1)。經(jīng)過推到可以得到如下關(guān)系式:
[0058] & 表示卷積碼R個(gè)生成多項(xiàng)式的第k次冪系數(shù)組成的向量,?表示 向量按位異或操作。
[0059]由公式(1)~(3)可以得到以下結(jié)論:對(duì)于給定了編碼方式的卷積碼,一旦確定了 a 的值,則β,γ,θ的值均可以唯一求得。因此,可以根據(jù)a取值的不同,將網(wǎng)格圖中N/2個(gè)蝶形 結(jié)構(gòu)進(jìn)行分組,同一組蝶形結(jié)構(gòu)具有完全相同的分支路徑,組數(shù)N c = 2r。
[0060] 對(duì)蝶形結(jié)構(gòu)進(jìn)行分組的一個(gè)好處在于,在前向路徑量度計(jì)算過程的每個(gè)階段中, 對(duì)于每組蝶形中的狀態(tài)路徑信息的更新,只需計(jì)算四條分支量度BM。計(jì)算量由原來的2N減 少到4N。,降低了前向路徑量度計(jì)算過程中的運(yùn)算復(fù)雜度,減少了存儲(chǔ)資源消耗。
[0061] 下面敘述本發(fā)明所提出的基于GPU的卷積碼高速并行譯碼架構(gòu)。所述的基于GPU的 卷積碼高速并行譯碼器,主要包括位于主機(jī)和GPU設(shè)備上的初始化模塊、位于主機(jī)的串并轉(zhuǎn) 換器、位于GPU設(shè)備的前向計(jì)算內(nèi)核和回溯內(nèi)核。
[0062] 初始化模塊,用于對(duì)主機(jī)和GPU設(shè)備進(jìn)行初始化操作。
[0063] 主機(jī)初始化包括在主機(jī)上設(shè)置數(shù)據(jù)接收緩存區(qū)、數(shù)據(jù)發(fā)送緩存區(qū)、第一分段信息 存儲(chǔ)器和第一分段譯碼結(jié)果存儲(chǔ)器。主機(jī)發(fā)送控制信號(hào),激活GPU設(shè)備。數(shù)據(jù)接收緩存區(qū)對(duì) 主機(jī)接收的碼流信息進(jìn)行存儲(chǔ);數(shù)據(jù)發(fā)送緩存區(qū)對(duì)主機(jī)發(fā)送的譯碼輸出碼流信息進(jìn)行存 儲(chǔ)。
[0064] GPU設(shè)備初始化包括分配GPU全局內(nèi)存空間,創(chuàng)建異步流;在GPU設(shè)備上設(shè)置第二分 段信息存儲(chǔ)器、第二分段譯碼結(jié)果存儲(chǔ)器、路徑量度存儲(chǔ)器、幸存路徑存儲(chǔ)器、網(wǎng)格圖存儲(chǔ) 器和蝶形分組器。
[0065]分段信息存儲(chǔ)器對(duì)串并轉(zhuǎn)換后的各分段進(jìn)行存儲(chǔ);分段譯碼結(jié)果存儲(chǔ)器對(duì)分段譯 碼結(jié)果進(jìn)行存儲(chǔ)。路徑量度存儲(chǔ)器對(duì)前向路徑量度計(jì)算中得到的路徑累積量度進(jìn)行存儲(chǔ); 幸存路徑存儲(chǔ)器對(duì)前向路徑量度計(jì)算中篩選出的幸存路徑進(jìn)行存儲(chǔ)。網(wǎng)格圖存儲(chǔ)器對(duì)卷積 碼對(duì)應(yīng)的網(wǎng)格圖進(jìn)行存儲(chǔ)。蝶形分組器對(duì)卷積碼的蝶形結(jié)構(gòu)進(jìn)行分組,對(duì)于碼率為1/R,約 束長度為K的卷積碼(R,1,K),蝶形分組器對(duì)該卷積碼網(wǎng)格圖中的N/2個(gè)蝶形結(jié)構(gòu)進(jìn)行分組, 同一組蝶形結(jié)構(gòu)具有完全相同的分支路徑,組數(shù)N c = 2r,N表示編碼器狀態(tài)總數(shù),N=2k4。
[0066]串并轉(zhuǎn)換器,位于主機(jī),對(duì)接收的碼流信息進(jìn)行分段和交疊處理,將各分段存入第 一分段信息存儲(chǔ)器。串并轉(zhuǎn)換器還將第一分段譯碼結(jié)果存儲(chǔ)器中存儲(chǔ)的分段譯碼結(jié)果進(jìn)行 合并,輸出給數(shù)據(jù)發(fā)送緩存區(qū)。
[0067] GPU設(shè)備譯碼時(shí),首先分配一條異步流,主機(jī)通過異步傳輸方式將第一分段信息存 儲(chǔ)器內(nèi)的各分段傳入GPU設(shè)備的第二分段信息存儲(chǔ)器。然后,啟動(dòng)前向計(jì)算內(nèi)核,前向計(jì)算 內(nèi)核從第二分段信息存儲(chǔ)器中獲取各分段,對(duì)每個(gè)分段的每個(gè)狀態(tài)進(jìn)行前向路徑量度的計(jì) 算,得到各狀態(tài)的路徑累積量度和幸存路徑并存入相應(yīng)的存儲(chǔ)器。在前向計(jì)算內(nèi)核執(zhí)行結(jié) 束后,啟動(dòng)回溯內(nèi)核?;厮輧?nèi)核對(duì)每個(gè)分段以估計(jì)的狀態(tài)為起點(diǎn)沿幸存路徑進(jìn)行回溯,同時(shí) 完成譯碼判決,輸出譯碼結(jié)果,存儲(chǔ)在第二分段譯碼結(jié)果存儲(chǔ)器中。在GPU設(shè)備譯碼完成后, GPU設(shè)備通過異步傳輸方式將第二分段譯碼結(jié)果存儲(chǔ)器中的分段譯碼結(jié)果傳入主機(jī)的第一 分段譯碼結(jié)果存儲(chǔ)器中。
[0068]圖5是譯碼器的整體結(jié)構(gòu)圖,表明了譯碼器各個(gè)存儲(chǔ)單元和計(jì)算單元的分布與聯(lián) 系。其中,GPU譯碼器通過全局內(nèi)存和主機(jī)內(nèi)存之間數(shù)據(jù)的異步傳輸實(shí)現(xiàn)分段碼流的輸入和 譯碼結(jié)果的輸出。CPU提供控制信號(hào)調(diào)度GPU內(nèi)核工作。GPU流多處理器簇依次執(zhí)行前向計(jì)算 內(nèi)核和回溯內(nèi)核。在前向計(jì)算內(nèi)核執(zhí)行過程中,讀入常量內(nèi)存中的網(wǎng)格圖信息和全局內(nèi)存 中的分段碼流信息,計(jì)算分支量度并更新路徑累積量度和幸存路徑信息。在回溯內(nèi)核執(zhí)行 過程中,讀入全局內(nèi)存中的幸存路徑信息,回溯并輸出判決碼字信息。
[0069]下面對(duì)照?qǐng)D6敘述GPU內(nèi)核中線程映射方式,圖6以Nc = 4為例。
[0070] 首先,敘述前向計(jì)算內(nèi)核中的線程映射結(jié)構(gòu)。每個(gè)前向計(jì)算內(nèi)核啟動(dòng)32 · N?!?N。· Nbl條線程,其中包括Nc · Nblf線程塊,每個(gè)線程塊由Nc個(gè)線程束組成,每個(gè)線程束由32個(gè)線 程組成,N bl表示回溯內(nèi)核中線程塊個(gè)數(shù)。對(duì)于每個(gè)分段,由N。條線程共同完成前向計(jì)算過 程,其中每個(gè)線程分別映射一個(gè)蝶形分組;對(duì)于32個(gè)分段,由N。個(gè)線程束完成前向計(jì)算過 程,其中相同偏移量的N。條線程映射同一個(gè)分段。因此,每個(gè)前向計(jì)算內(nèi)核一共映射N t = 32 · N?!?Nbi個(gè)分段。
[0071] 對(duì)于回溯內(nèi)核,每個(gè)回溯內(nèi)核一共啟動(dòng)32 · Nc · Nbl條線程,其中包括Nbl個(gè)線程塊, 每個(gè)線程塊由Nc個(gè)線程束組成,每個(gè)線程束由32個(gè)線程組成。對(duì)于每個(gè)分段,由一個(gè)線程單 獨(dú)完成回溯過程;對(duì)于32個(gè)分段,由一個(gè)線程束完成回溯過程。因此,每個(gè)回溯內(nèi)核一共映 射N t = 32 · Nc · Nbi個(gè)分段。
[0072] 下面敘述GPU譯碼器中各存儲(chǔ)單元的設(shè)計(jì)方法。
[0073]首先,闡述幸存路徑信息的存儲(chǔ)結(jié)構(gòu)。幸存路徑信息存儲(chǔ)于GPU片外全局內(nèi)存中, 其存儲(chǔ)結(jié)構(gòu)如圖7所示,由前向計(jì)算內(nèi)核寫入,由回溯內(nèi)核讀出,屬于讀寫存儲(chǔ)器。GPU中全 局內(nèi)存訪問以一個(gè)線程束為基本單位,一次讀寫32個(gè)連續(xù)存儲(chǔ)信息。對(duì)幸存路徑信息的訪 問需滿足GPU內(nèi)存合并訪問機(jī)制,以保證內(nèi)存帶寬。其存儲(chǔ)結(jié)構(gòu)可用如下公式表示:
[0074] SP[D+2L][NC][32 · Nc · Nbi] (4)
[0075]在該三維結(jié)構(gòu)中,第一維表不分段長度,第二維表不蝶形分組數(shù),第三維表不分段 數(shù)。每個(gè)存儲(chǔ)單元擁有N/N。個(gè)存儲(chǔ)比特位,對(duì)應(yīng)每個(gè)蝶形分組中的N/N。個(gè)狀態(tài),如下所示:
[0077]在前向路徑量度計(jì)算的第s個(gè)階段,內(nèi)核的第b個(gè)線程塊的第w個(gè)線程束中的第t條 線程,更新幸存路徑SP[s][w][b · 32+t];則一個(gè)線程束組成一次合并的連續(xù)訪問:SP[s] [w][b · 32]~SP[s][w][b · 32+31]。
[0078] 在回溯過程的第s個(gè)階段,內(nèi)核的第b個(gè)線程塊的第w個(gè)線程束中的第t條線程,通 過N。次內(nèi)存訪問依次讀取幸存路徑
[0079] SP[s][0][b · Nc · 32+w · 32+t],.",SP[s][Nc-l][b · Nc · 32+w · 32+t]
[0080] 共Nc個(gè)信息;則第g次訪問中,一個(gè)線程束組成一次合并的連續(xù)訪問:SP[s][g] [b · Nc · 32+w · 32]~SP[s][g][b · Nc · 32+w · 32+31]。這樣,兩個(gè)內(nèi)核中的幸存路徑信息 操作均滿足了合并訪問機(jī)制。這也是應(yīng)用蝶形分組的另一個(gè)好處。
[0081] 下面闡述路徑累積量度信息的存儲(chǔ)結(jié)構(gòu)。路徑累積量度信息存儲(chǔ)于GPU片上共享 內(nèi)存(SMEM)中,以前向計(jì)算內(nèi)核為生命周期,以線程塊為作用域。路徑量度存儲(chǔ)器使用的是 GPU片上共享內(nèi)存資源,這種存儲(chǔ)方式設(shè)計(jì)避免了共享內(nèi)存bank沖突。
[0082] 對(duì)于前向計(jì)算內(nèi)核中的每個(gè)線程塊,共享內(nèi)存的分配方式如下所示:
[0083] PM[N][32] (6)
[0084]在該二維結(jié)構(gòu)中,第一維表不狀態(tài)數(shù),第二維表不分段數(shù)。由于一個(gè)線程塊所映射 的分段數(shù)為32個(gè),因此第二維大小為固定值。由于GPU共享內(nèi)存中32個(gè)存儲(chǔ)體(bank)橫向排 列的特點(diǎn),使得同一分段中的狀態(tài)信息屬于同一bank。因此,對(duì)于線程束中的任意一條線程 t,必定只訪問第t個(gè)bank中的信息PM[*][t],避免了線程間的bank沖突,保證了共享內(nèi)存的 訪問效率達(dá)到100 %。
[0085] GPU全局內(nèi)存合并訪問機(jī)制以及共享內(nèi)存bank機(jī)制為本領(lǐng)域內(nèi)公知常識(shí),可參見 文檔《CUDA C Programming Guide》,在此不作贊述。
[0086] 所述的網(wǎng)格圖存儲(chǔ)器使用的是GPU常量內(nèi)存(CMEM)資源。
[0087] 所述的異步流和異步傳輸通道實(shí)現(xiàn)了數(shù)據(jù)傳輸之間、內(nèi)核之間以及數(shù)據(jù)傳輸和內(nèi) 核執(zhí)行之間在時(shí)間上的交疊。其中,數(shù)據(jù)傳輸之間的交疊是指主機(jī)到設(shè)備(H2D)和設(shè)備到主 機(jī)(D2H)之間的傳輸交疊。
[0088]所述的分段信息存儲(chǔ)器和分段譯碼結(jié)果存儲(chǔ)器鏡像存在于主機(jī)和GPU設(shè)備。其中, 在主機(jī)上使用系統(tǒng)內(nèi)存,在GPU上使用片外全局內(nèi)存(GMEM)資源,存儲(chǔ)方式設(shè)計(jì)滿足GPU全 局內(nèi)存合并訪問機(jī)制。
[0089] 實(shí)施例:
[0090] 以下結(jié)合附圖,對(duì)本發(fā)明的一個(gè)實(shí)施例進(jìn)行進(jìn)一步詳細(xì)說明。
[0091] 如圖8所示,為一個(gè)(2,1,7)卷積碼的編碼器框圖。該卷積碼的兩個(gè)生成多項(xiàng)式分 另0為g (1) = [1111001]和g(2) = [1011011]。其中,gf=gf=l,其蝶形結(jié)構(gòu)中 的分支α有4種取值:00,01,10,11,相應(yīng)的β,γ,Θ取值如圖9所示,BP :
[0095] 對(duì)該卷積碼的Ν = 64個(gè)狀態(tài)對(duì)應(yīng)的32個(gè)蝶形結(jié)構(gòu)進(jìn)行分組,組數(shù)Nc = 4,每組8個(gè), 結(jié)果如下表所示:
[0097] 其中,蝶形結(jié)構(gòu)Bj包含兩個(gè)狀態(tài)S2j和S2j+1。
[0098] 本發(fā)明提出的譯碼器的譯碼流程如圖10所示。譯碼過程分為兩個(gè)階段,分別為譯 碼初始化階段和譯碼階段。首先介紹初始化階段。初始化階段包括以下三個(gè)步驟:
[0099]步驟1,主機(jī)初始化。主機(jī)啟動(dòng)系統(tǒng)線程,分配內(nèi)存空間。設(shè)置接收緩存區(qū)HC1,用于 存儲(chǔ)接收碼流信息,大小為Nt · D · R。設(shè)置發(fā)送緩存區(qū)扯2,用于存儲(chǔ)譯碼結(jié)果,大小為Nt · D。設(shè)置存儲(chǔ)區(qū)Hs,用于存儲(chǔ)分段組,大小為Nt · (D+2L) · R。設(shè)置存儲(chǔ)區(qū)Hr,用于存儲(chǔ)分段譯 碼結(jié)果,大小為Nt · D。其中,分段數(shù)Nt = 32 · Nc · Nbi。
[0100] 步驟2,GPU設(shè)備初始化。主機(jī)發(fā)送控制信號(hào),激活GPU設(shè)備。分配GPU全局內(nèi)存空間, 創(chuàng)建3條異步流,如圖11所示。
[0101] 設(shè)置存儲(chǔ)區(qū)Dr,用于存儲(chǔ)分段組,大小為Nt · (D+2L) · R。設(shè)置存儲(chǔ)區(qū)Ds,用于存儲(chǔ) 分段譯碼結(jié)果,大小為Nt · D。設(shè)置存儲(chǔ)區(qū)SP,用于存儲(chǔ)譯碼過程中幸存路徑信息,大小為 Nt · (D+2L) · N。設(shè)置路徑量度存儲(chǔ)區(qū)PM,用于對(duì)前向路徑量度計(jì)算中得到的路徑累積量度 進(jìn)行存儲(chǔ)。設(shè)置幸存路徑存儲(chǔ)器,用于對(duì)前向路徑量度計(jì)算中篩選出的幸存路徑進(jìn)行存儲(chǔ)。 設(shè)置網(wǎng)格圖存儲(chǔ)器,用于對(duì)卷積碼對(duì)應(yīng)的網(wǎng)格圖進(jìn)行存儲(chǔ)。設(shè)置蝶形分組器,用于對(duì)卷積碼 的蝶形結(jié)構(gòu)進(jìn)行分組,將網(wǎng)格圖中N/2個(gè)蝶形結(jié)構(gòu)進(jìn)行分組,同一組蝶形結(jié)構(gòu)具有完全相同 的分支路徑,用于提供前向計(jì)算內(nèi)核中的線程與狀態(tài)映射關(guān)系。
[0102] 步驟3,碼流初始化。主機(jī)接收其他設(shè)備(如數(shù)據(jù)采集卡)傳入的碼流信息,并存儲(chǔ) 于內(nèi)存緩存區(qū)HC1。當(dāng)緩存區(qū)滿,對(duì)接收信息進(jìn)行串并轉(zhuǎn)換,生成N t組分段,并存儲(chǔ)于Hs,等待 傳入GPU進(jìn)行譯碼。
[0103] 譯碼初始化階段之后,進(jìn)行GPU譯碼階段。該階段包括以下幾個(gè)步驟:
[0104] 步驟4.1,分配異步流。為本次譯碼分配一條空閑異步流。若沒有空閑異步流,則選 擇一條最小負(fù)荷異步流。
[0105] 步驟4.2,數(shù)據(jù)傳輸H2D。通過異步傳輸方式將Nt組分段信息由存儲(chǔ)區(qū)Hs傳入存儲(chǔ)區(qū) Dr中。
[0106] 步驟5,啟動(dòng)前向計(jì)算內(nèi)核K1。分配線程網(wǎng)格,啟動(dòng)Nc · Nbi個(gè)線程塊,共32 · Nc · Nc · Nbl條線程,完成分段維特比譯碼的前向路徑量度計(jì)算過程。
[0107] 步驟6.1,同步。設(shè)置同步點(diǎn),等待內(nèi)核K1執(zhí)行結(jié)束。選擇全零狀態(tài)作為回溯過程的 起點(diǎn)。
[0108] 步驟6.2,啟動(dòng)回溯內(nèi)核1(2。分配線程網(wǎng)格,啟動(dòng)他1個(gè)線程,共32*1*他1條線程, 完成分段維特比譯碼的回溯過程。
[0109] 步驟7.1,數(shù)據(jù)傳輸D2H。通過異步傳輸方式將32 · Nc · Nbdi分段譯碼結(jié)果由存儲(chǔ) 區(qū)Ds傳入存儲(chǔ)區(qū)Hr中。
[0110]步驟7.2,譯碼結(jié)果串并轉(zhuǎn)換。將存儲(chǔ)區(qū)Hr中的分段譯碼結(jié)果合并轉(zhuǎn)換為長度為 Nt · D譯碼結(jié)果,并存儲(chǔ)于發(fā)送緩存區(qū)HC2,等待傳送給下一級(jí)設(shè)備。
[0111]下面進(jìn)一步說明步驟5中前向計(jì)算內(nèi)核K1的執(zhí)行過程。
[0112]步驟5.1,分配GPU共享內(nèi)存空間,設(shè)置路徑累積量度存儲(chǔ)區(qū)PM,初始化為零。對(duì)于 每個(gè)線程塊,PM大小為N · 32。分配寄存器資源,定義臨時(shí)變量。
[0113] 對(duì)于線程塊be [0,Nbi · N。)中線程束we [0,N。)中的線程te [0,32),并行執(zhí)行以 下步驟5.2~步驟5.7:
[0114] 步驟5.2,記se [0,D+2L),初始化s = 0,計(jì)算偏移量tid = b · 32+t。
[0115] 步驟5.3,從存儲(chǔ)區(qū)Dr中讀取一個(gè)碼字符號(hào)信息Ctid(s)。
[0116] 步驟5.4,根據(jù)w的取值選擇相應(yīng)的蝶形分組w,計(jì)算四條分支量度,計(jì)算方法參照 維特比算法:
[0117] BMa = distance{Ctid(s) ,α}
[0118] BMp = distance{Ctid(s) ,β}
[0119] ΒΜγ =distance{Ctid(s), γ }
[0120] ΒΜθ = distance{Ctid(s),θ}
[0121] 步驟5.5,對(duì)于蝶形分組w中的每個(gè)蝶形叫中的狀態(tài),完成以下步驟(1)~(3):
[0122] (1)從存儲(chǔ)區(qū)ΡΜ中讀取前次路徑累積量度信息PM[2j][t],PM[2j+l][t]。
[0123] (2)分別計(jì)算PM[2j][t]+BMa和PM[2j+l][t]+BM Y值,比較后選擇較小值更新PM[j] [t],并標(biāo)記幸存路徑信息sp,上分支標(biāo)記0,下分支標(biāo)記1。
[0124] ⑶分別計(jì)算PM[2 j] [t]+BMfs和PM[2 j+1 ] [t]+ΒΜθ值,比較后選擇較小值更新PM[ j+ 2ν< ] [ t ],并標(biāo)記幸存路徑信息sp,上分支標(biāo)記0,下分支標(biāo)記1。
[0125] 步驟5.6,存儲(chǔ)幸存路徑信息3?[8][¥][1:丨(1]=8口。
[0?26] 步驟5.7,s加一,繼續(xù)進(jìn)入步驟5.3執(zhí)行,直至s = D+2L時(shí)結(jié)束。
[0127] 下面進(jìn)一步說明步驟6.2中內(nèi)核K2的執(zhí)行過程。
[0128] 步驟6.2.1,分配寄存器資源,定義臨時(shí)變量。
[0129] 對(duì)于線程塊be[0,Nbl)中線程束we[0,Nc)中的線程te[0,32),并行執(zhí)行以下步 驟:
[0130] 步驟6.2.2,記8£[1^,0+21^),初始化8 = 0+21^-1。記8七3七6表示當(dāng)前狀態(tài),初始化 state = 0。計(jì)算偏移量tid = b · Ν?!?32+w · 32+t。
[0131] 步驟6.2.3,依次讀取Nc 個(gè)幸存路徑信息:SP[s][0][tid]~SP[s][Nc-l][tid]。
[0132] 步驟6.2.4,根據(jù)N。個(gè)幸存路徑信息計(jì)算下一步state值,計(jì)算方法參照維特比算 法。
[0133] 步驟6.2.5,若s小于D+L-1,則判決輸出1比特譯碼結(jié)果,存儲(chǔ)于Ds中。
[0?34] 步驟6.2.6,s減一,繼續(xù)轉(zhuǎn)步驟6.2.3執(zhí)行,直至s = L-1時(shí)結(jié)束。
[0135]綜上所示,利用本發(fā)明提供的分段并行維特比譯碼方法和譯碼器裝置,能夠充分 發(fā)揮GPU的特性,實(shí)現(xiàn)高速并行的卷積碼譯碼。
【主權(quán)項(xiàng)】
1. 一種基于GHJ的卷積碼高速并行譯碼方法,其特征在于,包括初始化階段和譯碼階 段;初始化階段包括步驟1~步驟3,譯碼階段包括步驟4~步驟7,具體如下: 步驟1,主機(jī)初始化;主機(jī)啟動(dòng)系統(tǒng)線程,分配內(nèi)存空間; 步驟2,GPU設(shè)備初始化;主機(jī)發(fā)送控制信號(hào),激活GPU設(shè)備,在GPU設(shè)備上分配GPU全局內(nèi) 存空間,創(chuàng)建異步流; 在GPU設(shè)備上設(shè)置有網(wǎng)格圖存儲(chǔ)器和蝶形分組器;網(wǎng)格圖存儲(chǔ)器對(duì)卷積碼對(duì)應(yīng)的網(wǎng)格 圖進(jìn)行存儲(chǔ);蝶形分組器對(duì)卷積碼的蝶形結(jié)構(gòu)進(jìn)行分組,對(duì)于碼率為1/R,約束長度為K的卷 積碼(R,I,K),蝶形分組器對(duì)該卷積碼網(wǎng)格圖中的N/2個(gè)蝶形結(jié)構(gòu)進(jìn)行分組,同一組蝶形結(jié) 構(gòu)具有完全相同的分支路徑,組數(shù)K = 2r,N表示編碼器狀態(tài)總數(shù),Ν=2κ4; GPU設(shè)備上還設(shè)置幸存路徑存儲(chǔ)區(qū)用于存儲(chǔ)譯碼過程中的幸存路徑,設(shè)置路徑量度存 儲(chǔ)區(qū)用于對(duì)前向路徑量度計(jì)算中得到的路徑累積量度進(jìn)行存儲(chǔ); 步驟3,給定信道模型和卷積碼接收碼流信息,選擇分段長度D和交疊深度L,對(duì)接收的 碼流信息進(jìn)行分段和交疊處理; 步驟4: GPU設(shè)備為本次譯碼分配異步流,主機(jī)將分段碼流通過異步傳輸方式傳送給GPU 設(shè)備; 步驟5,對(duì)每一個(gè)分段,按照維特比算法,進(jìn)行長度為L+2D的前向路徑量度計(jì)算; 步驟6,對(duì)每一個(gè)分段,在前向路徑量度計(jì)算結(jié)束后,進(jìn)行狀態(tài)估計(jì);對(duì)每一個(gè)分段,按 照估計(jì)得到的狀態(tài),選擇一條幸存路徑進(jìn)行長度為L+D的路徑回溯,并判決輸出長度為D的 譯碼結(jié)果;所述的狀態(tài)估計(jì)是指任選一個(gè)狀態(tài); 步驟7:合并每個(gè)分段的譯碼結(jié)果,得到譯碼輸出碼流信息。2. 根據(jù)權(quán)利要求1所述的一種基于GPU的卷積碼高速并行譯碼方法,其特征在于,所述 的步驟2中,蝶形分組器對(duì)一個(gè)碼率為1/R,約束長度為K的卷積碼(R,1,K)的網(wǎng)格圖進(jìn)行分 組的方法是: 定義So,S1,…,Sn-汾別表示N個(gè)狀態(tài);定義,Dv-2,…,Do分別為編碼器的V個(gè)移位寄存 器的狀態(tài),v=K-l; 對(duì)于狀態(tài)Sd,其編號(hào)d為移位寄存器對(duì)應(yīng)的二進(jìn)制數(shù),表示為d= (Dv^Dv-2…D(J)2 ; 定義g(1),g(2),…,g(R)分別表示卷積碼的R個(gè)生成多項(xiàng)式,其中,,)=[gi rkd <)],r =1,2,···,R;定義x表示編碼器當(dāng)前輸入比特信息;定義c(Sd,x)表示在狀態(tài)Sd時(shí),輸入比特x 對(duì)應(yīng)的編碼器輸出符號(hào); 卷積碼N個(gè)狀態(tài)中的四個(gè)狀態(tài)S2j、S2j+1、Sj和Sj+N/2構(gòu)成一個(gè)狀態(tài)轉(zhuǎn)移圖,稱為蝶形結(jié)構(gòu), 記作叫,」=0,1,-_』/2-1;狀態(tài)轉(zhuǎn)移圖的四條分支中,兩條上分支表示輸入比特0時(shí)的狀態(tài) 轉(zhuǎn)移,兩條下分支表示輸入比特1時(shí)的狀態(tài)轉(zhuǎn)移,定義α、β、γ和Θ分別表示對(duì)應(yīng)的輸出符 號(hào),表示為:a = c(S2j,0),P = c(S2j,l),γ = c(S2j+i,0),Q = c(S2j+i,l); 則有關(guān)系式:= tef…]表示卷積碼R個(gè)生成多項(xiàng)式的第k次冪系數(shù)組成的向量,表示向量 按位異或操作; 對(duì)于給定了編碼方式的卷積碼,一旦確定a的值,則β、γ和Θ的值均唯一求得;根據(jù)a取 值的不同,將網(wǎng)格圖中N/2個(gè)蝶形結(jié)構(gòu)進(jìn)行分組。3. 根據(jù)權(quán)利要求1所述的一種基于GPU的卷積碼高速并行譯碼方法,其特征在于,所述 的步驟2中,幸存路徑存儲(chǔ)區(qū)設(shè)置在GPU片外全局內(nèi)存中,其存儲(chǔ)結(jié)構(gòu)表示如下: SP[D+2L][NC][32 · Nc · Nbi] 在該三維結(jié)構(gòu)中,第一維表示分段長度,第二維表示蝶形分組數(shù),第三維表示分段數(shù); 每個(gè)存儲(chǔ)單元擁有N/N。個(gè)存儲(chǔ)比特位,對(duì)應(yīng)每個(gè)蝶形分組中的N/N。個(gè)狀態(tài),如下所示: (N:lNc )hit& 在前向路徑量度計(jì)算的第S個(gè)階段,第b個(gè)線程塊的第W個(gè)線程束中的第t條線程,更新 幸存路徑SP[s][w][b · 32+t];則一個(gè)線程束組成一次合并的連續(xù)訪問:SP[s][w][b · 32] ~SP[s][w][b · 32+31]; 路徑量度存儲(chǔ)區(qū)設(shè)置在GHJ片上共享內(nèi)存中,以前向計(jì)算內(nèi)核為生命周期,以線程塊為 作用域;對(duì)于前向計(jì)算內(nèi)核中的每個(gè)線程塊,路徑量度存儲(chǔ)區(qū)的存儲(chǔ)結(jié)構(gòu)表示如下: PM[N][32] 在該二維結(jié)構(gòu)中,第一維表示狀態(tài)數(shù),第二維表示分段數(shù);由于一個(gè)線程塊所映射的分 段數(shù)為32個(gè),因此第二維大小為固定值。4. 根據(jù)權(quán)利要求1所述的一種基于GPU的卷積碼高速并行譯碼方法,其特征在于,所述 的步驟3中,先選取長度D作為基準(zhǔn),對(duì)碼流信息進(jìn)行分段,再對(duì)每個(gè)長度為D的分段,向前和 向后各延伸長度L,使其與前后分段各交疊2L,碼流信息被分割成了長度為D+2L的若干分 段;對(duì)碼流信息首尾不足部分,使用符號(hào)"0"將對(duì)應(yīng)的信息進(jìn)行填充。5. 根據(jù)權(quán)利要求1所述的一種基于GPU的卷積碼高速并行譯碼方法,其特征在于,所述 的步驟5中,前向路徑量度計(jì)算時(shí),在前向計(jì)算內(nèi)核中啟動(dòng)32 · N?!?N?!?Nbi條線程,其中包 括Nc · Nblf線程塊,每個(gè)線程塊由Nc個(gè)線程束組成,每個(gè)線程束由32個(gè)線程組成;所述的步 驟6中,路徑回溯時(shí),在回溯內(nèi)核中啟動(dòng)32 · Nc · Nbl條線程,其中包括Nbl個(gè)線程塊;每個(gè)前向 計(jì)算內(nèi)核和回溯內(nèi)核均映射Nt = 32 · Nc · Nbi個(gè)并行處理分段;Nc、Nbi和Nt均為正整數(shù)。6. 根據(jù)權(quán)利要求2或3或5所述的一種基于GHJ的卷積碼高速并行譯碼方法,其特征在 于,所述的步驟5中,對(duì)于線程塊be[〇,N bl ·Ν。)中線程束we[〇,N。)中的線程七^[〇,32),進(jìn) 行前向路徑量度計(jì)算的過程如下: 步驟5.2,記se [〇,D+2L),初始化s = 0,計(jì)算偏移量tid = b · 32+t; 步驟5.3,從GRJ設(shè)備的分段信息存儲(chǔ)區(qū)中讀取一個(gè)碼字符號(hào)Ctld(S); 步驟5.4,根據(jù)w的取值選擇相應(yīng)的蝶形分組w,計(jì)算四條分支量度BMa、BMe、ΒΜγ和BMe,如 下: BMa = distance{Ctid(s) ,α} BMp = distance{Ctid(s) ,β} ΒΜγ = distance{Ctid(s),γ } BMe = distance{Ctid(s), θ} 其中,α、β、γ和θ為蝶形分組w對(duì)應(yīng)的狀態(tài)轉(zhuǎn)移圖中四條分支的輸出符號(hào); 步驟5.5,對(duì)于蝶形分組w中的每個(gè)蝶形叫中的狀態(tài),完成以下步驟(1)~(3),其中j = 0, 1,···,Ν/2-1; (I)從路徑量度存儲(chǔ)區(qū)中讀取前次路徑累積量度信息PM[ 2 j ] [ t ]和PM[ 2 j+1 ] [ t ]; (2)分別計(jì)算PM[2 j ] [t]+ΒΜα和PM[2 j+1 ] [t]+ΒΜγ值,比較后選擇較小值更新PM[ j ] [t], 并標(biāo)記幸存路徑存儲(chǔ)區(qū)中的幸存路徑信息sp,上分支標(biāo)記O,下分支標(biāo)記I; ⑶分別計(jì)算PM[2 j] [ t] +BMe和PM[2 j+1 ] [t]+ΒΜθ值,比較后選擇較小值更新PM[ j+2v-1 ] [t],并標(biāo)記幸存路徑存儲(chǔ)區(qū)中幸存路徑信息sp,上分支標(biāo)記0,下分支標(biāo)記I; 步驟5.6,存儲(chǔ)幸存路徑信息5?[8]|^][1^(1] = 8口; 步驟5.7,s加一,繼續(xù)進(jìn)入步驟5.3執(zhí)行,直至s = D+2L時(shí)結(jié)束。7. -種基于GPU的卷積碼高速并行譯碼器,其特征在于,該裝置包括位于主機(jī)和GHJ設(shè) 備上的初始化模塊、位于主機(jī)的串并轉(zhuǎn)換器、位于GPU設(shè)備的前向計(jì)算內(nèi)核和回溯內(nèi)核;主 機(jī)與GPU設(shè)備之間通過異步傳輸通道實(shí)現(xiàn)數(shù)據(jù)的異步交換; 所述的初始化模塊,用于對(duì)主機(jī)和GHJ設(shè)備進(jìn)行初始化操作;在主機(jī)上設(shè)置數(shù)據(jù)接收緩 存區(qū)、數(shù)據(jù)發(fā)送緩存區(qū)、第一分段信息存儲(chǔ)器和第一分段譯碼結(jié)果存儲(chǔ)器;主機(jī)發(fā)送控制信 號(hào),激活GPU設(shè)備;在GPU設(shè)備上分配GPU全局內(nèi)存空間,創(chuàng)建異步流,在GPU設(shè)備上設(shè)置第二 分段信息存儲(chǔ)器、第二分段譯碼結(jié)果存儲(chǔ)器、路徑量度存儲(chǔ)器、幸存路徑存儲(chǔ)器、網(wǎng)格圖存 儲(chǔ)器和蝶形分組器;數(shù)據(jù)接收緩存區(qū)對(duì)主機(jī)接收的碼流信息進(jìn)行存儲(chǔ);數(shù)據(jù)發(fā)送緩存區(qū)對(duì) 主機(jī)發(fā)送的譯碼輸出碼流信息進(jìn)行存儲(chǔ);分段信息存儲(chǔ)器對(duì)串并轉(zhuǎn)換后的各分段進(jìn)行存 儲(chǔ);分段譯碼結(jié)果存儲(chǔ)器對(duì)分段譯碼結(jié)果進(jìn)行存儲(chǔ);路徑量度存儲(chǔ)器對(duì)前向路徑量度計(jì)算 中得到的路徑累積量度進(jìn)行存儲(chǔ);幸存路徑存儲(chǔ)器對(duì)前向路徑量度計(jì)算中篩選出的幸存路 徑進(jìn)行存儲(chǔ);網(wǎng)格圖存儲(chǔ)器對(duì)卷積碼對(duì)應(yīng)的網(wǎng)格圖進(jìn)行存儲(chǔ);蝶形分組器對(duì)卷積碼的蝶形 結(jié)構(gòu)進(jìn)行分組,對(duì)于碼率為1/R,約束長度為K的卷積碼(R,1,K),蝶形分組器對(duì)該卷積碼網(wǎng) 格圖中的N/2個(gè)蝶形結(jié)構(gòu)進(jìn)行分組,同一組蝶形結(jié)構(gòu)具有完全相同的分支路徑,組數(shù)N c = 2r, N表示編碼器狀態(tài)總數(shù),N=2k4 ; 所述的串并轉(zhuǎn)換器,對(duì)接收的碼流信息進(jìn)行分段和交疊處理,將各分段存入第一分段 信息存儲(chǔ)器;還將第一分段譯碼結(jié)果存儲(chǔ)器中存儲(chǔ)的分段譯碼結(jié)果進(jìn)行合并,輸出給數(shù)據(jù) 發(fā)送緩存區(qū); 所述的GPU設(shè)備譯碼時(shí),首先分配一條異步流,主機(jī)通過異步傳輸方式將第一分段信息 存儲(chǔ)器內(nèi)的各分段傳入GPU設(shè)備的第二分段信息存儲(chǔ)器;然后,啟動(dòng)前向計(jì)算內(nèi)核,前向計(jì) 算內(nèi)核從第二分段信息存儲(chǔ)器中獲取各分段,對(duì)每個(gè)分段的每個(gè)狀態(tài)進(jìn)行前向路徑量度的 計(jì)算,得到各狀態(tài)的路徑累積量度和幸存路徑;在前向計(jì)算內(nèi)核執(zhí)行結(jié)束后,啟動(dòng)回溯內(nèi) 核;回溯內(nèi)核對(duì)每個(gè)分段以估計(jì)的狀態(tài)為起點(diǎn)沿幸存路徑進(jìn)行回溯,同時(shí)完成譯碼判決,輸 出譯碼結(jié)果,存儲(chǔ)在第二分段譯碼結(jié)果存儲(chǔ)器中;在GHJ設(shè)備譯碼完成后,GPU設(shè)備通過異步 傳輸方式將第二分段譯碼結(jié)果存儲(chǔ)器中的分段譯碼結(jié)果傳入主機(jī)的第一分段譯碼結(jié)果存 儲(chǔ)器中。8. 根據(jù)權(quán)利要求7所述的一種基于GPU的卷積碼高速并行譯碼器,其特征在于,所述的 前向計(jì)算內(nèi)核,其內(nèi)啟動(dòng)32 · Nc · Nc · Nbi條線程,其中包括Nc · Nbi個(gè)線程塊,每個(gè)線程塊由 Nc個(gè)線程束組成,每個(gè)線程束由32個(gè)線程組成,每個(gè)線程映射一個(gè)蝶形分組;所述的回溯內(nèi) 核,其內(nèi)啟動(dòng)32 · Nc · Nbi條線程,其中包括Nbi個(gè)線程塊;每個(gè)前向計(jì)算內(nèi)核和回溯內(nèi)核均映 射Nt = 32 · Nc · Nbi個(gè)并行處理分段;Nc、Nbi和Nt均為正整數(shù)。9. 根據(jù)權(quán)利要求7所述的一種基于GPU的卷積碼高速并行譯碼器,其特征在于,所述的 幸存路徑存儲(chǔ)器設(shè)置在GHJ片外全局內(nèi)存中,其存儲(chǔ)結(jié)構(gòu)表示如下: SP[D+2L][NC][32 · Nc · Nbi] 在該三維結(jié)構(gòu)中,第一維表示分段長度,第二維表示蝶形分組數(shù),第三維表示分段數(shù); 每個(gè)存儲(chǔ)單元擁有N/N。個(gè)存儲(chǔ)比特位,對(duì)應(yīng)每個(gè)蝶形分組中的N/N。個(gè)狀態(tài),如下所示: sp[^][v][z]^nq^ :{NiKc}bits 在前向路徑量度計(jì)算的第s個(gè)階段,第b個(gè)線程塊的第w個(gè)線程束中的第t條線程,更新 幸存路徑SP[s][w][b · 32+t];則一個(gè)線程束組成一次合并的連續(xù)訪問:SP[s][w][b · 32] ~SP[s][w][b · 32+31]; 路徑量度存儲(chǔ)器設(shè)置在GHJ片上共享內(nèi)存中,以前向計(jì)算內(nèi)核為生命周期,以線程塊為 作用域;對(duì)于前向計(jì)算內(nèi)核中的每個(gè)線程塊,路徑量度存儲(chǔ)區(qū)的存儲(chǔ)結(jié)構(gòu)表示如下: PM[N][32] 在該二維結(jié)構(gòu)中,第一維表示狀態(tài)數(shù),第二維表示分段數(shù);由于一個(gè)線程塊所映射的分 段數(shù)為32個(gè),因此第二維大小為固定值。10.根據(jù)權(quán)利要求7所述的一種基于GPU的卷積碼高速并行譯碼器,其特征在于,所述的 回溯內(nèi)核,對(duì)每個(gè)分段,根據(jù)選擇的全零狀態(tài)作為起點(diǎn)。
【文檔編號(hào)】H04L1/00GK106027200SQ201610294503
【公開日】2016年10月12日
【申請(qǐng)日】2016年5月5日
【發(fā)明人】劉榮科, 彭皓, 趙嶺, 侯毅
【申請(qǐng)人】北京航空航天大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1