一种利用图形处理器GPU实现的并行RS译码方法
技术领域
本发明涉及一种利用图形处理器GPU实现的并行RS译码方法,适用于卫星地面接收系统高速数据通信中海量信息的实时处理。
背景技术
卫星地面接收系统需要接收通过星地通信链路下传的大量数据信息进行采集、传输、综合分析、计算等处理。星地通信链路是一种不稳定的链路,在该链路上传输信息时存在大量的误码。为了抵抗星地通信链路的误码对数据的影响,卫星地面接收系统必须采用纠错码技术。
纠错码技术是卫星地面接收系统抵抗信道误码的关键手段,是数据能够被正确、及时处理的前提,在接收系统中具有较高的处理复杂度。RS码作为常用的纠错码,其译码速度直接影响卫星地面接收系统的数据处理速度,进而决定了地面接收系统的最大接收能力。
RS码是一类具有很强纠错能力的多进制BCH码,也是一类典型的代数几何码。它首先由Reed和Solomon应用MS多项式于1960年构造出来。用MS多项式构造的RS码是非系统码,而用BCH码构造方法能产生系统码。由于线性码的最大可能的最小距离是校验元的个数加1,而RS码恰好做到这一点,因此,称RS码为极大最小距离可分码(MDS码)。RS码采用了q进制,所以它是多进制调制时的自然和方便的编码手段;RS码特别适合于在衰落信道中使用,以克服突发性差错。正由于其优越的性能,RS码在深空通信、数字音视频通信、磁记录介质等领域取得广泛应用,它是目前应用最为广泛的纠错编码之一。根据对纠错能力的要求不同,可以采用具有不同参数的RS码。无论具有何种参数,RS码所采用的译码方法均相同。例如空间通信常用的RS码为空间数据系统咨询委员会(CCSDS)推荐的RS(255,223)或RS(255,239)码,这两种码的译码方法相同,只是纠错能力参数不同。
RS译码器的译码过程通常包括三个计算步骤:错误检测、关键方程计算、错误纠正。三个计算步骤均需要进行大量的有限域运算,其中乘法、加法运算的数量庞大,对译码速度的影响也最大。
通用计算机只能顺序的执行乘法或加法,因此采用通用计算机及配套软件进行RS译码的处理速度较低,无法满足海量卫星数据处理的实时性要求。为了达到实时处理的要求,常用方案是设计专用RS译码板卡,通过FPGA芯片实现解码过程的高速处理。专用板卡的硬件设计、制造、维护成本高昂,软件不具有通用性。随着卫星下传数据速率的飞速增加,对RS译码的速率要求也在不断提高。采用专用处理板卡可以满足现有数据处理速度,但在处理速度需求超出当前板卡性能上限或者所使用的RS编码参数变更时只能重新进行板卡硬件及其专用软件的设计,造成设备升级难度大、成本高。
发明内容
本发明解决的技术问题是:克服现有技术的不足,提供一种利用图形处理器GPU实现的并行RS译码方法,根据卫星地面接收系统的要求,采用连接有GPU的通用计算机作为硬件平台,通过GPU内部计算核心的两层并行结构实现高速并行RS译码,在实现高速并行RS译码的前提下经济的实现译码速率上限的升级,成本低,易于实现。
本发明的技术方案是:一种利用图形处理器GPU实现的并行RS译码方法,实现步骤如下:
(1)通用计算机首先根据编码参数生成有限域与二进制数据转换查找表、有限域加法查找表、有限域乘法查找表、有限域对偶基和自然基查找表,然后将上述各查找表写入GPU纹理内存;
(2)通用计算机检测已连接的GPU个数及各个GPU的最大并行规模,根据已连接的所有GPU的最大并行规模读入多个待解码的RS码字;
(3)通用计算机将读入的码字写入GPU内部的全局存储器,启动GPU解码程序进行译码,GPU中设计多个线程,线程数量远大于读入码字的数量,利用线程实现多个码字的并行译码;
(4)通用计算机边读取后续码字,边等待GPU译码结果;
(5)GPU译码和后续数据读取都结束后,通用计算机从GPU内部的全局存储器中读出译码后的数据,将后续码字写入GPU内部的全局存储器,继续进行后续码字的译码,直到所有数据译码完成。
所述步骤(2)中通用计算机读入多个待解码的RS码字的步骤为:
(2.1)通过GPU编程语言的指令查询所连接的GPU数量n;
(2.2)通过GPU编程语言的指令逐个查询n个GPU所支持的最大块数量B1,B2,...,Bn以及每个块支持的最大线程数量T1,T2,...,Tn,根据所处理的RS码字的码长N,确定一次性读入的RS码字数量上限为(B1T1+B2T2+BnTn)/(N+1);
(2.3)通过通用编程语言读入不超过(B1T1+B2T2+BnTn)/(N+1)个RS码字。
所述步骤(3)中启动GPU解码程序进行译码的步骤为:
(3.1)各GPU从全局存储器中读取待译码的码字段,用每个线程处理一个RS码字,各线程首先利用查找表将码字从其所使用的有限域基低变换至自然基,然后再次利用查找表将数据变换至有限域;在有限域中将各码字分别乘以相应的系数后,利用归约求和方法将各个块内的线程计算结果相加,得到多个码字的伴随式,若伴随式全为0则结束译码,否则继续进行以下步骤;
(3.2)GPU使用多个块对多个码字进行关键方程的计算,计算方法为无需求逆的BM迭代算法,即RiBM算法;GPU利用多个线程进行计算,每个线程均计算一个迭代参数,计算后得到的关键方程系数存入全局存储器;
(3.3)GPU中使用多个块对误码进行纠正,纠正误码的方法为钱搜索和福尼算法;每个块通过多个线程读入关键方程系数,然后各线程分别对所读入的关键方程系数进行乘积运算,随后各线程的运算结果通过归约求和的方法进行求和,根据和值判断当前块所对应的符号是否为错误符号;若当前块所对应符号存在错误,则根据福尼算法计算错误值,并利用块中某一线程执行纠正错误值的程序,得到译码结果;译码结果存储在全局存储器中。
本发明与现有技术相比具有如下优点:
(1)传统的地面接收系统采用专用处理板卡实现实时译码,然而专用处理板卡本身不具备最大译码速率可升级的能力以及自适应RS码参数变化的能力,若需要提升最大译码速率或更改RS码参数,则必须重新设计专用处理板卡的软、硬件,设计维护成本高昂。本发明对多个RS码字进行并行译码处理,可以在插有少量GPU的通用计算机上达到卫星地面接收系统所要求的译码速率。用GPU实现错误检测、关键方程计算、错误位置计算和错误值计算,使通用计算机可以将数据的读入与RS译码处理并行进行,可以提高卫星地面接收系统的译码速率。
(2)与使用专用译码板卡的传统方法相比,本发明的可扩展性更好。当系统性能需要扩展时简单的增加GPU个数即可,而专用硬件板卡不具有此性质。
(3)与使用专用译码板卡的传统方法相比,本发明的软件设计更简便。专用译码板卡的软件需要烧入芯片,代码修改和调试过程复杂;GPU所用软件无需烧入处理,修改、调试方法与通用计算机软件一样简便。
附图说明
图1为利用GPU实现的并行RS译码示意图。
具体实施方式
下面结合附图1对本发明作进一步说明。
GPU是一种可以连接在通用计算机上的并行处理设备,具有大量的并行计算核心,通常具有独立的物理存储器和高速存储器读取机制,可以在通用计算机上使大量数据的加法、乘法运算速度得到数十甚至数百倍的提升。
在GPU中,软件以程序核为单位顺序执行,每个程序核均对数据进行并行处理。每个程序核的并行规模可以独立设置。程序核内的并行结构分为两个层次:块和线程。每个程序核软件可以分为多个块并行执行,每个块独立执行程序指令,块与块之间不能进行数据交互。每个块又可以分为多个线程,每个线程独立执行所在的块收到的程序指令,线程之间可以通过每个块内的共享内存进行通信。同时GPU的软件无需烧入芯片等处理,调试开发简便。
在硬件结构上,GPU内部具有上百个硬件计算核心,各个计算核心均可以独立进行运算。通常用一个硬件计算核心运行一个软件线程,从而实现多个软件线程的并行运行。GPU硬件计算核心与软件线程的映射关系对软件透明,因此同样的软件可以运行在具有不同指标的GPU硬件上。在存储器结构上,GPU具有全局存储器、共享存储器和纹理存储器,其中纹理存储器可以通过高速缓存实现快速查表功能。
利用GPU软硬件的并行结构,可以实现并行RS译码。由于GPU对数据的并行处理速率与其中包含的计算核心数量以及处理主频约成正比,同样的软件可以通过增加硬件计算核心数量实现数据处理速率的提升。因此在性能需求提高时,仅需要增加GPU个数或者更换计算核心数量更多、处理主频更高的GPU即可实现,无需对软件进行更改。升级难度和成本远低于使用专用译码板卡。
本发明采用通用计算机及GPU作为RS译码的硬件平台,通用计算机通过PCI-E接口连接一块或多块GPU;将RS译码过程分为数据初始化、并行译码两部分;通用计算机进行各块GPU的任务分配、待译码数据的读取、译码参数初始化、GPU内部存储器中数据的读写和数据整理,GPU进行待译码数据的并行译码处理。GPU将多个码字的译码任务分配给多个硬件计算核心,通过多个计算核心的同时译码实现并行译码。
通用计算机首先根据编码参数生成有限域与二进制数据转换查找表、有限域加法查找表、有限域乘法查找表、有限域对偶基和自然基查找表,将各查找表存入GPU纹理内存;然后检测已连接的GPU个数及各GPU的最大并行规模,根据已连接的所有GPU的最大并行规模读入多个待解码的RS码字;将读入的码字写入GPU内部的全局存储器,启动GPU解码程序进行译码,GPU软件中设计多个线程,线程数量远大于读入码字的数量,利用线程实现多个码字的并行译码;随后通用计算机一边读取后续码字,一边等待GPU译码结果;待GPU译码和后续数据读取都结束后,从GPU内部的全局存储器中读出译码后的数据;最后将后续码字写入GPU内部的全局存储器,继续进行后续码字的译码,直到所有数据译码完成。
GPU将RS译码按顺序分解为检错、关键方程计算、错误纠正三个步骤;为每个步骤设计一个程序核,各个程序核具有不同的块规模与线程规模,通过在GPU内的多个硬件计算核心上同时运行多个线程实现并行译码;三个程序核顺序依次执行,程序核之间通过全局存储器进行数据传递;检错程序核通过多个块和线程实现并行,块数量等于单个RS码字的伴随式数量与RS码字个数之积,每个块内的线程数量与RS码字长度相同;关键方程计算程序核通过多个块和线程实现并行,块数量为RS码字个数,每个块内的线程数量为关键方程系数个数;错误纠正程序核通过多个块和线程实现并行,块数量为RS码字长度与RS码字个数之积,每个块内线程数量为RS码字能够纠正的最大错误字节数量。
本发明具体实现步骤如下:
(1)通用计算机首先确定RS码的码字长度、纠错能力、码生成多项式、有限域生成多项式、本原元。随后生成有限域与二进制数据转换查找表、有限域加法查找表、有限域乘法查找表、有限域对偶基和自然基查找表,存储在计算机内存中。各查找表根据有限域生成多项式进行计算,由程序自动生成。
(2)通用计算机通过GPU编程语言的指令对其所连接的GPU进行检测,检测到2、3、4等n个GPU。随后通用计算机逐个查询n个GPU所支持的最大块数量B1,B2,...,Bn以及每个块支持的最大线程数量T1,T2,...,Tn,根据所处理的RS码字的码长N,确定一次性读入的RS码字数量上限为(B1T1+B2T2+BnTn)/(N+1)。根据读入码字数量的上限选取同时译码的RS码字数量k。
(3)从待译码的码字1中连续读入k个码字至通用计算机内存。根据2、3、4等GPU所支持的并行规模将k个码字分为多个码字段,码字段个数与GPU个数相同。通用计算机将各段码字分别传输至各GPU的全局存储器。随后通用计算机读入下面k个连续的码字。
(4)各GPU从全局存储器中读取待译码的码字段,用程序核5对所有码字进行检错。程序核5具有多个块,块数量等于读入的码字段数量与单个码字的伴随式个数之积,即每个块可以求得一个伴随式。每个块内的线程数量等于码字长度,即每个线程对一个码字进行处理。各线程首先利用查找表将各码字从其所使用的有限域基低变换至自然基,然后再次利用查找表将数据变换至有限域。在有限域中将各码字分别乘以相应的系数后,利用归约求和方法将各个块内的线程计算结果相加,得到多个码字的伴随式,将其存入全局存储器并检验伴随式中是否存在非零值,若存在非零值,则非零标志位置位。
(5)通用计算机对非零标志位进行检测,若置位则运行程序核5和程序核6,否则读入的数据中不存在错误,读入的码字即为译码结果,继续进行后续码字的译码处理。
(6)若非零标志位置位,则各GPU中程序核6从全局存储器中读入程序核5的计算结果进行关键方程计算。程序核6使用多个块,块数量等于RS码字个数,即每个块对一个码字进行关键方程的计算,计算方法为无需求逆的BM迭代算法。GPU中每个块内设计多个线程,线程数量与所使用的计算方法中迭代参数的个数相同,即每个线程对一个迭代参数进行计算。计算后得到的关键方程系数存入全局存储器。
(7)各GPU中程序核7从全局存储器中读入程序核6的计算结果,同时读入待纠错的码字,利用钱搜索和福尼算法对误码进行纠正。程序核7使用多个块,块数量等于RS码字个数与单个RS码字的伴随式个数之积,即每个块对码字中的一个符号进行错误纠正。每个块使用多个线程,线程数量等于RS码字所能纠正的最大错误符号数量。每个块首先通过多个线程读入关键方程系数,然后各线程分别对所读入的关键方程系数进行乘积运算,随后各线程的运算结果通过归约求和的方法进行求和,根据和值判断当前块所对应的符号是否为错误符号。若当前块所对应符号存在错误,则根据福尼算法计算错误值,并利用块中某一线程执行纠正错误值的程序,得到译码结果。译码结果存储在全局存储器中。
(8)各GPU译码后的码字段8分别存储在各GPU的全局存储器中。通用计算机在各GPU译码结束后从各全局存储器中读取译码后的RS码字段,在内存中将各码字段按顺序进行拼接,得到译码结果。
(9)通用计算机将读入的下k个码字传输至GPU,开始下k个码字的译码,直到所有待译码码字均被译码完毕。
本发明未详细阐述部分属于本领域公知技术。