首页 / 专利库 / 电脑图像 / 网格模型 / 基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法

基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法

阅读:180发布:2024-01-01

专利汇可以提供基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法,包括:根据计算 节点 数目和节点内可用CPU核数确定可调用的MPI 进程 数和OpenMP线程数;每个进程读入已有子稀疏矩阵A、子初始向量x0、 块 向量b和最大计算公差Tolerance;每个进程开启多线程编译指令;在各个进程上进行预条件共轭梯度法的循环计算;若计算的误差小于允许值,循环结束,否则继续循环计算;归约各个进程的计算结果,输出问题的解;并行计算时,首先MPI进程启动,对问题进行多进程分解,开始节点间的并行,每个MPI进程被分配到一个计算节点上,进程间使用消息传递交换信息;然后在每个MPI进程中,使用OpenMP制导指令创建一组线程,并分配到计算节点的不同处理器上并行执行。,下面是基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法专利的具体信息内容。

1.一种基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法,其特征在于,包括以下步骤:
(1)计算准备
a)启动MPI多进程计算,其中进程数小于或等于可用计算节点数目;
b)每个进程读入子稀疏矩阵A、子初始向量x0、向量b和最大计算公差Tolerance,子稀疏矩阵A、子初始向量x0和块向量b是通过网格划分软件划分问题的计算域后生成;
(2)开始预条件共轭梯度法的MPI+OpenMP并行的循环计算
1)根据初始值x0,计算r=b-Ax0;
2)每个进程开启OpenMP多线程编译指令,其中线程数小于或等于该线程所处计算节点可用CPU核数目;
3)开始fori=1,2,...循环;
-1
4)#pragma omp for指令多线程并行计算z=M r;
T
5)#pragma omp for指令多线程并行计算ρi-1=rz;
6)#pragma omp single指令单线程进行MPI通信,MPI_Allreduce函数归约各计算节点的ρi-1;
7)if i=1β=0elseβ=ρi-1/ρi-2;
8)#pragma omp for指令多线程并行计算p=z+βp;
9)#pragma omp for指令多线程并行计算q=Ap;
T
10)#pragma omp for指令多线程并行计算α=ρi-1/pq;
11)#pragma omp reduction指令多线程并行计算x=x+αp;
12)#pragma omp reduction指令多线程并行计算r=r-αq;
13)#pragmaompsingle指令单线程进行MPI通信,MPI_Allreduce归约各计算节点r的范数;
14)if||r||<Tolerance,循环迭代终止;else goto3);
15)end/*结束for循环和OpenMP多线程计算*/;
(3)各计算节点的计算结果x归约后得到最终计算结果。
并行计算时,首先MPI进程启动,对问题进行多进程分解,开始节点间的并行,每个MPI进程被分配到一个计算节点上,进程间使用消息传递交换信息;然后在每个MPI进程中,使用OpenMP制导指令创建一组线程,并分配到计算节点的不同处理器上并行执行。
2.如权利要求1所述的基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法,其特征在于:所述网格划分软件可为Metis或ParMetis。
3.如权利要求1所述的基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法,其特征在于:开启MPI多进程计算和OpenMP多线程计算后,能够针对多核SMP集群多核、多节点的硬件资源特性,实现计算节点间和计算节点内的两级并行。
4.如权利要求3所述的基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法,其特征在于:并行计算执行过程中,计算节点间(即进程间)通过MPI消息传递方式通信数据,在计算节点内(即进程内)通过OpenMP线程组的共享内存方式实现数据共享。
5.如权利要求1所述的基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法,其特征在于:每一子稀疏矩阵的存储格式为CSR。
6.如权利要求1所述的基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法,其特征在于:并行计算执行过程中,可以访问的存储空间分为三级存储空间,进程控制的处理器全局共享第一级存储空间,线程组共享第二级存储空间,线程私有第三级存储空间。

说明书全文

基于MPI和OpenMP混合编程模型并行计算提高计算速度的

方法

技术领域

[0001] 本发明涉及一种并行计算技术,具体地说,涉及一种并行计算提高计算速度的方法。

背景技术

