一种基于递归的并行快速傅里叶变换通信优化方法和系统与流程

文档序号:17832805发布日期:2019-06-05 23:13阅读:227来源:国知局
一种基于递归的并行快速傅里叶变换通信优化方法和系统与流程

本发明属于快速傅里叶变换技术领域,具体涉及一种基于递归的并行快速傅里叶变换通信优化方法及系统。



背景技术:

快速傅里叶变换(fastfouriertransform,fft)是用于计算离散傅立叶变换或其逆运算的快速算法,是ieee科学与工程计算期刊评选的20世纪十大算法之一。fft被广泛应用于频谱分析、滤波、图象处理、数据压缩以及深度学习等领域。随着大数据时代的到来,fft算法所求解的问题规模越来越大,这意味着传统串行fft算法不能满足问题求解时效性方面的需求。因此,运行在大型并行计算机系统的并行fft算法成为必然。本发明针对并行fft提出一种新颖的基于递归的通信优化方法,以充分挖掘存储层次中的数据局部性,涉及并行算法设计、并行编程优化、并行计算机体系结构等方面技术内容。

并行fft是一个典型的通信密集型算法,其全局数据转置需要全体进程参与的集合通信,这些通信操作通常会占总执行时间的绝大部分,且所占比例会随机器规模的增加而增加。因此,提升通信性能是解决并行fft性能瓶颈问题的关键。当前,针对并行fft的通信优化技术主要包括以下三种:(1)依靠现有通信库中的通信算法来优化并行fft的全局数据转置,包括nasparallelbenchmarks、fftw等流行的开源fft软件均采用了这种方法,它们通过调用messagepassinginterface(mpi)中的“所有-到-所有”通信操作来完成数据转置。典型的“所有-到-所有”通信算法包括“异步发送-接收-同步”算法,“按对交换”算法,以及bruck算法。根据数据规模以及进程规模的不同,mpi会选择不同的算法来完成“所有-到-所有”操作,以降低通信操作的延迟及带宽开销。(2)针对gpu+cpu异构集群架构的并行fft优化方法。该方法首先给出各存储媒介之间(如cpu与gpu之间,远程节点之间等)的传输带宽,进而分析出cpu上大矩阵转置为性能瓶颈,之后通过在不同阶段数据传输中的数据重排列,消除cpu上的大矩阵转置,从而获得良好性能加速比。然而,与第一种方法相同是,该方法仍采用传统“所有-到-所有”算法实现计算节点间的数据转置。(3)采用细粒度的单边通信方式完成数据转置[3]。这种方法的主要好处是将数据传输与进程间同步进行分离,从而可以高效实现计算与通信的重叠以及通信与通信的重叠。这种方法虽然获得了较好的通信性能,但细粒度通信的要求大大增加了编程及优化的复杂度。

在上述三种并行fft通信优化方法中,第一种方法专注于降低网络通信延迟及带宽开销,第二种方法专注于异构集群系统中cpu上矩阵转置消除,第三种方法专注于对通信开销的隐藏。然而,这三种方法均未考虑通信的数据局部性问题,在缓存缺失率、节点间通信聚合等方面不能达到最优。随着超级计算机硬件架构的不断发展,并行计算机系统的存储层次越来越深,存储架构越来越复杂。计算节点内处理核数的增长速度高于存储量的增长速度,因此平均每个处理核所占有的存储量正在减少,核间数据移动(即通信)开销越来越大。因此,良好的数据局部性对对于通信的性能提升至关重要。为解决已有并行fft通信方法数据局部性差的问题,本发明提出一种新颖的基于递归的通信优化方法,即将整个通信任务递归划分成一系列子任务来执行。编程人员在无需考虑各存储层次中的硬件参数前提下,使通信达到缓存缺失率渐近线最优,并降低节点间通信量并提升节点间通信并行度。该发明适用于一维、二维及多维并行快速傅里叶变换的通信优化。



技术实现要素:

针对上述问题,本发明涉及一种基于递归的并行快速傅里叶变换通信优化方法,包括:

步骤1,将全局数据平均划分为多个数据块a(i,j),并将所有该数据块a(i,j)均匀划分为多个区域aj(i),以每个该区域aj(i)对应一个进程pj;其中i、j为自然数;

步骤2,以获取该全局数据转置后的目标区域为根任务;对该根任务以该目标区域的数据块b(j,i)为单元进行二项递归任务划分,即选取数据块数多的维度,将该目标区域沿数据块数少的维度均匀地划分为两个部分;重复多次该二项递归任务划分直到每个部分仅包含一个该数据块b(j,i),并形成该全局数据转置的任务树;

