一种面向科学计算的浮点型数据并行无损压缩方法

文档序号:9304437阅读:534来源:国知局
一种面向科学计算的浮点型数据并行无损压缩方法
【技术领域】
[0001]本发明属于数据并行处理技术领域,具体涉及一种面向科学计算的浮点型数据并行无损压缩方法。
【背景技术】
[0002]随着数据时代的到来,各行各业所产生的数据呈指数级增长,大规模数据的产生不仅对硬件设备带来巨大挑战,而且对网络带宽产生巨大压力,如此庞大的数据严重阻碍了科学计算的运用和发展。数据压缩一直是用于降低数据规模行之有效的方法,并且在科学计算领域,任何一个微小误差都将可能产生不可预料的后果,所以无损性是数据压缩的必要条件。
[0003]传统的数据压缩方法往往耗时巨大,而科学数据的更新速度却十分迅速,因此对传统数据压缩方法的更新换代迫在眉睫;同时受国外高昂软件费用license的限制,我国在高性能硬件设备和应用低效率之间的矛盾日益突出,提高处理器利用率可以有效缓解此种矛盾。
[0004]就目前计算机硬件设备而言,其性能上已经有很大提高,如一般计算机都已是4核处理器,而GPU拥有成千上万的算术逻辑单元专用于数据计算,这为并行技术提供了硬件基础。采用并行数据压缩方法不仅可以加快数据处理流程,而且可以提高处理器利用率。

【发明内容】