[0002] 迭代法是目前求解大型稀疏线性方程组的主流方法,迭代法中的预条件共轭梯度法是通过预处理技术减少共轭梯度法的迭代次数,并能加速收敛的一种方法,在工程和科学计算中已有广泛的应用。共轭梯度法是求解特定线性系统的数值解的方法,其中的系数矩阵为对称和正定的实数阵。随着科学与工程问题的规模和复杂程度的提高,串行共轭梯度法已经很难满足对稀疏线性系统的求解规模和速度的要求。
[0003] 由于串行计算本身存在的瓶颈,当计算量相对较大,计算机本身的性能将大大制约其进行演算的效率。现有技术中采用串行方法计算共轭梯度法,仅在处理稀疏矩阵向量乘时才启用MPI,通过在各节点上计算分稀疏矩阵与分块向量的乘积实现并行计算。但共轭梯度法除了稀疏矩阵向量乘,还有多个向量与向量、标量与向量的乘积和求和,以及线性方程组求解等计算步骤,这些计算仍然使用串行方法计算,不能最大限度地将算法并行优化。对于分布式和共享式存储结构混合的SMP集群系统,难以充分利用计算资源,提升其计算速度。

发明内容

[0004] 本发明的目的在于提供一种基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法,通过利用集群以及多核平台的优势,提升共轭梯度法的计算速度,满足对稀疏线性系统的求解规模和速度的要求。
[0005] 为了实现上述目的,本发明所采用的技术方案如下:
[0006] 一种基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法,包括以下步骤:
[0007] (1)计算准备、
[0008] a)启动MPI多进程计算,其中进程数小于或等于可用计算节点数目;
[0009] b)每个进程读入子稀疏矩阵A、子初始向量x0、块向量b和最大计算公差Tolerance,子稀疏矩阵A、子初始向量x0和块向量b是通过网格划分软件划分问题的计算域后生成;
[0010] (2)开始预条件共轭梯度法的MPI+OpenMP并行的循环计算
[0011] 1)根据初始值x0,计算r=b-Ax0;
[0012] 2)每个进程开启OpenMP多线程编译指令,其中线程数小于或等于该线程所处计算节点可用CPU核数目;
[0013] 3)开始fori=1,2,...循环;
[0014] 4)#pragma omp for指令多线程并行计算z=M-1r;
[0015] 5)#pragma omp for指令多线程并行计算ρi-1=rTz;
[0016] 6)#pragma omp single指令单线程进行MPI通信,MPI_Allreduce函数归约各计算节点的ρi-1;
[0017] 7)if i=1β=0elseβ=ρi-1/ρi-2;
[0018] 8)#pragma omp for指令多线程并行计算p=z+βp;
[0019] 9)#pragma omp for指令多线程并行计算q=Ap;
[0020] 10)#pragma omp for指令多线程并行计算α=ρi-1/pTq;
[0021] 11)#pragma omp reduction指令多线程并行计算x=x+αp;
[0022] 12)#pragma omp reduction指令多线程并行计算r=r-αq;
[0023] 13)#pragmaompsingle指令单线程进行MPI通信,MPI_Allreduce归约各计算节点r的范数;
[0024] 14)if||r||<Tolerance,循环迭代终止;else goto3);
[0025] 15)end/*结束for循环和OpenMP多线程计算*/;
[0026] (3)各计算节点的计算结果x归约后得到最终计算结果。
[0027] 并行计算时,首先MPI进程启动,对问题进行多进程分解,开始节点间的并行,每个MPI进程被分配到一个计算节点上,进程间使用消息传递交换信息;然后在每个MPI进程中,使用OpenMP制导指令创建一组线程,并分配到计算节点的不同处理器上并行执行。
[0028] 进一步,所述网格划分软件可为Metis或ParMetis。
[0029] 进一步,开启MPI多进程计算和OpenMP多线程计算后,能够针对多核SMP集群多核、多节点的硬件资源特性,实现计算节点间和计算节点内的两级并行。
[0030] 进一步,并行计算执行过程中,计算节点间(即进程间)通过MPI消息传递方式通信数据,在计算节点内(即进程内)通过OpenMP线程组的共享内存方式实现数据共享。
[0031] 进一步,每一子稀疏矩阵的存储格式为CSR。
[0032] 进一步,并行计算执行过程中,可以访问的存储空间分为三级存储空间,进程控制的处理器全局共享第一级存储空间,线程组共享第二级存储空间,线程私有第三级存储空间。
[0033] 与现有技术相比,本发明融合了消息传递模型和多线程并行编程模型的优点,更好地解决每个计算节点内各个处理器间的交互,充分利用计算资源,提高预条件共轭梯度法的计算速度。附图说明
[0034] 图1为本发明的编程模式示意图;
[0035] 图2为本发明的流程步骤示意图;
[0036] 图3为本发明的稀疏矩阵向量乘的示意图。

