首页> 中国专利> 基于GPU的GRAPES系统优化方法、系统、介质及设备

基于GPU的GRAPES系统优化方法、系统、介质及设备

摘要

本发明涉及一种基于GPU的GRAPES系统优化方法、系统、介质及设备。方法包括:进行数据格式转换以及存储空间开辟的数据初始化;利用CUDA将所述广义共轭余差法的计算流程进行GPU移植,对于计算流程中能进行并行处理的,在GPU中采用多线程并行处理,计算过程中利用显存进行通信,且中间变量均保存在GPU上;对于计算流程中不能并行处理的,将前置数据拷回CPU端进行计算,再将计算结果拷回GPU端。本发明实施例将计算流程进行GPU移植,能进行并行处理的,在GPU中采用多线程并行处理,计算过程中利用显存进行通信,且中间变量均保存在GPU上,避免了和CPU端进行频繁的数据传输,减少了GPU与CPU之间的数据传输开销,提升了程序的整体性能。

著录项

  • 公开/公告号CN112486671A

    专利类型发明专利

  • 公开/公告日2021-03-12

    原文格式PDF

  • 申请/专利权人 青海大学;

    申请/专利号CN202011279755.1

  • 申请日2020-11-16

  • 分类号G06F9/50(20060101);G01W1/00(20060101);

  • 代理机构11212 北京轻创知识产权代理有限公司;

  • 代理人厉洋洋

  • 地址 810016 青海省西宁市城北区宁大路251号

  • 入库时间 2023-06-19 10:11:51

说明书

技术领域

本发明涉及计算机信息技术领域,尤其涉及一种基于GPU的GRAPES系统优化方法、系统、介质及设备。

背景技术

二十一世纪初期,我国气象学家为改善天气预报模式的性能和满足人民日益增加的对天气预报精度的需求,开始对我国新一代数值天气预报系统(GRAPES)进行自主研究。GRAPES动力框架的计算核心是赫姆霍兹方程的求解,该方程是原始大气方程组经过一系列离散化处理之后形成的大规模稀疏线性方程组。目前对线性方程组的求解方法主要有两种,分别是直接法和迭代法。由于计算机硬件条件的限制使用直接法并不能完成有效求解。而迭代法具有硬件存储空间要求较小,原始矩阵在计算过程中保持不变等优点,所以在求解大规模稀疏线性方程组的方法选择上主要采用迭代法。GRAPES数值天气预报系统目前采用的迭代法为广义共轭余差法(GCR)。

当前赫姆霍兹方程的求解优化工作在CPU方面较多。CPU并行技术主要采用MPI和OpenMP。MPI是消息传递模型,多用于多节点设备,MPI在求解赫姆霍兹方程中的运用主要通过将算法的不同计算任务划分至不同进程中,不同进程并行执行任务。广义共轭余差算法的计算内容主要有稀疏矩阵向量乘、向量内积、向量数乘。这些计算核心分布在不同的迭代过程中,且都具有一定的并行度,所以可以较好地进行MPI进程任务分配。MPI并行优化的缺陷主要在通信开销部分,随着进程数量的增加,进程之间的通信开销也会随之增加,从而限制MPI并行优化的整体性能。OpenMP并行技术属于共享内存模型,与MPI程序相比,OpenMP主要利用共享内存进行数据通信,可以减少一部分通信开销。MPI+OpenMP混合并行技术虽然能够提升一定的求解速度,但计算性能仍然有待提高。

发明内容

本发明所要解决的技术问题是针对现有技术存在的问题,提供一种基于GPU的GRAPES系统优化方法、系统、介质及设备。

为解决上述技术问题,本发明实施例提供一种基于GPU的GRAPES系统优化方法,其中,基于广义共轭余差法求解赫姆霍兹方程的优化过程包括:

进行数据格式转换以及存储空间开辟的数据初始化;

利用CUDA将所述广义共轭余差法的计算流程进行GPU移植;

对于计算流程中能进行并行处理的,在GPU中采用多线程并行处理,计算过程中利用显存进行通信,且中间变量均保存在GPU上;

对于计算流程中不能并行处理的,将前置数据拷回CPU端进行计算,再将计算结果拷回GPU端。

为解决上述技术问题,本发明实施例还提供一种基于GPU的GRAPES系统优化系统,所述系统包括:

数据初始化模块,用于进行数据格式转换以及存储空间开辟的数据初始化;