步骤3,将该任务树的叶子节点任务依次均匀的分配给各该进程pj;

步骤4,各该进程pj依次进行该叶子节点任务,并执行该任务树直到完成该根任务,以完成该全局数据转置。

本发明所述的并行快速傅里叶变换通信优化方法,其中步骤1具体包括:将该全局数据在x方向和y方向上平均划分为m2个数据块a(i,j),并将所有该数据块a(i,j)沿y方向均匀划分为m个区域aj(i);以每个该区域aj(i)对应一个该进程pj;其中i∈[0,m-1],j∈[0,m-1],m为正整数。

本发明所述的并行快速傅里叶变换通信优化方法,其中步骤3具体包括:将m2个该叶子节点任务按任务树中从左向右的顺序对所对应的该数据块b(j,i)依次编号为n,n∈[0,m2-1],即最左边叶子节点任务对应的数据块的编号n=0,最右边叶子节点任务对应的数据块的编号n=m2-1;将编号平均分配给m个该进程pj,即进程pj负责的叶子节点任务编号范围为[j*m,(j+1)*m-1]。

本发明所述的并行快速傅里叶变换通信优化方法,其中步骤3还包括:将该数据块b(j,i)的编号n转化为二进制数bin(j,i),去除该二进制数bin(j,i)的所有比特位中偶数位以生成二进制数binodd(j,i),去除该二进制数bin(j,i)的所有比特位中奇数位以生成二进制数bineven(j,i),以该二进制数bineven(j,i)作为该数据块b(j,i)在转置前所在进程的编号,以二进制数binodd(j,i)作为该数据块b(j,i)在转置前所在进程的缓冲区中的偏移位置。

本发明所述的并行快速傅里叶变换通信优化方法,还包括:每个该进程pj通过共享内存机制直接访问各自的缓冲区。

本发明还涉及一种基于递归的并行快速傅里叶变换通信优化系统,包括:

数据块划分模块,用于将全局数据平均划分为多个数据块a(i,j),并将所有该数据块a(i,j)均匀划分为多个区域aj(i),以每个该区域aj(i)对应一个进程pj;其中i、j为自然数;

任务树生成模块,用于以该全局数据转置后的目标区域为根任务;对该根任务以该目标区域的数据块b(j,i)为单元进行二项递归任务划分,即选取数据块数多的维度,将该目标区域沿数据块数少的维度均匀地划分为两个部分;重复多次该二项递归任务划分直到每个部分仅包含一个该数据块b(j,i),并形成该全局数据转置的任务树;

叶子节点任务分配模块,用于将该任务树的叶子节点任务依次均匀的分配给各该进程pj;

数据块转置模块,用于各该进程pj依次进行该叶子节点任务,以使该数据块a(i,j)转置为该数据块b(j,i),执行该任务树以完成该根任务。

本发明所述的并行快速傅里叶变换通信优化系统,其中数据块划分模块具体包括:将该全局数据在x方向和y方向上平均划分为m2个数据块a(i,j),并将所有该数据块a(i,j)沿y方向均匀划分为m个区域aj(i);以每个该区域aj(i)对应一个该进程pj;其中i∈[0,m-1],j∈[0,m-1],m为正整数。

本发明所述的并行快速傅里叶变换通信优化系统,其中叶子节点任务分配模块包括:

任务编号生成模块,用于将m2个该叶子节点任务按任务树中从左向右的顺序对所对应的该数据块b(j,i)依次编号为n,n∈[0,m2-1],即最左边叶子节点任务对应的数据块的编号n=0,最右边叶子节点任务对应的数据块的编号n=m2-1;将编号平均分配给m个该进程pj,即进程pj负责的叶子节点任务编号范围为[j*m,(j+1)*m-1]。

任务编号分配模块,将该数据块b(j,i)的编号n转化为二进制数bin(j,i),去除该二进制数bin(j,i)的所有比特位中偶数位以生成二进制数binodd(j,i),去除该二进制数bin(j,i)的所有比特位中奇数位以生成二进制数bineven(j,i),以该二进制数bineven(j,i)作为该数据块b(j,i)在转置前所在进程的编号,以二进制数binodd(j,i)作为该数据块b(j,i)在转置前所在进程的缓冲区中的偏移位置。

本发明所述的并行快速傅里叶变换通信优化系统,还包括:每个该进程pj通过共享内存机制直接访问各自的缓冲区。

本发明的目的是克服现有技术中并行fft通信数据局部性差的问题,可以充分挖掘并行计算机系统的多存储层次数据局部性,编程人员在无需考虑各存储层次中的硬件参数前提下,使通信的缓存缺失率达到渐近线最优,并提升节点间通信的空间局部性,从而显著提升并行快速傅里叶变换通信性能。