具体实施方式

[0037] 下面结合附图和具体实施例对本发明基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法作进一步说明。
[0038] 高性能计算机(HPC)按其存储结构可分为共享存储结构和分布存储结构两大类。分布式存储系统没有一个统一的内存空间,其中的一个或多个处理器和它们的内存空间构成一个独立的系统,多个系统由一个操作系统控制,可以独立运行。每个系统叫作节点,这些节点使用网络接口相互连接进行通信。共享式存储系统多为对称式共享存储体系结构,又叫对称多处理器结构(Symmetric Multi-Processing,SMP)。服务器中多个CPU对称工作,无主次或从属关系。各CPU共享相同的物理内存,每个CPU访问内存中的任何地址所需时间是相同的,因此SMP也被称为一致存储器访问结构(UMA,Uniform Memory Access)。SMP集群系统可以看成是这两种内存结构的集合,它由拥有多个处理器的SMP节点和连接各节点间的高速网络组成一套多级体系结构。SMP集群即有分布式节点系统的良好扩展性,也支持共享式存储系统的数据共享。因此当前以SMP集群为代表的高性能计算机发展迅速,成为高性能计算机领域的主流。
[0039] 不同存储结构的高性能计算机有相应的并行编程模型,其中一种是基于消息传递模型,一般应用于分布式存储结构,也可用于共享式存储结构。通过将计算任务或数据按照进程数划分,各个并行执行的任务之间通过传递消息来交换信息、协调步伐、控制执行。其中,MPI(message passing interface)是为开发基于消息传递模型的并行程序而制定的工业标准。另一种是基于共享存储的多线程并行编程模型。OpenMP是其中的共享存储并行编程的典型方法,能提供描述并行区域的编译制导语句并隐藏有关并行线程创建和管理的细节,是一种能显式指导多线程、共享内存并行的应用程序编程接口(API)。OpenMP标准化了细粒度的并行性,同时也支持粗粒度的并行性。
[0040] 本发明采用MPI和OpenMP混合编程模型,将分布式存储编程模型MPl、共享存储编程模型OpenMP相结合,充分利用SMP集群层次存储结构的特点。本发明的MPI和OpenMP混合编程模型具有的层次结构为上层的MPI表示节点间的并行,下层的OpenMP表示节点内的并行。本发明的MPI和OpenMP混合编程模型基于如下的理论分配模型:首先对问题进行MPI分解,将任务划分成通信不密集的几个部分,每个部分分配到一个SMP节点(即一个进程)上,节点间通过消息传递进行通信;然后添加OpenMP编译制导语句将每个节点上的部分再次分解,并分配到SMP的不同处理器上由多个线程并行执行,节点内通过共享存储进行通信。MPI和OpenMP混合编程模型提供了节点间和节点内的两级并行机制,结合了进程级的粗粒度并行)和循环级的细粒度并行。
[0041] 本发明公开了一种基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法,包括以下步骤:
[0042] 根据计算节点数目和节点内可用CPU核数确定可调用的MPI进程数和OpenMP线程数;每个进程读入已有子稀疏矩阵A、子初始向量x0和块向量b和最大计算公差Tolerance;每个进程开启多线程编译指令;在各个进程上进行预条件共轭梯度法的循环计算;若计算的误差小于允许值,循环结束,否则继续循环计算;归约各个进程的计算结果,输出问题的解;并行计算时,首先MPI进程启动,对问题进行多进程分解,开始节点间的并行,每个MPI进程被分配到一个计算节点上,进程间使用消息传递交换信息;然后在每个MPI进程中,使用OpenMP制导指令创建一组线程,并分配到计算节点的不同处理器上并行执行。
[0043] 开启多线程时,每一进程可开启的线程数小于或等于该进程的可用处理器数。每一子稀疏矩阵的存储格式为CSR(Compressed Sparse Row)。其中,程序在预条件共轭梯度算法循环开始前动态确定可用线程数,开启OpenMP多线程,在循环中根据需要调用不同OpenMP多线程指令,如for循环指令、reduction指令、single指令等。并行计算执行过程中,可以访问的存储空间分为三级存储空间:进程控制的多核微处理器全局共享第一级存储空间,线程组共享第二级存储空间,线程私有第三级存储空间。线程组共享的第二级存储空间在共轭梯度循环前创建,将当前预条件共轭梯度算法函数内的变量空间作为线程组的共享的第二级存储空间,线程组内的每个线程均能访问这一空间,但其它线程组不能访问。同时,每个线程会被分配一个只有线程才能访问的私有的第三级存储空间,该存储空间具有所属线程相同的生命周期。
[0044] 实施例一
[0045] 本实施例采用基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法求解大规模线性方程组。预条件共轭梯度法是求解对称正定稀疏矩阵线性方程组的迭代法,在工程和科学计算中有广泛的应用,其算法如下所示:
[0046] 取x(0)∈Rn,计算r(0)=b-Ax(0),令p(0)=r(0)
[0047] 对k=0,1,2,...,计算
[0048]
[0049] x(k+1)=x(k+1)+αkp(k)
[0050] r(k+1)=b-Ax(k+1)=r(k)-αkAP(k)
[0051] 若 则输出x‘=x(k+1),停止计算。否则,
[0052]
[0053] p(k-1)=r(k+1)+βkp(k)
[0054] 其中,在大型工程和计算问题中,x是需求解的向量,b是已知向量,A为系数矩阵,其通常为大型稀疏矩阵。稀疏矩阵是指非零值占矩阵极小比例的矩阵(通常小于1%),绝大部分值为零。稀疏矩阵存储方法是Compressed Sparse Row(CSR)格式,其使用3个数组表示一个维数为m×n,含有nnz个非零元的稀疏矩阵:数组val和数组colval分别保存每个非零元的取值和列值,数组rowptr保存每行第一个非零元在val或colval中的索引位置。本发明采用MPI和OpenMP混合编程模型,让预条件共轭梯度法在多核多节点的SMP集群系统上能够更好地利用SMP集群的特性,实现计算速度的提升。
[0055] 请参阅图2,采用基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法求解大规模线性方程组时,包括:
[0056] 启动MPI多进程计算,其中进程数小于或等于可用计算节点数目。
[0057] 每个进程读入已有子稀疏矩阵A、子初始向量x0、块向量b和最大计算公差Tolerance,子稀疏矩阵A、子初始向量x0和块向量b是通过网格划分软件Metis或ParMetis划分问题的计算域为子计算域后生成。当然,本发明并不限于此,在其他实施例中,所述网格划分软件也可为其他。
[0058] 每个进程初始化预条件共轭梯度法函数的参数r(0)和p(0)。
[0059] 每个进程开启OpenMP多线程编译指令,其中线程数小于或等于该线程所处计算节点可用CPU核数目。
[0060] 开始预条件共轭梯度法的MPI+OpenMP并行的循环计算。
[0061] 若计算的误差小于允许值,循环结束,否则继续循环计算。
[0062] MPI_Allreduce函数归约各个进程的计算结果,得到最终的线性方程组的解x,输出线性方程组的解x。
[0063] 并行计算时,首先MPI进程启动,对问题进行多进程分解,开始节点间的并行,每个MPI进程被分配到一个计算节点上,进程间使用消息传递交换信息;然后在每个MPI进程中,使用OpenMP制导指令创建一组线程,并分配到计算节点的不同处理器上并行执行。程序在循环开始前动态确定可用线程数,开启OpenMP多线程,在循环中根据需要调用不同OpenMP多线程指令。
[0064] 本实施例中预条件共轭梯度法伪代码如下所示:
[0065] 根据初始值x(0),计算r(0)=b-Ax(0)
[0066] for i=1,2,...
[0067] solve Mz(i-1)=r(i-1)
[0068]
[0069] if i=1(1) (0)
[0070] p =z
[0071] else
[0072] βi-1=ρi-1/ρi-2(i) (i-1) (i-1)
[0073] p =z +βi-1p
[0074] endif(i) (i)
[0075] q =Ap(i)T (i)
[0076] αi=ρi-1/p q(i) (i-1) (i)
[0077] x =x +αip(i) (i-1) (i)
[0078] r =r -αiq
[0079] 直到收敛,循环迭代终止
[0080] end-1
[0081] 其中M 是预条件子,是矩阵A的逆。对于矩阵A,如果存在矩阵B使得AB+BA=1,-1其中I为单位矩阵。则称B为A的逆矩阵,记为A 。
[0082] 请参阅图1,本发明的MPI和OpenMP混合编程模型的编程模式如图所示,首先MPI进程启动,对问题进行多进程分解,开始节点间的并行,每个MPI进程被分配到一个计算节点上,进程间使用消息传递交换信息;然后在每个MPI进程中,使用OpenMP制导指令创建一组线程,并分配到计算节点的不同处理器上并行执行。程序在预条件共轭梯度算法循环开始前动态确定可用线程数,开启OpenMP多线程,在循环中根据需要调用不同OpenMP多线程指令,如for循环指令、reduction指令、single指令等。
[0083] 本发明在并行计算执行过程中,可以访问的存储空间分为三级存储空间:进程控制的多核微处理器全局共享第一级存储空间,线程组共享第二级存储空间,线程私有第三级存储空间。线程组共享的第二级存储空间在共轭梯度循环前创建,将当前预条件共轭梯度算法函数内的变量空间作为线程组的共享的第二级存储空间,线程组内的每个线程均能访问这一空间,但其它线程组不能访问。同时,每个线程会被分配一个只有线程才能访问的私有的第三级存储空间,该存储空间具有所属线程相同的生命周期。
[0084] 请参阅图1、图2和图3,本实施例的具体步骤如下:
[0085] (1)计算准备
[0086] a)启动MPI多进程计算,其中进程数小于或等于可用计算节点数目。
[0087] b)每个进程读入子稀疏矩阵A、子初始向量x0、块向量b和最大计算公差Tolerance,子稀疏矩阵A、子初始向量x0和块向量b是通过网格划分软件Metis或ParMetis划分问题的计算域为子计算域后生成。
[0088] (2)开始预条件共轭梯度法的MPI+OpenMP并行的循环计算
[0089] 1)根据初始值x0,计算r=b-Ax0。
[0090] 2)每个进程开启OpenMP多线程编译指令,其中线程数小于或等于该线程所处计算节点可用CPU核数目。
[0091] 3)开始fori=1,2,...循环。
[0092] 4)#pragma omp for指令多线程并行计算z=M-1r。
[0093] 5)#pragma omp for指令多线程并行计算ρi-1=rTz
[0094] 6)#pragma omp single指令单线程进行MPI通信,MPI_Allreduce函数归约各计算节点的ρi-1
[0095] 7)if i=1β=0elseβ=ρi-1/ρi-2。
[0096] 8)#pragma omp for指令多线程并行计算p=z+βp。
[0097] 9)#pragma omp for指令多线程并行计算q=Ap。
[0098] 10)#pragma omp for指令多线程并行计算α=ρi-1/pTq
[0099] 11)#pragma omp reduction指令多线程并行计算x=x+αp。
[0100] 12)#pragma omp reduction指令多线程并行计算r=r-αq。
[0101] 13)#pragma omp single指令单线程进行MPI_Allreduce归约各计算节点r的范数。
[0102] 14)if||r||<Tolerance,循环迭代终止;else goto3)。
[0103] 15)end/*结束for循环和OpenMP多线程计算*/。
[0104] (3)各计算节点的计算结果x归约后得到最终计算结果,得到最终的线性方程组的解x,输出线性方程组的解x。
[0105] 本发明通过消息传递模型处理多进程间的粗粒度通信,而多线程并行编程模型能提供轻量级线程,更好地解决每个计算节点内各个处理器间的交互,充分利用基于分布式存储的消息传递模型和基于共享存储的多线程并行编程模型的优点。
[0106] 本发明的MPI+OpenMP混合并行模型能通过共享内存访问代替节点间的消息传递,降低数据通信的开销。
[0107] 由于共享内存的数据读取效率要高于不同内存间的数据传递,因此在同样数目处理器情况下,MPI+OpenMP混合并行模型的数据读取效率要高于MPI模型的效率,本发明采用的MPI+OpenMP混合并行模型能提高数据读取效率。
[0108] OpenMP并行模型不能扩展超过计算机内部处理器数目,MPI模型在进程个数增加时,会因消息传递开销的增加降低并行性能,而本发明的MPI+OpenMP混合并行模型能兼顾两者的优点,在同样数目处理器中的通信开销较低,并行性能良好,有潜在的可扩展性,本发明采用的MPI+OpenMP混合并行模型能提高可扩展性。
[0109] 本发明融合了消息传递模型和多线程并行编程模型的优点,能在SMP集群上减少计算的挂钟时间,提高预条件共轭梯度法的计算速度。
[0110] 上述说明是针对本发明较佳可行实施例的详细说明,但实施例并非用以限定本发明的专利申请范围,凡本发明所揭示的技术精神下所完成的同等变化或修饰变更,均应属于本发明所涵盖专利范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