GPU移植模块,用于利用CUDA将所述广义共轭余差法的计算流程进行GPU移植;

GPU计算模块,对于计算流程中能进行并行处理的,在GPU中采用多线程并行处理,计算过程中利用显存进行通信,且中间变量均保存在GPU上;

CPU计算模块,对于不能并行处理的,将前置数据拷回CPU端进行计算,再将计算结果拷回GPU端。

为解决上述技术问题,本发明实施例还提供一种计算机可读存储介质,包括指令,其特征在于,当所述指令在计算机上运行时,使所述计算机执行上述技术方案所述的基于GPU的GRAPES系统优化方法。

为解决上述技术问题,本发明实施例还提供一种计算机设备,包括存储器、CPU、GPU及存储在所述存储器上的并可在所述CPU和GPU上运行的计算机程序,其特征在于,所述CPU和GPU执行所述程序时实现基于上述技术方案所述的基于GPU的GRAPES系统优化方法。

本发明的有益效果是:通过数据初始化进行数据格式转换及存储空间开辟;利用CUDA将所述广义共轭余差法的计算流程进行GPU移植,对于计算流程中能进行并行处理的,在GPU中采用多线程并行处理,计算过程中利用显存进行通信,且中间变量均保存在GPU上;对于计算流程中不能并行处理的,将前置数据拷回CPU端进行计算,再将计算结果拷回GPU端。避免了和CPU端进行频繁的数据传输,减少了GPU与CPU之间的数据传输开销,提升了程序的整体性能。

本发明附加的方面及其优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明实践了解到。

附图说明

图1为本发明实施例提供的基于GPU的GRAPES系统优化方法流程图;

图2为本发明实施例提供的方程19点系数空间分布图;

图3为本发明实施例提供的算法执行流程及主要计算操作示意图;

图4为本发明实施例提供的GPU和CPU内存模式示意图;

图5为本发明实施例提供的GPU合并访存示意图;

图6为本发明实施例提供的内积中共享存储器应用的示意图;

图7为本发明实施例提供的基于GPU的GRAPES系统优化系统的框图。

具体实施方式

以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。

图1为本发明实施例提供的基于GPU的GRAPES系统优化方法流程图。如图1所示,该方法中基于广义共轭余差法求解赫姆霍兹方程的优化过程包括:

S101,进行数据格式转换以及存储空间开辟的数据初始化;

S102,利用CUDA将所述广义共轭余差法的计算流程进行GPU移植;

S103,对于计算流程中能进行并行处理的,在GPU中采用多线程并行处理,计算过程中利用显存进行通信,且中间变量均保存在GPU上;

S104,对于计算流程中不能并行处理的,将前置数据拷回CPU端进行计算,再将计算结果拷回GPU端。

利用CUDA模型进行GPU并行编程的主要开销在于GPU与CPU之间的数据传递,如果频繁进行CPU和GPU之间的数据交换,可能会出现数据传递开销过高,甚至远超计算开销的情况。方法实现过程中为减少数据传输时间开销,避免PCIE总线的数据传输成为程序性能提升的瓶颈,将中间变量都保存在GPU上。在计算过程中利用显卡内存进行通信,避免和主机端进行频繁的数据传输。

上述实施例中,通过数据初始化进行数据格式转换及存储空间开辟;利用CUDA将所述广义共轭余差法的计算流程进行GPU移植,对于计算流程中能进行并行处理的,在GPU中采用多线程并行处理,计算过程中利用显存进行通信,且中间变量均保存在GPU上;对于计算流程中不能并行处理的,将前置数据拷回CPU端进行计算,再将计算结果拷回GPU端。避免了和CPU端进行频繁的数据传输,减少了GPU与CPU之间的数据传输开销,提升了程序的整体性能。

可选地,所述进行数据格式转换以及存储空间开辟的数据初始化,包括:

将待求解模型Ax=b中的系数矩阵A由原始的三维格式转换为二维格式,其中,初始数据包括系数矩阵A、初始解向量x

为广义共轭余差法中的矩阵数据、向量数据和常量数据在CPU端及GPU端分配内存空间。

所述将求解模型Ax=b中的系数矩阵A由原始的三维格式转换为二维格式,包括:边界条件使用循环和轴对称方式处理,经度方向为循环方式,纬度方向为轴对称方式,垂直方向不处理。