附图说明

图1是本发明实施例的二维fft并行算法示意图。

图2是本发明实施例的基于递归的并行fft通信方法示意图。

图3是本发明实施例的各进程所负责数据块的读写位置及顺序示意图。

图4是本发明实施例的xeone7-8890共享内存机器上并行fft通信性能对比图。

图5是本发明实施例的256节点xeone5-2680分布式集群上并行fft通信性能对比图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明提出的一种基于递归的并行快速傅里叶变换通信优化方法及系统进一步详细说明。应当理解,此处所描述的具体实施方法仅仅用以解释本发明,并不用于限定本发明。

发明人在进行并行快速傅里叶变换通信方法研究时,发现现有技术中该项缺陷是由仅考虑降低通信带宽及延迟开销,而并未考虑通信过程中的数据局部性导致的。发明人经过对如何提升数据局部性等相关方法发现,解决该项缺陷可以通过基于递归的通信方法来实现,即将整个通信任务递归划分成一系列子任务来执行。该方法是对已有方法的改进,该方法可提升通信过程中的数据空间局部性。为了降低递归任务的运行时调度开销,进一步提出一种基于位运算的低开销任务划分策略。基于递归的并行快速傅里叶变换的通信方法具体优势反应在基于缓存一致性共享内存架构上是使缓存缺失率达到渐近线最优,反应到分布式存储架构上是降低通信量并提升通信并行度。

首先以一个具体实例介绍并行快速傅里叶变换的实现过程。图1给出了4个进程并行完成二维快速傅里叶变换的简要过程,其中二维区域沿y方向被均匀划分为4个长方形区域,每个进程负责一个长方形区域,其执行过程共分为3步。(1)各进程对所负责长方形区域沿x方向进行一维快速傅里叶变换,例如进程p0负责的区域是a0、a1、a2以及a3四个数据块构成的长方形区域;(2)进行全局数据转置,即各进程将第i(i∈[0,3])个数据块发送给第i个进程,例如全局数据转置后p0负责的区域变为a0、b0、c0以及d0四个数据块构成的长方形区域。该步涉及到并行fft的进程间通信,需要所有进程参与的通信操作,因此通常会成为并行fft的性能瓶颈;(3)各进程对本地数据块进行块内数据转置,进而完成y方向上的一维快速傅里叶变换。

接下来介绍基于递归的并行fft通信方法。仍以4个进程并行完成二维快速傅里叶变换的通信过程为例,如图2所示。首先,将全局数据转置之后的二维区域定义为根任务;然后,对根任务以被传输的数据块为单元进行二项递归任务划分,即每次选取数据块数较多的维度,将区域沿数据块数少的维度均匀地划分为左右或上下两个部分,其中左部分或上部分作为左子任务,右部分或下部分作为右子任务。例如,图2中根任务被划分为任务层1中的左右两个子任务,而任务层1中的每个任务又被均匀划分为左右两个子任务。二项递归任务划分直到只剩一个传输数据块为止;最后,将任务树中叶子节点任务依次均匀的分配给各个进程。例如,图2中每个进程依次负责4个叶子节点任务,即进程p0依次负责a0、b0、a1、b1四个数据块的转置,进程p1依次负责c0、d0、c1、d1四个数据块的转置,进程p2依次负责a2、b2、a3、b3四个数据块的转置,进程p3依次负责c2、d2、c3、d3四个数据块的转置。

之后介绍基于递归的并行fft通信方法的具体实现。首先,将任务树中叶子节点任务从左至右依次编号。例如图4中叶子节点任务共16个,其编号依次为0,1,...,15。然后将16个任务编号平均分配给4个进程,即第i(i∈[0,3])个进程负责的任务编号为[i*4,i*4+3],例如,进程p1负责的任务编号为[4,7]。之后,为了确定各进程所负责任务在全局转置前后的坐标,本发明使用了一种基于位运算的任务划分策略。以p1负责的c0为例,c0的任务编号为4,其二进制表示为01002,共4个比特位。将4个比特位其从右到左从0开始依次编号,其偶数位组成的二进制数为102(转换为十进制为2),表示转置前c0所在的进程编号,即p2;其奇数位组成的二进制数为002(转换为十进制为0),表示转置前c0在进程p2缓冲区中的偏移位置,即第0个数据块。至此可确定转置前c0处于p2进程的第0个数据块,转置后c0所处的位置为p0进程的第2个数据块。类似的,各进程所负责的任务在转置前后的位置均可以通过位运算得到。本发明采用的基于位运算的任务划分策略相对于传统的运行时任务调度策略显著降低了任务调度开销。

