CN110380735B - 一种基于单指令多数据流的软件实现qc-ldpc译码方法 - Google Patents

一种基于单指令多数据流的软件实现qc-ldpc译码方法 Download PDF

Info

Publication number
CN110380735B
CN110380735B CN201910549113.XA CN201910549113A CN110380735B CN 110380735 B CN110380735 B CN 110380735B CN 201910549113 A CN201910549113 A CN 201910549113A CN 110380735 B CN110380735 B CN 110380735B
Authority
CN
China
Prior art keywords
vector
message
mask
information
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910549113.XA
Other languages
English (en)
Other versions
CN110380735A (zh
Inventor
王闻今
徐益
徐振
吴体昊
石丁
李灵瑄
高西奇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Southeast University
Original Assignee
Southeast University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Southeast University filed Critical Southeast University
Priority to CN201910549113.XA priority Critical patent/CN110380735B/zh
Publication of CN110380735A publication Critical patent/CN110380735A/zh
Application granted granted Critical
Publication of CN110380735B publication Critical patent/CN110380735B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • H03M13/1111Soft-decision decoding, e.g. by means of message passing or belief propagation algorithms
    • H03M13/1125Soft-decision decoding, e.g. by means of message passing or belief propagation algorithms using different domains for check node and bit node processing, wherein the different domains include probabilities, likelihood ratios, likelihood differences, log-likelihood ratios or log-likelihood difference pairs
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1148Structural properties of the code parity-check or generator matrix
    • H03M13/116Quasi-cyclic LDPC [QC-LDPC] codes, i.e. the parity-check matrix being composed of permutation or circulant sub-matrices

Landscapes

  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Advance Control (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

本发明提出了一种基于单指令多数据流的软件实现QC‑LDPC译码方法。一方面,通过水平分层的译码方法和块内并行策略使QC‑LDPC译码过程可以在x86通用处理器上并行实现。另一方面,该译码方法采用SIMD指令集,译码器的并行度获得了大幅地提高,并在根据指令集在掩码处理方面的新特性对内存读写过程和预处理过程进行优化。本发明解决了QC‑LDPC译码器在x86平台上处理时延高及吞吐量不足的问题,在保证低时延的前提下,有效地提高了QC‑LDPC译码的吞吐量。

Description

一种基于单指令多数据流的软件实现QC-LDPC译码方法
技术领域
本发明属于通信领域,具体涉及基于单指令多数据流的软件实现准循环低密度奇偶校验码(Quasi-Cyclic Low-Density Parity-Check,QC-LDPC)译码方法。
背景技术
一方面,为了满足为了移动通信在语言、视频和数据等方面多样化的服务需求,新一代移动通信系统需要支持多种不同的码块长度。另一方面,为了克服无线信道质量的不稳定性,移动通信系统支持的自适应调制编码(Adaptive Modulation and Code,AMC)要求信道编码的码率可变。因此,支持可变码长和可变码率的QC-LDPC被确定为增强移动宽带(Enhanced Mobile Broadband,eMBB)场景数据信道的信道编码方案。
近些年,由于开发速度快、扩展性强、便于重构等优势,基于通用处理器(GeneralPurpose Processor,GPP)的无线通信平台受到了关注。然而,基于GPP的LDPC译码器却很难满足通信系统高吞吐量和低时延的要求。利用单指令流多数据流(Single InstructionMultiple Data,SIMD)指令可以通过并行运算大幅提高系统吞吐量,而Intel最新发布的AVX-512指令集拥有可以优化LDPC译码过程的新特性。因此,本发明给出了一种基于单指令多数据流的软件实现QC-LDPC译码方法。
发明内容
发明目的:本发明的目的是提供一种基于SIMD指令集的,在x86通用处理器上实现高吞吐量、低时延的QC-LDPC译码的方法。
技术方案:为实现上述发明目的,本发明采用的技术方案为:
一种基于单指令多数据流的软件实现QC-LDPC译码方法,包括以下步骤:
(1)对接收到的对数似然比(log-likelihood ratio,LLR)先验信息进行解速率匹配,获得若干个浮点型LLR先验信息码块;
(2)根据各码块的码长和码率,计算在每次并行接入过程中VN信息向量和CN-to-VN信息向量在各自缓冲区中的起始地址和所需的掩码,并生成相应的起始地址表和掩码表;
(3)对浮点型LLR先验信息码块利用SIMD指令集并行地进行定点化,输出比特型LLR先验信息码块;
(4)将比特型LLR先验信息码块存入内存中的VN缓存区,与此同时将CN-to-VN缓存区和迭代次数计数器置零;
(5)根据步骤(2)中生成的起始地址表和掩码表,分别将VN缓存区和CN-to-VN缓存区中的消息向量依次载入寄存器,再将寄存器中的向量传入基于SIMD的消息传递模块,通过并行运算对各消息向量的值进行更新,更新后的消息将会重新存入缓存区的对应位置,当所有消息向量完成更新后,迭代次数加一;
(6)若迭代次数小于最大迭代次数,则重复步骤(5)中过程;当迭代次数达到最大迭代次数时,将VN缓冲区中的消息依次输入SIMD硬判决模块,通过并行运算获得译码结果;
(7)对下一个浮点型LLR先验信息码块重复(3)到(6)中的过程;若所有码块均译码完成,将译码结果进行解码块分割,得到译码后的传输块,译码结束。
所述步骤(2)中对并行的消息传递过程中,每次接入的VN信息向量和CN-to-VN信息向量的起始地址和掩码进行初始化;其中CN-to-VN信息向量的起始地址依次根据向量长度递增生成,不需要掩码,顺序接入即可;而由于组成QC-LDPC校验矩阵的循环置换矩阵具有循环移位的特性,VN信息向量的起始地址和掩码需要针对不同的循环置换矩阵进行计算;定义Pi,j为QC-LDPC基矩阵第i行、第j列元素对应的循环置换矩阵,其置换系数为bi,j,对于第l次迭代中,Pi,j对应的第k个VN信息向量
Figure BDA0002104970590000021
的加载和存储,针对不同情况有三种不同的初始化方法:
(a)若
Figure BDA0002104970590000022
中的元素在内存中连续,且长度等于最大并行度Q,则
Figure BDA0002104970590000023
只需要一个表示为jZ+mod(kQ+bi,j,Z)的起始地址,其中Z为当前QC-LDPC码的提升因子,而不需要对掩码进行初始化;
(b)若
Figure BDA0002104970590000024
中的元素在内存中连续,但长度小于最大并行度Q,此时
Figure BDA0002104970590000025
的起始地址仍只需要一个表示为jZ+mod(kQ+bi,j,Z)的起始地址,但需要根据向量长度计算初始化掩码;
(c)若
Figure BDA0002104970590000031
中的元素在内存中不连续,此时需要取出两块内存拼接成
Figure BDA0002104970590000032
两段需要起始的地址分别表示为jZ+mod(kQ+bi,j,Z)和jZ+mod((k+1)Q+bi,j,Z)-Q,同时需要计算两段相应掩码来控制存取。
所述步骤(3)中在定点化运算中,将输入的浮点型先验LLR消息定点化为6比特整数,仍占用8比特空间。
所述步骤(5)中将VN消息向量从缓存区中载入寄存器和将更新后寄存器中的消息向量存入缓存区的过程会根据步骤(2)的初始化结果采用不同的指令。以AVX-512指令集中指令为例,对于情况(a),需要加载和存储的数据是连续的,则通用一条加载/存储指令vmovdqu32就可以实现这一过程;对于情况(b),为了实现在掩码控制下的加载/存储,一条vmovdqu8指令就可以以比特长度的数据为单位进行加载存储控制;对于情况(c),在加载或存储VN信息向量时除了需要利用两条vmovdqu8指令进行控制,而在加载过程中额外需要用一条vpord指令对两处载入的向量进行拼接,该指令的作用是按位进行或运算。
所述步骤(5)中基于SIMD的消息传递模块通过VN信息向量和CN-to-VN信息向量之间的消息传递,实现了两类信息的更新,具体为:首先将具有相同i和k的VN信息向量
Figure BDA0002104970590000033
和CN-to-VN信息向量
Figure BDA0002104970590000034
作为模块输入,通过SIMD减法指令还原出VN-to-CN向量
Figure BDA0002104970590000035
其次利用基于SIMD的MS运算获得更新后的CN-to-VN信息向量
Figure BDA0002104970590000036
其中MS运算模块是基于LDPC最小和译码算法实现的;最后利用SIMD加法运算获得更新后的VN信息向量
Figure BDA0002104970590000037
以AVX-512指令集为例,所涉及到的指令包括:vpsubsb、vpmaxsb、vpandd、vpxord、vpabsb、vpminsb、vpsubusb、vpcmpb、vpblendmb、vpaddsb。在遍历完所有i和k的可能取值后,VN消息向量和对应的CN-to-VN消息向量的更新完成一次完整的迭代,进入下一场迭代。当迭代次数超过迭代次数最大值itermax后,所有更新完成。
所述步骤(6)中硬判决过程通过AVX-512指令进行加速,具体为:将更新完成后的VN消息向量依次从缓存区载入寄存器,将载入的长为64字节的向量
Figure BDA0002104970590000038
与等长的全零向量λ(0)输入SIMD比较指令,得到一个8字节的比较结果;此后将该结果作为掩码输入一个SIMD选择指令,待选择的两个向量分别为全零向量λ(0)和全一向量λ(1),该指令相当于将8字节的判决结果扩展为64字节的判决结果cj,k;最终将该判决结果存入译码结果缓存区的指定位置。以AVX-512指令集的实现过程为例,所涉及到的指令包括:vmovdqu32、vpcmpb、vpbroadcastb。
有益效果:与现有技术相比,本发明具有如下优点:
1.该软件实现的QC-LDPC译码方法在定点化、加载存储向量、消息传递、最小和算法实现和硬判决各关键模块均采用并行运算,其最高并行度可达64,吞吐量较串行译码器可提高约50倍。
2.该软件实现的QC-LDPC译码方法在译码运算前对并行接入过程所需的起始地址和掩码进行初始化,避免了重复的寻址过程和生成掩码过程。
3.该软件实现的QC-LDPC译码方法运用了SIMD指令集中与掩码相关的运算指令,在向量接入、存储等运算过程中大幅减少了指令的使用。
附图说明
图1为基于SIMD软件实现QC-LDPC译码器的系统结构示意图。
图2为利用vmovdqu8指令加载和存储VN消息向量的过程示意图。
图3为基于SIMD的消息传递模块的实现结构示意图。
图4为基于SIMD的最小和(MS)算法实现结构示意图。
图5为基于SIMD的硬判决实现结构示意图。
具体实施方式
以下结合附图通过具体实施例对本发明作进一步的描述,这些实施例仅用于说明本发明,并不是对本发明保护范围的限制。
由于具有支持可变码长的特性,QC-LDPC作为信道编码方法被广泛应用于各类通信系统中。和通常的LDPC码一样,QC-LDPC码的译码过程可以用Tanner图来表示。对于校验矩阵为m×n的LDPC码,拥有n个变量节点(VN)和m个校验节点(CN)。根据置信传播(BP)算法,通过让VN和CN间的对数似然比(LLR)信息相互传递,在多次迭代后就可以实现LDPC译码。在此过程中,每一次传播都会有对应的变量节点至校验节点(VN-to-CN)信息和检验节点至变量节点(CN-to-VN)信息。而通过应用分层的BP算法,可以将上述信息简化成VN信息和CN-to-VN信息。而为了降低计算复杂度,分层的BP算法又可以简化为分层的最小和(MS)算法(具体算法细节可参考J.Chen等的Near optimum universal belief propagation baseddecoding of low-density parity check codes)。对于QC-LDPC码的译码,由于其校验矩阵是由循环置换矩阵组成,上述过程可以通过通用处理器并行地实现。
如图1所示,本发明实施例公开的一种基于单指令多数据流的软件实现QC-LDPC译码方法,主要包括以下步骤:
(1)对接收到的LLR先验信息进行解速率匹配,获得若干个浮点型LLR先验信息码块;
(2)根据各码块的码长和码率,计算在每次并行接入过程中VN信息向量和CN-to-VN信息向量在各自缓冲区中的起始地址和所需的掩码,并生成相应的起始地址表和掩码表;
(3)对各浮点型LLR先验信息码块利用SIMD指令集并行地进行定点化,输出比特型LLR先验信息码块;
(4)将比特型LLR先验信息码块存入内存中的VN缓存区,与此同时将CN-to-VN缓存区和迭代次数计数器置零;
(5)根据(2)中生成的起始地址表和掩码表,分别将VN缓存区和CN-to-VN缓存区中的消息向量依次载入寄存器,再将寄存器中的向量传入基于SIMD的消息传递模块,通过并行运算对各消息向量的值进行更新,更新后的消息将会重新存入缓存区的对应位置,当所有消息向量完成更新后,迭代次数加一;
(6)若迭代次数小于最大迭代次数,则重复(5)中过程;当迭代次数达到最大迭代次数时,将VN缓冲区中的消息依次输入SIMD硬判决模块,通过并行运算获得译码结果;
(7)对下一码块重复(3)到(6)中的过程;若所有码块均译码完成,将译码结果进行解码块分割,得到译码后的传输块,译码结束。
所述步骤(2)中对并行的消息传递过程中,每次接入的VN信息向量和CN-to-VN信息向量的起始地址和掩码进行初始化;其中CN-to-VN信息向量的起始地址依次根据向量长度递增生成,不需要掩码;而由于组成QC-LDPC校验矩阵的循环置换矩阵具有循环移位的特性,VN信息向量的起始地址和掩码需要针对不同的循环置换矩阵进行计算。
对于步骤(3),输入的浮点型先验LLR消息将定点化为6比特整数(仍占用8比特空间),而计算过程中的消息定点化为8比特整数。本例中以单精度浮点型数据为例说明定点化过程,由于定点化后所需空间降为原本的四分之一,要获得一个寄存器空间长度的字节型消息,需要在四个寄存器中载入float型数据。以AVX-512指令集为例,对连续的64个消息的定点化过程实现方式如下:
(a)调用四次vmovaps指令,获得四个长度为16的float型向量,对应的C风格函数定义为:
__m512_mm512_load_ps(void const*mem_addr);
其中__m512为512比特单精度浮点型向量;
(b)调用四次vmulps指令,将每一位LLR消息扩大四倍,对应的C风格函数定义为:
__m512_mm512_mul_ps(__m512a,__m512b);
(c)调用四次vmaxps指令,使每一位LLR消息不超过31,对应的C风格函数定义为:
__m512_mm512_max_ps(__m512a,__m512b);
(d)调用四次vminps指令,使每一位LLR消息不低于-31,对应的C风格函数定义为:
__m512_mm512_min_ps(__m512a,__m512b);
(e)调用四次vcvttps2dq指令,将每一位float型LLR消息转化为32比特整型消息,对应的C风格函数定义为:
__m512i_mm512_cvttps_epi32(__m512a);
(f)调用两次vpackssdw指令,将四个32比特整型打包为两个16比特整型消息,对应的C风格函数定义为:
__m512i_mm512_packs_epi32(__m512i a,__m512i b);
(g)调用一次vpacksswb指令,将两16比特整型数据打包为一个字节型消息,对应的C风格函数定义为:
__m512i_mm512_packs_epi16(__m512i a,__m512i b)。
(h)由于vpackssdw和vpacksswb指令会改变输出向量中各元素的顺序,向量打包后需调用通用指令调整该顺序,若输出的向量定义为a=[a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15],则调整后的向量为a'=[a0,a4,a8,a12,a1,a5,a9,a13,a2,a6,a10,a14,a3,a7,a11,a15]。
上述定点化过程对于双精度浮点型数据采用类似的指令即可,包括vmovapd,vmulpd,vmaxpd,vminpd,vcvttps2qq,vpackssdw和vpacksswb,具体步骤此处不再赘述。
如图2所示,为利用vmovdqu8指令加载和存储VN消息向量的过程。其中vmovdqu8指令实现待掩码的加载和存储向量的C语言风格函数定义分别为:
__m512i_mm512_mask_loadu_epi8(__m512i src,__mmask64k,void const*mem_addr);
void_mm512_mask_storeu_epi8(void*mem_addr,__mmask64k,__m512i a)。
其中__m512i为512比特整型向量,__mmask64为64比特掩码向量,mem_addr为内存首地址,k为掩码。而VN信息向量的起始地址由于组成QC-LDPC校验矩阵的循环置换矩阵具有循环移位的特性,需要针对不同的循环置换矩阵进行计算。定义Pi,j为QC-LDPC基矩阵第i行、第j列元素对应的循环置换矩阵,其置换系数为bi,j。对于第l次迭代中,Pi,j对应的第k个VN信息向量
Figure BDA0002104970590000071
的加载和存储,可以分为三种情况:
(a)若
Figure BDA0002104970590000072
中的元素在内存中连续,且长度等于最大并行度Q(在本发明的系统中为64),则
Figure BDA0002104970590000073
的起始地址可以表示为jZ+mod(kQ+bi,j,Z),其中Z为当前QC-LDPC码的提升因子。此时可通用一条通用加载/存储指令vmovdqu32就可以实现加载或存储
Figure BDA0002104970590000074
的过程,其C语言风格函数定义分别为:
__m512i_mm512_load_si512(void const*mem_addr);
void_mm512_store_si512(void*mem_addr,__m512i a);
(b)若
Figure BDA0002104970590000075
中的元素在内存中连续,但长度小于最大并行度Q,此时
Figure BDA0002104970590000076
的起始地址仍可以表示为jZ+mod(kQ+bi,j,Z),但掩码来控制存取。一条vmovdqu8指令就可以以比特长度的数据为单位进行加载存储控制,其C语言风格函数定义分别为:
__m512i_mm512_mask_loadu_epi8(__m512i src,__mmask64k,void const*mem_addr);
void_mm512_mask_storeu_epi8(void*mem_addr,__mmask64k,__m512i a)。
(c)若
Figure BDA0002104970590000081
中的元素在内存中不连续,此时需要取出两块内存拼接成
Figure BDA0002104970590000082
起始地址分别为jZ+mod(kQ+bi,j,Z)和jZ+mod((k+1)Q+bi,j,Z)-Q,同时需要用两段掩码来控制存取。在加载或存储该VN信息向量时除了需要利用两条vmovdqu8指令进行控制,而在加载过程中额外需要用一条vpord指令对两处载入的向量进行拼接,该指令的作用是按位进行或运算,其C语言风格函数定义为:
__m512i_mm512_or_si512(__m512i a,__m512i b)。
如图3所示,为基于SIMD的消息传递模块的实现结构,而图4为其中最小和(MS)算法模块的实现结构。首先将具有相同i和k的VN信息向量
Figure BDA0002104970590000083
和CN-to-VN信息向量
Figure BDA0002104970590000084
作为模块输入,通过SIMD减法指令还原出VN-to-CN向量
Figure BDA0002104970590000085
其次利用基于SIMD的MS运算获得更新后的CN-to-VN信息向量
Figure BDA0002104970590000086
其中MS运算模块是基于LDPC最小和译码算法实现的;最后利用SIMD加法运算获得更新后的VN信息向量
Figure BDA0002104970590000087
以调用AVX-512指令集为例,对一次VN消息和CN-to-VN的消息更新过程基于的实现如下:
(a)将具有相同i和k的VN消息向量
Figure BDA0002104970590000088
和对应的CN-to-VN消息向量
Figure BDA0002104970590000089
陆续输入模块;
(b)调用饱和减法指令vpsubsb还原当前迭代时对应的变量节点传递到消息节点(VN-to-CN)的消息向量
Figure BDA00021049705900000810
其C语言风格函数定义为:
__m512i_mm512_subs_epi8(__m512i a,__m512i b);
并调用vpmaxsb指令确保
Figure BDA00021049705900000811
不小于-127;
(c)调用vpandd和vpxord指令获得该次更新中所有
Figure BDA00021049705900000812
各对应位置符号的乘积λ(sign),其C语言风格函数定义分别为:
__m512i_mm512_and_si512(__m512i a,__m512i b);
__m512i_mm512_xor_si512(__m512i a,__m512i b);
(d)调用vpabsb指令获得该次更新中所有
Figure BDA0002104970590000091
的绝对值向量
Figure BDA0002104970590000092
其C语言风格函数为:
__m512i_mm512_abs_epi8(__m512i a);
并调用vpminsb指令确保
Figure BDA0002104970590000093
中消息不大于31;
(e)调用vpminsb和vpmaxsb指令获得
Figure BDA0002104970590000094
各对应位置上的最小值λ(min)和次小值λ(submin)
(f)利用vpsubusb指令对λ(min)和λ(submin)中各元素减去偏移值β,得到λ(min)-β和λ(submin)-β,其C语言风格函数为:
__m512i_mm512_subs_epu8(__m512i a,__m512i b);
(g)调用vpcmpb指令将
Figure BDA0002104970590000095
各元素与λ(min)比较,其C语言风格函数为:
__mmask64_mm512_cmpeq_epi8_mask(__m512i a,__m512i b);
再调用vpblendmb为更新后的CN-to-VN消息向量
Figure BDA0002104970590000096
赋值,得到
Figure BDA0002104970590000097
的绝对值,如果与λ(min)不相等则赋λ(min)-β对应元素,否则赋λ(submin)-β对应元素,其C语言风格函数为:
__m512i_mm512_mask_blend_epi8(__mmask64k,__m512i a,__m512i b);
(h)调用vpxord指令将λ(sign)与每一个
Figure BDA0002104970590000098
的符号进行亦或运算,获得每个
Figure BDA0002104970590000099
中各元素的符号,并调用vpcmpb对判断符号是否为负,
其C语言风格函数为:
__mmask64_mm512_cmplt_epi8_mask(__m512i a,__m512i b);
若为负,则调用vpsubsb指令对相应位置上的元素取反,得到更新后的
Figure BDA00021049705900000910
(i)调用vpaddsb指令将
Figure BDA00021049705900000911
Figure BDA00021049705900000912
进行饱和相加,获得更新后的VN消息向量
Figure BDA00021049705900000913
并用vpmaxsb指令确保
Figure BDA00021049705900000914
不小于-127。
在遍历完所有i和k的可能取值后,VN消息向量和对应的CN-to-VN消息向量的更新完成一次完整的迭代,进入下一场迭代。当迭代次数超过迭代次数最大值itermax后,所有更新完成。
如图5所示,为基于SIMD的硬判决实现结构,以AVX-512指令集为例,其实现过程如下:
(a)调用vmovdqu32指令从VN消息缓存区加载长为64字节的数据到寄存器中;
(b)调用vpcmpb指令,将VN消息向量的每个元素与0比较,得到8字节长的判决掩码;
(c)调用vpbroadcastb指令,用判决掩码控制向寄存器输入0获1,将8字节长的判决掩码扩展为64字节长的判决结果向量cj,k,其C语言风格函数定义为:
__m512i_mm512_maskz_set1_epi8(__mmask64k,char a);
调用vmovdqu32指令将判决结果向量存入判决结果缓存区。
综上所述,本发明利用SIMD指令集,在x86平台上实现了QC-LDPC译码器,在保证较低译码时延的前提下,大幅提高了系统吞吐量。
尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。

Claims (5)

1.一种基于单指令多数据流的软件实现QC-LDPC译码方法,其特征在于:包括以下步骤:
(1)对接收到的LLR先验信息进行解速率匹配,获得若干个浮点型LLR先验信息码块;
(2)根据各码块的码长和码率,计算在每次并行接入过程中VN信息向量和CN-to-VN信息向量在各自缓冲区中的起始地址和所需的掩码,并生成相应的起始地址表和掩码表;
(3)对浮点型LLR先验信息码块利用SIMD指令集并行地进行定点化,输出比特型LLR先验信息码块;
(4)将比特型LLR先验信息码块存入内存中的VN缓存区,与此同时将CN-to-VN缓存区和迭代次数计数器置零;
(5)根据步骤(2)中生成的起始地址表和掩码表,分别将VN缓存区和CN-to-VN缓存区中的消息向量依次载入寄存器,再将寄存器中的向量传入基于SIMD的消息传递模块,通过并行运算对各消息向量的值进行更新,更新后的消息将会重新存入缓存区的对应位置,当所有消息向量完成更新后,迭代次数加一;
(6)若迭代次数小于最大迭代次数,则重复步骤(5)中过程;当迭代次数达到最大迭代次数时,将VN缓冲区中的消息依次输入SIMD硬判决模块,通过并行运算获得译码结果;
(7)对下一个浮点型LLR先验信息码块重复(3)到(6)中的过程;若所有码块均译码完成,将译码结果进行解码块分割,得到译码后的传输块,译码结束;
所述步骤(2)中对并行的消息传递过程中,每次接入的VN信息向量和CN-to-VN信息向量的起始地址和掩码进行初始化;其中CN-to-VN信息向量的起始地址依次根据向量长度递增生成,不需要掩码;而由于组成QC-LDPC校验矩阵的循环置换矩阵具有循环移位的特性,VN信息向量的起始地址和掩码需要针对不同的循环置换矩阵进行计算;定义Pi,j为QC-LDPC基矩阵第i行、第j列元素对应的循环置换矩阵,其置换系数为bi,j,对于第l次迭代中,Pi,j对应的第k个VN信息向量
Figure FDA0004051944690000011
的加载和存储,针对不同情况有三种不同的初始化方法:
(a)若
Figure FDA0004051944690000012
中的元素在内存中连续,且长度等于最大并行度Q,则
Figure FDA0004051944690000013
只需要一个表示为jZ+mod(kQ+bi,j,Z)的起始地址,其中Z为当前QC-LDPC码的提升因子,而不需要对掩码进行初始化;
(b)若
Figure FDA0004051944690000021
中的元素在内存中连续,但长度小于最大并行度Q,此时
Figure FDA0004051944690000022
的起始地址仍只需要一个表示为jZ+mod(kQ+bi,j,Z)的起始地址,但需要根据向量长度计算初始化掩码;
(c)若
Figure FDA0004051944690000023
中的元素在内存中不连续,此时需要取出两块内存拼接成
Figure FDA0004051944690000024
两段需要起始的地址分别表示为jZ+mod(kQ+bi,j,Z)和jZ+mod((k+1)Q+bi,j,Z)-Q,同时需要计算两段相应掩码来控制存取。
2.根据权利要求1所述的一种基于单指令多数据流的软件实现QC-LDPC译码方法,其特征在于:所述步骤(3)中在定点化运算中,将输入的浮点型先验LLR消息定点化为6比特整数,仍占用8比特空间。
3.根据权利要求1所述的一种基于单指令多数据流的软件实现QC-LDPC译码方法,其特征在于:所述步骤(5)中将VN消息向量从缓存区中载入寄存器和将更新后寄存器中的消息向量存入缓存区的过程利用AVX-512指令实现,所用到的指令为vmovdqu8,它可以利用掩码将未对齐的比特型向量从内存中有选择地载入寄存器中,也可以利用掩码将未对齐的比特型向量从寄存器中有选择地存入内存中。
4.根据权利要求1所述的一种基于单指令多数据流的软件实现QC-LDPC译码方法,其特征在于:所述步骤(5)中基于SIMD的消息传递模块通过VN信息向量和CN-to-VN信息向量之间的消息传递,实现了两类信息的更新,具体为:首先将具有相同i和k的VN信息向量
Figure FDA0004051944690000025
和CN-to-VN信息向量
Figure FDA0004051944690000026
作为模块输入,通过SIMD减法指令还原出VN-to-CN向量
Figure FDA0004051944690000027
其次利用基于SIMD的MS运算获得更新后的CN-to-VN信息向量
Figure FDA0004051944690000028
其中MS运算模块是基于LDPC最小和译码算法实现的;最后利用SIMD加法运算获得更新后的VN信息向量
Figure FDA0004051944690000029
5.根据权利要求1所述的一种基于单指令多数据流的软件实现QC-LDPC译码方法,其特征在于:所述步骤(6)中硬判决过程通过AVX-512指令进行加速,具体为:将更新完成后的VN消息向量依次从缓存区载入寄存器,将载入的长为64字节的向量
Figure FDA0004051944690000031
与等长的全零向量λ(0)输入SIMD比较指令,得到一个8字节的比较结果;此后将该结果作为掩码输入一个SIMD选择指令,待选择的两个向量分别为全零向量λ(0)和全一向量λ(1),该指令相当于将8字节的判决结果扩展为64字节的判决结果cj,k;最终将该判决结果存入译码结果缓存区的指定位置。
CN201910549113.XA 2019-06-24 2019-06-24 一种基于单指令多数据流的软件实现qc-ldpc译码方法 Active CN110380735B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910549113.XA CN110380735B (zh) 2019-06-24 2019-06-24 一种基于单指令多数据流的软件实现qc-ldpc译码方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910549113.XA CN110380735B (zh) 2019-06-24 2019-06-24 一种基于单指令多数据流的软件实现qc-ldpc译码方法

Publications (2)

Publication Number Publication Date
CN110380735A CN110380735A (zh) 2019-10-25
CN110380735B true CN110380735B (zh) 2023-05-12

Family

ID=68249159

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910549113.XA Active CN110380735B (zh) 2019-06-24 2019-06-24 一种基于单指令多数据流的软件实现qc-ldpc译码方法

Country Status (1)

Country Link
CN (1) CN110380735B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111431543B (zh) * 2020-05-13 2023-08-01 东南大学 可变码长可变码率qc-ldpc译码方法及装置
CN111786744B (zh) * 2020-05-29 2022-11-01 东南大学 一种基于avx-512指令集的5g极化码自适应高效译码方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102932003B (zh) * 2012-09-07 2016-05-04 上海交通大学 基于gpu架构的qc-ldpc码的加速译码方法
CN104702292A (zh) * 2015-03-06 2015-06-10 宫丰奎 一种部分并行ldpc译码器的实现方法
CN106452455B (zh) * 2016-09-23 2019-10-18 华南理工大学 基于OpenCL移动设备QC-LDPC的动态译码方法
CN108365849B (zh) * 2018-01-10 2021-03-09 东南大学 基于simd指令集的多码率多码长ldpc码解码方法

Also Published As

Publication number Publication date
CN110380735A (zh) 2019-10-25

Similar Documents

Publication Publication Date Title
US7373581B2 (en) Device, program, and method for decoding LDPC codes
KR100983692B1 (ko) 통신 장치 및 복호 방법
KR100738864B1 (ko) 패리티 체크 행렬을 갖는 저밀도 패리티 체크 코드를디코딩하는 디코더 및 디코딩 방법
JP4320418B2 (ja) 復号装置および受信装置
KR100502609B1 (ko) Ldpc 코드를 이용한 부호화기 및 부호화 방법
US20070089019A1 (en) Error correction decoder, method and computer program product for block serial pipelined layered decoding of structured low-density parity-check (LDPC) codes, including calculating check-to-variable messages
US20070089017A1 (en) Error correction decoder, method and computer program product for block serial pipelined layered decoding of structured low-density parity-check (LDPC) codes with reduced memory requirements
CN110380735B (zh) 一种基于单指令多数据流的软件实现qc-ldpc译码方法
CN109586732B (zh) 中短码ldpc编解码系统和方法
CN101232288B (zh) 一种基于奇偶校验矩阵的ldpc码的译码方法及译码器
JP2007295564A (ja) 低密度のパリティ検査コードを用いた復号器
US7451376B2 (en) Decoder and decoding method for decoding irregular low-density parity-check codes
CA2798963A1 (en) Apparatus and method for layered decoding in a communication system using low-density partiy-check codes
CN106936444B (zh) 一种集合译码方法和集合译码器
CN113783576A (zh) 用于从循环置换矩阵的集群构建的准循环低密度奇偶校验码的垂直分层解码的方法及设备
WO2010036209A1 (en) Decoding circuit and encoding circuit
US8504892B2 (en) LDPC decoder and method for LDPC decoding based on layered algorithm applied to parity check matrix
Han et al. Implementation of IEEE 802.11 n LDPC codes based on general purpose processors
Yuan et al. 4.7-Gb/s LDPC Decoder on GPU
CN108809327B (zh) Ldpc译码方法
US10193574B1 (en) Efficient syndrome calculation in processing a GLDPC code
CN109245775B (zh) 一种译码器及其实现译码的方法
CN113612581B (zh) 一种通用高吞吐率的ldpc译码方法及系统
CN108809324B (zh) Ldpc译码方法
Pan et al. A high throughput LDPC decoder in CMMB based on virtual radio

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant