1.一种基于GPU的Polar码高速并行译码方法,其特征在于:整个译码过程可以分为三个阶段:初始化阶段、译码阶段、结果回传阶段,其中初始化阶段包括以下步骤1和步骤2,译码阶段包括以下步骤3和步骤4,以下步骤5是结果回传阶段:步骤1:主机初始化
依次包括:为信息比特标志、因子图置换和逆置换信息、接收机接收到的信号、译码的结果即源比特的对数似然比分配内存空间,信息和变量的初始化,存储接收到的信号并计算编码比特对数似然比;
步骤2:GPU初始化
依次包括:GPU全局内存分配,主机将数据发送给GPU,启动GPU的并行译码线程,GPU分配共享内存,初始化共享内存,根据全局内存给共享内存的数组赋值;
步骤3:译码内核函数进行若干次循环迭代,最大循环次数由程序预先设定每次循环依次包括:L1阶段、L1-L2阶段间交换线程块共享内存、L2阶段、R1阶段、R1-R2阶段间交换线程块共享内存、R2阶段和循环终止条件判断:如果在循环过程中有因子图满足早期终止条件,或者已达到最大循环次数,则设置变量p_good,并终止循环,跳转到步骤
4;
步骤4:对于因子图p_good的所有线程块的0号线程,即线程((p_good,b),0),其中b=
0,1,...,N1-1, N为Polar码的码长,将其共享内存中的Local_L[][0]+Local_R[][0]经过逆置换后,作为译码结果;
步骤5:主机将译码结果从GPU传回到主机。
2.根据权利要求1所述的一种基于GPU的Polar码高速并行译码方法,其特征在于:所述步骤2在GPU初始化时,译码过程中使用的L和R数组分布式存储在各线程块共享内存,即在一次完整的循环过程中,只需要通过全局内存在线程块之间交换共享内存2次,其他所有操作都可以使用线程块内的共享内存。
3.根据权利要求1所述的一种基于GPU的Polar码高速并行译码方法,其特征在于:步骤
2所述的全局内存的分配,具体为:同一个因子图使用的全局内存连续存放,并且用于线程块之间交换共享内存的全局内存空间按照线程块读取的顺序连续存放,即每个线程块从交换空间读取时,其读取的地址空间是连续的。
4.根据权利要求1所述的一种基于GPU的Polar码高速并行译码方法,其特征在于:所述步骤3循环迭代的每次循环包括以下步骤:步骤3.1:向左迭代的第一阶段,即L1阶段,包括第n-1,...,n-n1级迭代,其中n1=log2N1;
步骤3.2:每个因子图的线程块之间通过全局内存交换共享内存中的Local_L[][n-n1+
1];
步骤3.3:向左迭代的第二阶段,即L2阶段,包括第n-n1-1,...,0级迭代;
步骤3.4:向右迭代的第一阶段,即R1阶段,包括第0,...,n-n1-1级迭代;
步骤3.5:每个因子图的线程块之间通过全局内存交换共享内存中的Local_R[][n-n1];
步骤3.6:向右迭代的第二阶段,即R2阶段,包括第n-n1,...,n-1级迭代;
步骤3.7:判断是否有因子图满足早期终止条件或者已达到最大循环次数,并设置变量p_good。
5.根据权利要求4所述的一种基于GPU的Polar码高速并行译码方法,其特征在于:步骤
3所述的L1阶段、L2阶段、R1阶段和R2阶段,每个阶段都包括三个层次的并行:第一个层次是多因子图之间的并行,每个因子图由N1个线程块负责,各因子图的线程块之间相互独立,不同因子图的线程块并行运行;
第二个层次是同一因子图多线程块的并行,每个因子图由N1个线程块负责计算,不同线程块之间没有数据依赖,并行运行;
第三个层次是同一线程块内的多线程并行,每个线程块在每一级的计算可以分为N/N1/2=2n-n1-1个子任务,各子任务之间没有数据依赖关系,各子任务被分成min(T,2n-n1-1)组,其中T是GPU上每个流多处理器包含的核心数,每组子任务由线程块内的一个线程负责,各线程可以并行执行;每个线程完成所负责的这组子任务后,进行线程块内的线程同步。
6.根据权利要求5所述的一种基于GPU的Polar码高速并行译码方法,其特征在于:第二个层次所述的同一因子图多线程块的并行和第三个层次所述的同一线程块内的多线程并行的分工细节如下:(1)在L1阶段,不同线程块的数据之间没有依赖关系,各线程块可以并行运行,即L1阶段同一因子图多线程块并行;同一线程块在第s级的各子任务之间没有数据依赖关系,将这些子任务分配到线程块内的多个线程并行执行,即L1阶段同一线程块内多线程并行;
(2)在L2阶段,不同线程块的数据之间没有依赖关系,各线程块可以并行运行,即L2阶段同一因子图多线程块并行;同一线程块在第s级的各子任务之间没有数据依赖关系,将这些子任务分配到线程块内的多个线程并行执行,即L2阶段同一线程块内多线程并行;
(3)在R1阶段,不同线程块的数据之间没有依赖关系,各线程块可以并行运行,即R1阶段同一因子图多线程块并行;同一线程块在第s级的各子任务之间没有数据依赖关系,将这些子任务分配到线程块内的多个线程并行执行,即R1阶段同一线程块内多线程并行;
(4)在R2阶段,不同线程块的数据之间没有依赖关系,各线程块可以并行运行,即R2阶段同一因子图多线程块并行;同一线程块在第s级的各子任务之间没有数据依赖关系,将这些子任务分配到线程块内的多个线程并行执行,即R2阶段同一线程块内多线程并行。