尽管以上以二维并行快速傅里叶变换为例介绍基于递归的通信优化方法,但该方法适用于一维、二维及多维并行快速傅里叶变换的通信优化。这是因为一维及多维并行快速傅里叶变换均会带来全局数据转置问题,可以按相同方法对其进行优化。因此,对于其他维度的并行快速傅里叶变换的递归通信优化方法的实现在此不再赘述。

最后分别在基于缓存一致性共享内存架构上以及分布式存储架构上对本发明提出的基于递归的通信方法的数据局部性进行分析。在基于缓存一致性共享内存架构上,各进程通过共享内存机制直接访问各自的数据缓冲区。以图3为例,p1进程读取c0后不久便读取c1,而c0和c1在内存中是连续存放的,从而展现出良好的空间局部性,硬件缓存会自动预取同一缓存块内相邻地址中的数据。因此,当p1读取c1时,c1很可能已经被预取到高速缓存中,表现为缓存命中(否则为缓存缺失),而无需再从内存中读取c1,这将显著降低访存的延迟开销。同理,p1进程在写数据块时同样展现出良好的空间局部性。通过归约方法可以证明,基于递归的并行fft通信方法高速缓存缺失次数为o(n2s/b),其中n为总进程数,s为数据块大小,b为缓存块大小。可以很容易算出,转置前后全部数据块所占用的高速缓存块数为2n2s/b,即整个通信过程中至少产生2n2s/b次缓存缺失,因此基于递归的并行fft通信方法在缓存缺失率达到渐近线最优。基于递归的并行fft通信方法在实现过程中无需考虑各处理器缓存块大小以及缓存容量等硬件参数,即可使缓存缺失率达到渐近线最优,从而提升通信性能,这大大降低了程序员的性能调优工作。

在分布式存储架构上,数据通过互联网络在各计算节点间进行传输。但是,与基于缓存一致性共享内存架构不同的是,分布式存储架构上并没有硬件设备来自动缓存远程节点传输过来的数据。因此,本发明使用了一种基于消息聚合的远程节点数据手动缓存机制。具体实现以图3中p1进程为例,首先p1进程从p2和p3进程分别接收聚合之后的数据块{c0,c1}以及{d0,d1},这两个消息是可以并行接收的;然后p1进程对c0,c1,d0以及d1四个数据块进行本地转置并将连续存储的数据块进行聚合,得到聚合后的数据块{c0,d0}及{c1,d1};最后p1进程将聚合后的数据块{c0,d0}发送给p0进程,数据块{c1,d1}在p1进程本地,无需发送。设n为总进程数且为2的整数次幂,v为各进程发送或接收缓冲区大小,可以得到基于递归的并行fft通信方法产生次通信,每个进程的通信量为2v。接下来与同类通信算法进行对比,bruck算法产生log2n次通信,每个进程的通信量为(log2n)v/2。相对于bruck算法,基于递归的并行fft通信方法产生较少通信量。尽管基于递归的通信方法产生的通信次数多于bruck算法,但是基于递归的通信方法可并行发送多个消息,具有良好的通信并行度。“异步发送-接收-同步”算法以及“按对交换”算法产生n-1次通信,每个进程的通信量v;相对于这两种算法,基于递归的通信方法产生较少的通信次数,通信量渐近线相同。

图4展示了共享内存xeone7-8890处理器上的性能对比结果。xeone7-8890包含4个18核处理器,共72核,其中每个处理器共享45mb三级缓存,每个处理核独占256kb二级缓存及32kb一级数据缓存。实验中使用64核(64进程)对不同规模下二维fft的性能进行了测试。实验结果表明,在xeone7-8890共享内存机器上,本发明提出的并行fft通信方法比传统并行fft通信性能获得平均4.6加速比,这主要得益于本发明提出的并行fft通信方法在共享内存架构上相对于传统方法具有更好的数据局部性及更少的数据拷贝开销。

图5展示了xeone5-2680分布式集群上的性能对比结果。该集群具有256个由infiniband网络互联连接的xeone5-2680计算节点。每个xeone5-2680计算节点包含2个12核处理器,每个处理器共享30mb三级缓存,每个处理核独占256kb二级缓存及32kb一级数据缓存。为了测试分布式内存架构上的性能,实验中每个计算节点运行1个进程,共计256个进程。实验结果表明,在xeone5-2680分布式集群上,本发明提出的并行fft通信方法比传统并行fft通信性能获得平均3.0加速比。这主要得益于本发明提出的并行fft节点间通信实现了消息聚合以及多消息并行传输,具有更好的空间局部性。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1