本发明涉及大规模fft,具体涉及一种基于浮点数压缩技术的大规模fft实现方法及装置。
背景技术:
1、快速傅里叶变换(fast fourier transform,fft)在数字信号处理、微分方程求解、图像处理和分子动力学等很多学科和科学计算领域具有重要地位和意义。目前许多重要的大规模计算应用依赖于快速傅里叶变换的高效计算,因此在超级计算机上有效地实现大规模fft是非常必要的。
2、对于大规模fft计算,其输入数据并不能完全在单个节点上计算,需要划分到多个节点上,每个节点计算自己的fft部分,然后再与其他节点进行数据交换,这就涉及节点间的任务划分问题,即区域分解策略。目前,大规模fft有两种经典的分解策略,分别为一维区域分解(slab)和二维区域分解(pencil)。二维区域分解策略在大规模集群上应用得比较普遍,可以在两个维度上同时进行划分,具有更好的可扩展性,但因每个进程上只有一维的数据,需要进行2次数据交换。
3、假设double类型三维fft的计算规模为nx×ny×nz,x维的数据连续存储,进程网格的分布为p×q(其中p和q分别是行进程数和列进程数),依次进行x维、y维和z维的fft计算。为了得到更好地计算性能,可以使用gpu端的硬件资源进行加速。
4、其算法具体流程描述如下:
5、(1)将数据从主机内存拷贝到设备内存(h2d);
6、(2)调用设备端double类型的软件库进行x维的fft计算;
7、(3)因每个进程要通信的数据在本地内存中是不连续存储的,需要先对数据进行
8、“打包”操作,将非连续存储的数据打包成连续存储的数据块来优化mpi_alltoall(v)的通信性能;
9、(4)将打包后的数据由设备内存拷贝回主机内存(d2h);
10、(5)每组列通信域中的进程进行mpi_alltoall(v)通信,使每个进程在本地得到y维的数据;
11、(6)将通信后的数据从主机内存拷贝到设备内存(h2d);
12、(7)对数据块进行“解包”操作,将数据进行重新排列,得到计算y维fft的数据;
13、(8)调用设备端double类型的软件库进行y维的fft计算;
14、(9)对数据进行“打包”操作,将非连续存储的数据打包成连续存储的数据块;
15、(10)将打包后的数据由设备内存拷贝回主机内存(d2h);
16、(11)每组行通信域中的进程进行mpi_alltoall(v)通信,使每个进程在本地得到z维的数据;
17、(12)将通信后的数据从主机内存拷贝到设备内存(h2d);
18、(13)调用设备端double类型的软件库进行z维的fft计算;
19、(14)将z维的fft计算结果数据由设备内存拷贝回主机内存(d2h)。
20、对于支持gpu间数据传输的计算系统,可以省去mpi_alltoall(v)通信前后的d2h和h2d操作,直接对设备内存中的数据进行通信。
21、对于每一维度的fft计算,每个进程的计算任务可以看成多个相互独立的一维fft计算,可将其划分成多个任务块,基于stream技术实现每个任务块占用不同的硬件资源并发执行。
22、对于大规模fft,进程间的数据通信成为了主要的性能瓶颈,直接影响其并行效率。传统的方式主要通过设计新的通信算法或借助重叠技术来优化性能,其往往需要依赖计算平台的硬件特性、网络拓扑特点和算法特点,但大规模fft的性能仍然受到通信瓶颈的制约,特别是在采用gpu加速器的计算平台上。
23、现代计算机中,浮点数一般采用ieee制定的国际标准ieee二进制浮点数算术标准(ieee 754),用有限的连续字节和特定的格式来存储。根据ieee 754标准,浮点数将特定长度的连续字节的所有二进制位分为特定宽度的符号位(s)、阶码(exponent)和尾数(mantissa)三个部分,其中符号位(s)表示浮点数的正负,与有效位(尾数)是分开的;阶码(exponent)是指数域存储的值,并在指数的实际值上加了一个指数偏移量(exponentbias),不同精度的指数偏移量不同,值为2k-1-1(k为存储指数的比特的长度);尾数(mantissa)通常是规格化表示,即非“0”的有效位最高位是“1”,但在ieee标准中,对最高位“1”进行隐藏并不存储。
24、浮点数格式是一种数据结构,它规定了构成浮点数的各个区域以及这些区域的布局和算术意义。根据ieee 754标准,阶码(exponent)反映浮点数的表示范围,所占的位数越多,能表示的浮点数范围就越大;尾数(mantissa)反映浮点数的精度,所占的位数越多,浮点数的精度就越高。如果仅考虑浮点数的存储,则可以使用不同于ieee 754标准的浮点格式,通过自定义浮点数数据结构,实现对浮点数的表示范围和表示精度灵活和精细地控制。
25、经研究,大规模fft可通过混合精度来优化通信性能。但受限于硬件资源,大多数处理器只支持符合ieee 754标准的少数浮点数数据类型,如float和double等,缺乏对任意精度浮点数的支持。另外各种精度浮点数的转换涉及尾数截断影响浮点数精度的问题。
技术实现思路
1、本发明技术解决问题:针对大规模fft中通信瓶颈问题,提供一种基于浮点数压缩技术的大规模fft实现方法及装置,通过减少通信量来减少通信时间,并提高其并行效率。
2、本发明的技术内容包括:
3、一种基于浮点数压缩技术的大规模fft实现方法,应用于设备端,所述方法包括:
4、对第i个维度的fft计算结果进行共享指数浮点数压缩,并将压缩结果打包成第i个维度的压缩数据之后,拷贝至所述主机端;其中,所述第i个维度的压缩数据是连续存储的数据块,所述对第i个维度的fft计算结果进行共享指数浮点数压缩,包括:
5、对第i个维度的fft计算结果进行非线性归一化操作,并对非线性归一化操作结果进行线性归一化操作;
6、对线性归一化操作结果进行压缩;;
7、从主机端获取所述第i个维度的压缩数据后,对第i个维度的压缩数据依次进行解包和共享指数浮点数解压缩,并基于解压缩数据进行fft计算,以得到第i+1个维度的fft计算结果;其中,所述对第i个维度的压缩数据进行共享指数浮点数解压缩,包括:
8、对所述第i个维度的解包数据进行解压缩;
9、对解压缩数据进行反线性归一化操作,并对反线性归一化操作结果进行反非线性归一化操作;
10、在i+1<n的情况下,令i=i+1,并返回至所述对第i个维度的fft计算结果进行共享指数浮点数压缩,并将第i个维度的压缩数据拷贝至所述主机端;其中,n表示fft计算的总维度;
11、在i+1=n的情况下,将第i+1个维度的fft计算结果作为fft实现结果。
12、进一步地,所述第i个维度的fft计算结果的浮点数数据类型包括:double类型和低精度浮点数类型;其中,所述低精度浮点数类型用于存储压缩的浮点数,每个浮点数只需存储符号位和尾数部分的内容。
13、进一步地,所述第i个维度的fft计算结果进行非线性归一化操作,包括:
14、判断浮点数x是否大于零;其中,所述浮点数x是第i个维度的fft计算结果对应的浮点数数组中的一元素;
15、在所述浮点数x大于零的情况下,获取所述浮点数x的变形值y=log(x+1);
16、在所述浮点数x不大于零的情况下,获取所述浮点数x的变形值y=-log(-x+1);
17、基于所述浮点数x的变形值y,得到非线性归一化操作结果。
18、进一步地,对非线性归一化操作结果进行线性归一化操作,包括:
19、设置区间的边界值a和边界值b;
20、计算所述变形值y的变形值其中,min表示非线性归一化操作结果中最小的变形值y,max表示非线性归一化操作结果中最大的变形值y;
21、基于所有变形值y的变形值x′,得到线性归一化操作结果。
22、进一步地,所述对解包数据进行反线性归一化操作,包括:
23、获取区间的边界值a和边界值b;
24、计算所述变形值x′的变形值其中,min表示非线性归一化操作结果中最小的变形值y,max表示非线性归一化操作结果中最大的变形值y;
25、基于所有变形值x′的变形值y″,得到反线性归一化操作结果。
26、进一步地,所述对fft计算结果进行反非线性归一化操作,包括:
27、判断一变形值y″是否大于零;
28、在所述变形值y″大于零的情况下,获取所述变形值y″的变形值x″=ey″-1;
29、在所述变形值y″不大于零的情况下,获取所述变形值y″的变形值x″=1-e-y″;
30、基于所述变形值y″的变形值x″,得到所述解压缩数据。
31、一种基于浮点数压缩技术的大规模fft实现装置,所述装置包括:
32、压缩模块,用于对第i个维度的fft计算结果进行共享指数浮点数压缩,并将压缩结果打包成第i个维度的压缩数据之后,拷贝至所述主机端;其中,所述第i个维度的压缩数据是连续存储的数据块,所述对第i个维度的fft计算结果进行共享指数浮点数压缩,包括:
33、对第i个维度的fft计算结果进行非线性归一化操作,并对非线性归一化操作结果进行线性归一化操作;
34、对线性归一化操作结果进行压缩;
35、解压缩模块,用于从主机端获取所述第i个维度的压缩数据后,对第i个维度的压缩数据依次进行解包和共享指数浮点数解压缩,并基于解压缩数据进行fft计算,以得到第i+1个维度的fft计算结果;其中,所述对第i个维度的压缩数据进行共享指数浮点数解压缩,包括:
36、对所述第i个维度的解包数据进行解压缩;
37、对解压缩数据进行反线性归一化操作,并对反线性归一化操作结果进行反非线性归一化操作;
38、输出模块,用于在i+1<n的情况下,令i=i+1,并返回至所述对第i个维度的fft计算结果进行共享指数浮点数压缩,并将第i个维度的压缩数据拷贝至所述主机端;在i+1=n的情况下,将第i+1个维度的fft计算结果作为fft实现结果;其中,n表示fft计算的总维度。
39、一种计算机装置,包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行上述任一项所述方法的指令。
40、一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储计算机程序,所述计算机程序被计算机执行时,实现上述任一项所述的方法。
41、本发明与现有的double精度大规模fft相比,至少具有以下优势:
42、(1)本发明基于共享指数浮点数压缩技术,通过减少通信量来优化大规模fft的通信,提升大规模fft的计算性能。以时间表示fft计算性能为例,double精度与采用共享指数浮点数压缩技术的6字节浮点数进行混合精度fft计算的计算性能相比于double精度的计算性能,其平均加速比为1.23;double精度与采用共享指数浮点数压缩技术的4字节浮点数进行混合精度fft计算的计算性能相比于double精度的计算性能,其平均加速比为1.62。
43、(2)本发明基于共享指数浮点数压缩技术,在存储浮点数时,通过占用浮点数的符号位和指数部分来保留更多的尾数,提升大规模fft的计算精度。double精度与采用共享指数浮点数压缩技术的4字节浮点数进行混合精度fft计算的计算精度优于double精度与float精度进行混合精度fft计算的计算精度,double精度与采用共享指数浮点数压缩技术的6字节浮点数进行混合精度fft计算的计算精度能达到10-14。