[0005]本发明的目的是提供一种面向科学计算的浮点型数据并行无损压缩方法,解决了现有技术中存在的高性能硬件设备和应用低效率之间的矛盾的问题。
[0006]本发明所采用的技术方案是,一种面向科学计算的浮点型数据并行无损压缩方法,将TMI方法由CPU转移到GPU,并采用棋盘分割的方式得以充分利用GPU提供的众核技术,加快数据处理流程。
[0007]本发明的特点还在于:
[0008]CPU内部的具体工作步骤为:
[0009]步骤1.1、初始化GPU,获得GPU的各种参数,并创建命令队列;
[0010]步骤1.2、创建GPU的Kernel压缩程序和Kernel解压缩程序的执行命令;
[0011]步骤1.3、申请保存压缩完成后的有效数据位和标志位数据的GPU内存空间;
[0012]步骤1.4、转换待压缩数据使其变成可被GPU识别的维度和格式;
[0013]步骤1.5、将步骤1.4转换后的数据由CPU发送到GPU ;
[0014]步骤1.6、根据命令队列控制GPU端Kernel压缩程序的运行;
[0015]步骤1.7、根据命令队列控制GPU端Kernel解压缩程序的运行。
[0016]步骤1.1具体为:首先获取支持GPU的平台信息;然后获取GPU的设备信息;最后根据平台信息和GPU的设备信息创建上下文和命令队列;
[0017]其中,GPU的设备信息包括GPU的型号,GPU能运行的最大线程数,GPU的内存大小,GPU所支持的全局内存大小和局部内存大小。
[0018]GPU内部的具体工作步骤为:
[0019]步骤2.1、接收CPU发送的数据;
[0020]步骤2.2、获取步骤2.1中接收到的数据的工作组编号,根据该编号确定数据压缩和解压缩时的线程编号;
[0021]步骤2.3、根据步骤2.2得到的线程编号和工作组编号确定哪部分数据由哪个线程处理压缩和解压缩;
[0022]步骤2.4、采用TMI压缩方法进行数据压缩,并将压缩后的数据按位存储;
[0023]步骤2.5、采用TMI解压缩方法进行数据解压缩。
[0024]步骤2.2中工作组编号的获取具体为:将所有数据的维度视作全局工作空间,每个数据的位置编号视作相应维度上的全局编号;对全局工作空间分块,将每块视作工作组空间,块的位置编号视作相应维度上的工作组编号;工作组空间内的数据的位置相对工作组空间的位置视作局部位置。
[0025]步骤2.4的具体步骤为:
[0026]步骤2.4.1、内存拷贝参考数据和被压缩数据,将其分别转换为4个字节的整数,
[0027]其中,参考数据是前一个被压缩数据;
[0028]步骤2.4.2、根据IEEE754格式,提取出参考数据和被压缩数据的符号域、指数域和尾数域;
[0029]步骤2.4.3、保持被压缩数据的符号域值不变;
[0030]步骤2.4.4、采用减法运算得出被压缩数据与参考数据的指数域差值,当指数域差值的值较小时,标记相应的标志位;当指数域差值的值较大时,单独存储被压缩数据的指数域,并标记相应的标志位;
[0031]步骤2.4.5、采用减法运算得出被压缩数据与参考数据的尾数域差值,删除尾数域差值头部的连续冗余0,存储有效数据,同时标记有效数据的个数;
[0032]步骤2.4.6、采用位位相接的方式封装所有数据尾数域差值的有效数据位,并封装被压缩数据的符号域、指数域及各种标志位,即实现了数据的完全无损压缩。
[0033]步骤2.5具体步骤为:
[0034]步骤2.5.1、根据尾数部分的标志位值确定尾数域差值的有效数据位数,并按位从尾数域的压缩数据中取出该差值;然后由IEEE754格式可知该差值头部所需的冗余O位数,并对其进行填充;最后根据参考数据的尾数值恢复出被压缩数据的尾数域;
[0035]步骤2.5.2、根据指数部分的标志位值,如果获得的是指数域差值,根据参考数据的指数域恢复出被压缩数据的指数域,转到步骤2.3 ;如果获得的是被压缩数据的指数域,直接转到步骤2.3 ;
[0036]步骤2.5.3、从压缩数据中取出被压缩数据的符号域;
[0037]步骤2.5.4、按照IEEE754格式,组合符号域、指数域和尾数域变成4个字节的整数,并内存映射该整数使其还原成被压缩的浮点型数据。
[0038]本发明的有益效果是:本发明一种面向科学计算的浮点型数据并行无损压缩方法,通过移植等手段,结合CPU与GPU混合异构编程模型,运用跨平台语言OpenCL进一步优化数据压缩流程,加快数据处理速度,达到了高压缩率与高速度化的平衡。
【附图说明】
[0039]图1是本发明并行压缩方法中基于OpenCL的TMI并行压缩策略示意图;
[0040]图2是本发明并行压缩方法与TM1、OMPTMI的压缩率比较图;
[0041]图3是本发明并行压缩方法与TM1、OMPTMI的压缩和解压缩时间比较图。
【具体实施方式】
[0042]下面结合附图和【具体实施方式】对本发明进行详细说明。
[0043]本发明一种面向科学计算的浮点型数据并行无损压缩方法,主要针对单精度浮点型数据。结合尾数整型化-Think Mantissa as Integer (TH)串行压缩方法的理论原型,提出基于众核GPU的OpenCL并行TMI压缩方法(CLTMI)。如图1所示,通过移植等手段,将TMI方法由CPU转移到GPU,并采用棋盘分割的方式得以充分利用GPU所提供的众核技术,加快数据处理流程。
[0044]CPU主要包括对GPU的初始化、对数据的转换以及对KerneI程序的控制,具体步骤为:
[0045]步骤1.1、初始化GPU,获得GPU的各种参数,并创建命令队列,具体为:
[0046]首先获取支持GPU的平台信息即是NVIDIA平台还是AMD平台或者其他种类的平台;然后获取GPU的设备信息;最后根据平台信息和GPU的设备信息创建上下文和命令队列;
[0047]在该步骤中必须了解支持OpenCL运行的环境参数,包括OpenCL的运行设备即GPU的设备信息包括GPU的型号,GPU能运行的最大线程数,GPU的内存大小,GPU所支持的全局内存大小和局部内存大小;根据这些参数不断优化OpenCL并行程序,同时避免出现数据量过大导致内存不足,或者使分块容量过大导致访问越界等异常现象。
[0048]步骤1.2、创建GPU的Kernel压缩程序和Kernel解压缩程序的执行命令,Kernel程序的命名必须与宿主机创建Kernel程序执行命令时定义的名字完全相同,否则将出现程序可以编译通过但运行异常退出等情况;
[0049]步骤1.3、申请保存压缩完成后的有效数据位和标志位数据的GPU内存空间,此处申请的内存空间必须小于步骤1.1中获得的最大内存空间;
[0050]步骤1.4、转换待压缩数据使其变成可被GPU识别的维度和格式。CPU处理的数据属于二维数据,GPU虽常用于浮点型数据计算,并且也支持多维度数据处理,但使用OpenCL异构编程模型时,必须人工将多维度数据转换成一维度数据。以二维数组为例,式(I)表示二维数组(^七82向一维数组data丨转换:
[0051]data2[i, j] = Clata1 [i*Nl+j](I)
[0052]式⑵表示一维数组Clata1向二维数组data 2转换:
[0053]Clata1 [i] = data2[i/Nl, i% NI] (2)
[0054]其中1、j表示数组下标,N1、Nx表示二维数组的维度大小。
[0055]步骤1.5、将步骤1.4转换后的数据由CPU发送到GPU ;
[0056]步骤1.6、根据命令队列控制GPU端Kernel压缩程序的运行;
[0057]步骤1.7、根据命令队列控制GPU端Kernel解压缩程序的运行。
[0058]GPU主要包括对线程编号的获取、数据的压缩与解压缩工作,具体步骤为:
[0059]步骤2.1、接收CPU发送的数据;
[0060]步骤2.2、获取步骤2.1中接收到的数据的工作组编号,根据该编号确定数据压缩和解压缩时的线程编号;
[0061]其中,工作组编号的获取具体为:将所有数据的维度视作全局工作空间(GlobalWork Size),每个数据的位置编号视作相应维度上的全局编号(Global ID);对全局工作空间分块,将每块视作工作组空间(Work Group),块的位置编号视作相应维度上的
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1