需要说明的是,初始数据为三维数据格式,其中每一个点需要空间中与其相关的19个点作为方程系数,该实施例中将矩阵的三维空间格式转化为二维矩阵格式,方便在GPU计算过程中进行优化。

可选地,在一个实施例中,所述对于计算流程中能进行并行处理的,在GPU中采用多线程并行处理时,在进行收敛情况判断时将需要判断的数据传输给CPU,在数据传输时为数据交换频率大于预设频率的变量分配页锁定内存。

需要说明的是,CPU与GPU之间无法避免的数据传输过程只出现在需要进行CPU端计算的情况下,该实施例中,在数据传输时采用cudaHostAlloc分配页锁定内存(pinnedmemory)进一步提高数据传输速度。页锁定内存和可分页内存相比,每一次数据传输都能减少一次复制操作,所以将页锁定内存应用到需要频繁进行数据传输的变量上可以有效节约数据传输开销,由于页锁定内存会长期驻留在内存上,而不能利用虚拟内存技术交换到磁盘,因此,该实施例中是只对需要频繁进行数据交换的变量分配页锁定内存。

可选地,所述对于计算流程中能进行并行处理的,在GPU中采用多线程并行处理时,利用CSR格式存储矩阵数据,利用CUDA进行线程块间及线程块内两级并行访问。

GPU并行的最小单元是线程,若干线程组成线程块,两级并行指对线程块数量及线程块内部线程的数量的设置能够达到较好的效果。这个数量的设置是根据输入数据量的不同,可以随时变更的。

GPU对全局存储器的访问速度也会对程序性能造成一定影响,利用CUDA模型可以实现线程块间及线程块内两级并行,从而完成对全局存储器的合并访问(coalescedaccess)。GPU端执行核函数时会启动一个网格,网格内包含多个线程块,线程块内又包含多个线程。每个线程执行对应矩阵行的计算,结合CSR存储格式能够保证线程束对存储器的访问是连续的,因此可将线程束内部多次访存降低为一次访存。CSR是一种稀疏矩阵存储格式,只保存了稀疏矩阵的非零元素信息,同时对矩阵的行信息进行了压缩,可以提高矩阵存储效率。

该实施例中,已将系数矩阵A转化为二维矩阵保存,从而可以更好地实现GPU访存优化。GPU在访问数据时,一个线程束(warp)中的线程,如果访问的是不连续的内存空间,那么每一个线程都会发出一次访存请求。而如果线程束中的线程访问的内存空间是连续的,那么多次访问请求可以合并为一次访问请求。经过访存合并方式进行优化之后,可以提高计算过程中的数据访问速度。

可选地,所述对于计算流程中能进行并行处理的,在GPU中采用多线程并行处理时,对于只需要一个线程块中的线程访问的数据,在线程块内部利用共享存储器进行保存。

需要说明的是,CUDA架构中包含有多种存储器,全局存储器空间最大,但是数据访问速度相对较慢。共享存储器只有对应线程块可以访问,但是数据访问速度较快。

在GPU计算的过程中,存在一部分数据只需要一个线程块中的线程访问。对于这一部分数据,可以在线程块内部利用共享存储器进行保存。共享存储器的访问延迟比全局存储器更低,在计算过程中线程块内部的线程只需要访问共享存储器内部的数据,而不需要去访问全局存储器,从而进一步提高访存的速度。

共享存储器利用__shared__关键字在线程块内部进行声明。对于计算过程中一部分并不需要所有线程都访问的数据,例如内积计算过程中的局部规约结果,可以利用共享存储器进行保存,以加快数据访问速度。

可选地,所述利用CUDA将所述广义共轭余差法的计算流程进行GPU移植之前,还包括:通过构建预条件子对所述系数矩阵A进行分解预处理。该实施例中,使用预处理技术对算法进行优化,避免由于迭代法依赖系数矩阵谱分布而造成可能存在收敛速度慢甚至不收敛的情况。主要通过构建预条件子将原方程Ax=b转化为M

具体地,所述通过构建预条件子对所述系数矩阵A进行分解预处理,包括:通过ILU预处理操作将原始系数矩阵A分解为一个下三角矩阵L和上三角矩阵U,分解出来的三角矩阵直接保存在待分解的矩阵空间内。

ILU预处理操作将原始系数矩阵近似分解为一个下三角矩阵L和上三角矩阵U。为了避免开辟额外的空间存储中间变量,分解出来的三角矩阵直接保存在待分解的矩阵空间内。预处理之后的计算内容增加主要有两次三角方程求解。数据预处理操作可以大幅减少迭代次数,有效提升方程求解效率。

下面结合附图和具体实施例对本申请所述技术方案作进一步的详细描述。

1.平台环境

CPU:节点数>=2;总物理核心>=64;支持MPI及OpenMP环境。

GPU:NVIDIA显卡;计算能力>=4.0;CUDA version>=10.0。

测试数据:系数A为多对角矩阵,规模超过2e+6阶;x

2.数据初始化

初始数据为三维数据格式,其中每一个点的计算内容如图2所示,需要空间中与其相关的19个点作为方程系数。为与后续优化过程相结合,将矩阵的三维空间格式转化为二维矩阵格式。边界条件使用循环和轴对称方式处理,经度方向为循环方式,纬度方向为轴对称方式,垂直方向不处理。数据格式转换在CPU端执行。

初始化阶段还包括数据内存空间的分配,需要分配内存空间的数据与如下广义共轭余差法伪代码相对应:

输入:矩阵A,初始解

输出:近似解x。

上述伪代码的含义如下:

1.计算初始解x

2.进入循环,设置最大迭代次数;

3.向量r和向量Ap计算内积,两个向量Ap计算内积,结果相除保存到α;

4.更新x

5.更新r

6.r

7.进入循环计算β;

8.向量Ar和向量Ap计算内积,两个向量Ap计算内积,结果相除取负保存到β;

9.结束里层循环;

10.更新p为r和最新k个β和p的数乘结果之和;

11.更新Ap为Ar和最新k个β和Ap的数乘结果之和;

12.结束外层循环。

其中,步骤1涉及矩阵向量乘、步骤3涉及向量内积,步骤4和5涉及向量数乘,步骤8涉及矩阵向量乘和向量内积,步骤10和11涉及向量数乘。

需要分配内存空间的数据主要包括系数矩阵A、初始解x

3.算法整体流程

算法流程图如图3所示,主要计算内容有初始化p

4.数据预处理

数据预处理操作可以大幅减少迭代次数,有效提升方程求解效率。ILU预处理操作将原始系数矩阵近似分解为一个下三角矩阵L和上三角矩阵U。为了避免开辟额外的空间存储中间变量,分解出来的三角矩阵直接保存在待分解的矩阵空间内。分解操作的伪代码如下:

输入:矩阵A,分解范围P。

输出:预处理子M。

上述伪代码的含义如下:

1.进入循环,n为矩阵规模;

2.进入循环,k的范围与i有关,同时分解范围p表示系数矩阵中零元素位置;

3.根据脚标更新A

4.进入循环,j的范围与k和n有关,同时分解范围p表示系数矩阵中零元素位置;

5.根据脚标更新A

6.结束循环j;

7.结束循环k;

8.结束循环i。

条件P设为分解后的三角矩阵稀疏性与原系数矩阵保持一致。预处理之后的计算内容增加主要有两次三角方程求解。

5.主从设备数据传输优化

利用CUDA模型进行GPU并行编程的主要开销在于GPU与CPU之间的数据传递,如果频繁进行CPU和GPU之间的数据交换,可能会出现数据传递开销过高,甚至远超计算开销的情况。方法实现过程中为减少数据传输时间开销,避免PCIE总线的数据传输成为程序性能提升的瓶颈,将A,b,x

6.GPU访存优化

前文提到系数矩阵A是按三维格式进行存储的,为了方便后续的优化进程,本方法将系数矩阵A转化为二维矩阵保存,转化后的性能优势可以在访存部分体现。如图5所示,GPU在访问数据时,一个线程束(warp)中的线程,如果访问的是不连续的内存空间,那么每一个线程都会发出一次访存请求。而如果线程束中的线程访问的内存空间是连续的,那么多次访问请求可以合并为一次访问请求。经过访存合并方式进行优化之后,可以提高计算过程中的数据访问速度。

7.GPU存储器优化

CUDA架构中包含有多种存储器,全局存储器空间最大,但是数据访问速度相对较慢。共享存储器只有对应线程块可以访问,但是数据访问速度较快。共享存储器利用__shared__关键字在线程块内部进行声明。对于计算过程中一部分并不需要所有线程都访问的数据,例如图6所示内积计算过程中的局部规约结果,可以利用共享存储器进行保存,以加快数据访问速度。

基于GPU的GRAPES系统优化方法与在CPU上实现的MPI+OpenMP并行优化方案相比能够有效加快方程求解速度,稀疏矩阵向量乘部分性能提升30%以上,向量数乘和向量内积部分性能提升80%以上,整体计算性能提升接近50%。

上文结合图1至图6,详细描述了根据本发明实施例提供的基于GPU的GRAPES系统优化方法方法。下面结合图7,详细描述本发明实施例提供的基于GPU的GRAPES系统优化系统。

如图7所示,本发明实施例还提供一种基于GPU的GRAPES系统优化系统,包括:数据初始化模块701、GPU移植模块702、GPU计算模块703和CPU计算模块704。

数据初始化模块701,用于进行数据格式转换以及存储空间开辟的数据初始化;

GPU移植模块702,用于利用CUDA将所述广义共轭余差法的计算流程进行GPU移植;

GPU计算模块703,对于计算流程中能进行并行处理的,在GPU中采用多线程并行处理,计算过程中利用显存进行通信,且中间变量均保存在GPU上;

CPU计算模块704,对于不能并行处理的,将前置数据拷回CPU端进行计算,再将计算结果拷回GPU端。

可选地,所述数据初始化模块具体用于:将待求解模型Ax=b中的系数矩阵A由原始的三维格式转换为二维格式,其中,初始数据包括系数矩阵A、初始解向量x

所述将求解模型Ax=b中的系数矩阵A由原始的三维格式转换为二维格式,包括:边界条件使用循环和轴对称方式处理,经度方向为循环方式,纬度方向为轴对称方式,垂直方向不处理。

可选地,在一个实施例中,所述GPU模块采用多线程并行处理时,在进行收敛情况判断时将需要判断的数据传输给CPU,在数据传输时为数据交换频率大于预设频率的变量分配页锁定内存。

可选地,GPU计算模块进行优化还包括GPU访存优化,具体包括:利用CSR格式存储矩阵数据,利用CUDA进行线程块间及线程块内两级并行访问。

该实施例中,已将系数矩阵A转化为二维矩阵保存,从而可以更好地实现GPU访存优化。GPU在访问数据时,一个线程束(warp)中的线程,如果访问的是不连续的内存空间,那么每一个线程都会发出一次访存请求。而如果线程束中的线程访问的内存空间是连续的,那么多次访问请求可以合并为一次访问请求。经过访存合并方式进行优化之后,可以提高计算过程中的数据访问速度。

可选地,GPU计算模块进行优化还包括GPU存储器优化,具体包括:对于只需要一个线程块中的线程访问的数据,在线程块内部利用共享存储器进行保存。

在GPU计算的过程中,存在一部分数据只需要一个线程块中的线程访问。对于这一部分数据,可以在线程块内部利用共享存储器进行保存。共享存储器的访问延迟比全局存储器更低,在计算过程中线程块内部的线程只需要访问共享存储器内部的数据,而不需要去访问全局存储器,从而进一步提高访存的速度。

可选地,数据预处理模块,数据预处理模块具体用于:通过构建预条件子对所述系数矩阵A进行分解预处理。该实施例中,使用预处理技术对算法进行优化,避免由于迭代法依赖系数矩阵谱分布而造成可能存在收敛速度慢甚至不收敛的情况。主要通过构建预条件子将原方程Ax=b转化为M

具体地,所述通过构建预条件子对所述系数矩阵A进行分解预处理,包括:通过ILU预处理操作将原始系数矩阵A分解为一个下三角矩阵L和上三角矩阵U,分解出来的三角矩阵直接保存在待分解的矩阵空间内。

ILU预处理操作将原始系数矩阵近似分解为一个下三角矩阵L和上三角矩阵U。为了避免开辟额外的空间存储中间变量,分解出来的三角矩阵直接保存在待分解的矩阵空间内。数据预处理操作可以大幅减少迭代次数,有效提升方程求解效率。

本发明实施例还提供一种计算机可读存储介质,包括指令,当所述指令在计算机上运行时,使所述计算机执行上述实施例所述的基于GPU的GRAPES系统优化方法。

本发明实施例还提供一种计算机设备,包括存储器、CPU、GPU及存储在所述存储器上的并可在所述CPU和GPU上运行的计算机程序,所述CPU和GPU执行所述程序时实现上述实施例所述的基于GPU的GRAPES系统优化方法。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。

作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号