首页> 中国专利> 基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法

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

摘要

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

著录项

  • 公开/公告号CN104461466A

    专利类型发明专利

  • 公开/公告日2015-03-25

    原文格式PDF

  • 申请/专利号CN201310442075.0

  • 发明设计人 罗海飙;王婷;陈春艳;廖俊豪;

    申请日2013-09-25

  • 分类号G06F9/38(20060101);

  • 代理机构44100 广州新诺专利商标事务所有限公司;

  • 代理人肖云

  • 地址 511458 广东省广州市南沙区海滨路1121号A栋801室

  • 入库时间 2023-12-18 08:05:40

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-09-21

    授权

    授权

  • 2015-04-22

    实质审查的生效 IPC(主分类):G06F9/38 申请日:20130925

    实质审查的生效

  • 2015-03-25

    公开

    公开

说明书

技术领域

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

背景技术

迭代法是目前求解大型稀疏线性方程组的主流方法,迭代法中的预条件共轭梯度法是通 过预处理技术减少共轭梯度法的迭代次数,并能加速收敛的一种方法,在工程和科学计算中 已有广泛的应用。共轭梯度法是求解特定线性系统的数值解的方法,其中的系数矩阵为对称 和正定的实数阵。随着科学与工程问题的规模和复杂程度的提高,串行共轭梯度法已经很难 满足对稀疏线性系统的求解规模和速度的要求。

由于串行计算本身存在的瓶颈,当计算量相对较大,计算机本身的性能将大大制约其进 行演算的效率。现有技术中采用串行方法计算共轭梯度法,仅在处理稀疏矩阵向量乘时才启 用MPI,通过在各节点上计算分块稀疏矩阵与分块向量的乘积实现并行计算。但共轭梯度法 除了稀疏矩阵向量乘,还有多个向量与向量、标量与向量的乘积和求和,以及线性方程组求 解等计算步骤,这些计算仍然使用串行方法计算,不能最大限度地将算法并行优化。对于分 布式和共享式存储结构混合的SMP集群系统,难以充分利用计算资源,提升其计算速度。

发明内容

本发明的目的在于提供一种基于MPI和OpenMP混合编程模型并行计算提高计算速度的 方法,通过利用集群以及多核平台的优势,提升共轭梯度法的计算速度,满足对稀疏线性系 统的求解规模和速度的要求。

为了实现上述目的,本发明所采用的技术方案如下:

一种基于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,...循环;

4)#pragma omp for指令多线程并行计算z=M-1r;

5)#pragma omp for指令多线程并行计算ρi-1=rTz;

6)#pragma omp single指令单线程进行MPI通信,MPI_Allreduce函数归约各计 算节点的ρi-1

7)if i=1β=0elseβ=ρi-1i-2

8)#pragma omp for指令多线程并行计算p=z+βp;

9)#pragma omp for指令多线程并行计算q=Ap;

10)#pragma omp for指令多线程并行计算α=ρi-1/pTq;

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制导指令创建一组线程,并分配到计算节点的不同处理器上并行执行。

进一步,所述网格划分软件可为Metis或ParMetis。

进一步,开启MPI多进程计算和OpenMP多线程计算后,能够针对多核SMP集群多核、 多节点的硬件资源特性,实现计算节点间和计算节点内的两级并行。

进一步,并行计算执行过程中,计算节点间(即进程间)通过MPI消息传递方式通信数 据,在计算节点内(即进程内)通过OpenMP线程组的共享内存方式实现数据共享。

进一步,每一子稀疏矩阵的存储格式为CSR。

进一步,并行计算执行过程中,可以访问的存储空间分为三级存储空间,进程控制的处 理器全局共享第一级存储空间,线程组共享第二级存储空间,线程私有第三级存储空间。

与现有技术相比,本发明融合了消息传递模型和多线程并行编程模型的优点,更好地解 决每个计算节点内各个处理器间的交互,充分利用计算资源,提高预条件共轭梯度法的计算 速度。

附图说明

图1为本发明的编程模式示意图;

图2为本发明的流程步骤示意图;

图3为本发明的稀疏矩阵向量乘的示意图。

具体实施方式

下面结合附图和具体实施例对本发明基于MPI和OpenMP混合编程模型并行计算提高计 算速度的方法作进一步说明。

高性能计算机(HPC)按其存储结构可分为共享存储结构和分布存储结构两大类。分布 式存储系统没有一个统一的内存空间,其中的一个或多个处理器和它们的内存空间构成一个 独立的系统,多个系统由一个操作系统控制,可以独立运行。每个系统叫作节点,这些节点 使用网络接口相互连接进行通信。共享式存储系统多为对称式共享存储体系结构,又叫对称 多处理器结构(Symmetric Multi-Processing,SMP)。服务器中多个CPU对称工作,无主次或从 属关系。各CPU共享相同的物理内存,每个CPU访问内存中的任何地址所需时间是相同的, 因此SMP也被称为一致存储器访问结构(UMA,Uniform Memory Access)。SMP集群系统可 以看成是这两种内存结构的集合,它由拥有多个处理器的SMP节点和连接各节点间的高速网 络组成一套多级体系结构。SMP集群即有分布式节点系统的良好扩展性,也支持共享式存储 系统的数据共享。因此当前以SMP集群为代表的高性能计算机发展迅速,成为高性能计算机 领域的主流。

不同存储结构的高性能计算机有相应的并行编程模型,其中一种是基于消息传递模型, 一般应用于分布式存储结构,也可用于共享式存储结构。通过将计算任务或数据按照进程数 划分,各个并行执行的任务之间通过传递消息来交换信息、协调步伐、控制执行。其中,MPI (message passing interface)是为开发基于消息传递模型的并行程序而制定的工业标准。另一 种是基于共享存储的多线程并行编程模型。OpenMP是其中的共享存储并行编程的典型方法, 能提供描述并行区域的编译制导语句并隐藏有关并行线程创建和管理的细节,是一种能显式 指导多线程、共享内存并行的应用程序编程接口(API)。OpenMP标准化了细粒度的并行性, 同时也支持粗粒度的并行性。

本发明采用MPI和OpenMP混合编程模型,将分布式存储编程模型MPl、共享存储编程 模型OpenMP相结合,充分利用SMP集群层次存储结构的特点。本发明的MPI和OpenMP 混合编程模型具有的层次结构为上层的MPI表示节点间的并行,下层的OpenMP表示节点内 的并行。本发明的MPI和OpenMP混合编程模型基于如下的理论分配模型:首先对问题进行 MPI分解,将任务划分成通信不密集的几个部分,每个部分分配到一个SMP节点(即一个进 程)上,节点间通过消息传递进行通信;然后添加OpenMP编译制导语句将每个节点上的部分 再次分解,并分配到SMP的不同处理器上由多个线程并行执行,节点内通过共享存储进行通 信。MPI和OpenMP混合编程模型提供了节点间和节点内的两级并行机制,结合了进程级的 粗粒度并行)和循环级的细粒度并行。

本发明公开了一种基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法,包 括以下步骤:

根据计算节点数目和节点内可用CPU核数确定可调用的MPI进程数和OpenMP线程数;每 个进程读入已有子稀疏矩阵A、子初始向量x0和块向量b和最大计算公差Tolerance;每个进 程开启多线程编译指令;在各个进程上进行预条件共轭梯度法的循环计算;若计算的误差小 于允许值,循环结束,否则继续循环计算;归约各个进程的计算结果,输出问题的解;并行 计算时,首先MPI进程启动,对问题进行多进程分解,开始节点间的并行,每个MPI进程被 分配到一个计算节点上,进程间使用消息传递交换信息;然后在每个MPI进程中,使用OpenMP 制导指令创建一组线程,并分配到计算节点的不同处理器上并行执行。

开启多线程时,每一进程可开启的线程数小于或等于该进程的可用处理器数。每一子稀 疏矩阵的存储格式为CSR(Compressed Sparse Row)。其中,程序在预条件共轭梯度算法循环 开始前动态确定可用线程数,开启OpenMP多线程,在循环中根据需要调用不同OpenMP多线 程指令,如for循环指令、reduction指令、single指令等。并行计算执行过程中,可以访 问的存储空间分为三级存储空间:进程控制的多核微处理器全局共享第一级存储空间,线程 组共享第二级存储空间,线程私有第三级存储空间。线程组共享的第二级存储空间在共轭梯 度循环前创建,将当前预条件共轭梯度算法函数内的变量空间作为线程组的共享的第二级存 储空间,线程组内的每个线程均能访问这一空间,但其它线程组不能访问。同时,每个线程 会被分配一个只有线程才能访问的私有的第三级存储空间,该存储空间具有所属线程相同的 生命周期。

实施例一

本实施例采用基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法求解大规 模线性方程组。预条件共轭梯度法是求解对称正定稀疏矩阵线性方程组的迭代法,在工程和 科学计算中有广泛的应用,其算法如下所示:

取x(0)∈Rn,计算r(0)=b-Ax(0),令p(0)=r(0)

对k=0,1,2,...,计算

αk=(r(k),r(k))(Ap(k),p(k))

x(k+1)=x(k+1)kp(k)

r(k+1)=b-Ax(k+1)=r(k)kAP(k)

若则输出x‘=x(k+1),停止计算。否则,

βk=(r(k+1),r(k+1))(r(k+1),r(k+1))

p(k-1)=r(k+1)kp(k)

其中,在大型工程和计算问题中,x是需求解的向量,b是已知向量,A为系数矩阵,其 通常为大型稀疏矩阵。稀疏矩阵是指非零值占矩阵极小比例的矩阵(通常小于1%),绝大部 分值为零。稀疏矩阵存储方法是Compressed Sparse Row(CSR)格式,其使用3个数组表示一 个维数为m×n,含有nnz个非零元的稀疏矩阵:数组val和数组colval分别保存每个非零元 的取值和列值,数组rowptr保存每行第一个非零元在val或colval中的索引位置。本发明采 用MPI和OpenMP混合编程模型,让预条件共轭梯度法在多核多节点的SMP集群系统上能 够更好地利用SMP集群的特性,实现计算速度的提升。

请参阅图2,采用基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法求解 大规模线性方程组时,包括:

启动MPI多进程计算,其中进程数小于或等于可用计算节点数目。

每个进程读入已有子稀疏矩阵A、子初始向量x0、块向量b和最大计算公差Tolerance, 子稀疏矩阵A、子初始向量x0和块向量b是通过网格划分软件Metis或ParMetis划分问题的 计算域为子计算域后生成。当然,本发明并不限于此,在其他实施例中,所述网格划分软件 也可为其他。

每个进程初始化预条件共轭梯度法函数的参数r(0)和p(0)

每个进程开启OpenMP多线程编译指令,其中线程数小于或等于该线程所处计算节点可 用CPU核数目。

开始预条件共轭梯度法的MPI+OpenMP并行的循环计算。

若计算的误差小于允许值,循环结束,否则继续循环计算。

MPI_Allreduce函数归约各个进程的计算结果,得到最终的线性方程组的解x,输出线性 方程组的解x。

并行计算时,首先MPI进程启动,对问题进行多进程分解,开始节点间的并行,每个 MPI进程被分配到一个计算节点上,进程间使用消息传递交换信息;然后在每个MPI进程中, 使用OpenMP制导指令创建一组线程,并分配到计算节点的不同处理器上并行执行。程序在 循环开始前动态确定可用线程数,开启OpenMP多线程,在循环中根据需要调用不同OpenMP 多线程指令。

本实施例中预条件共轭梯度法伪代码如下所示:

根据初始值x(0),计算r(0)=b-Ax(0)

for i=1,2,...

solve Mz(i-1)=r(i-1)

ρi-1=r(i-1)Tz(i-1)

if i=1

p(1)=z(0)

else

βi-1i-1i-2

p(i)=z(i-1)i-1p(i-1)

endif

q(i)=Ap(i)

αii-1/p(i)Tq(i)

x(i)=x(i-1)ip(i)

r(i)=r(i-1)iq(i)

直到收敛,循环迭代终止

end

其中M-1是预条件子,是矩阵A的逆。对于矩阵A,如果存在矩阵B使得AB+BA=1, 其中I为单位矩阵。则称B为A的逆矩阵,记为A-1

请参阅图1,本发明的MPI和OpenMP混合编程模型的编程模式如图所示,首先MPI进 程启动,对问题进行多进程分解,开始节点间的并行,每个MPI进程被分配到一个计算节点 上,进程间使用消息传递交换信息;然后在每个MPI进程中,使用OpenMP制导指令创建一 组线程,并分配到计算节点的不同处理器上并行执行。程序在预条件共轭梯度算法循环开始 前动态确定可用线程数,开启OpenMP多线程,在循环中根据需要调用不同OpenMP多线程 指令,如for循环指令、reduction指令、single指令等。

本发明在并行计算执行过程中,可以访问的存储空间分为三级存储空间:进程控制的多 核微处理器全局共享第一级存储空间,线程组共享第二级存储空间,线程私有第三级存储空 间。线程组共享的第二级存储空间在共轭梯度循环前创建,将当前预条件共轭梯度算法函数 内的变量空间作为线程组的共享的第二级存储空间,线程组内的每个线程均能访问这一空间, 但其它线程组不能访问。同时,每个线程会被分配一个只有线程才能访问的私有的第三级存 储空间,该存储空间具有所属线程相同的生命周期。

请参阅图1、图2和图3,本实施例的具体步骤如下:

(1)计算准备

a)启动MPI多进程计算,其中进程数小于或等于可用计算节点数目。

b)每个进程读入子稀疏矩阵A、子初始向量x0、块向量b和最大计算公差Tolerance, 子稀疏矩阵A、子初始向量x0和块向量b是通过网格划分软件Metis或ParMetis划分问题的 计算域为子计算域后生成。

(2)开始预条件共轭梯度法的MPI+OpenMP并行的循环计算

1)根据初始值x0,计算r=b-Ax0

2)每个进程开启OpenMP多线程编译指令,其中线程数小于或等于该线程所处计算节 点可用CPU核数目。

3)开始fori=1,2,...循环。

4)#pragma omp for指令多线程并行计算z=M-1r。

5)#pragma omp for指令多线程并行计算ρi-1=rTz

6)#pragma omp single指令单线程进行MPI通信,MPI_Allreduce函数归约各计 算节点的ρi-1

7)if i=1β=0elseβ=ρi-1i-2

8)#pragma omp for指令多线程并行计算p=z+βp。

9)#pragma omp for指令多线程并行计算q=Ap。

10)#pragma omp for指令多线程并行计算α=ρi-1/pTq

11)#pragma omp reduction指令多线程并行计算x=x+αp。

12)#pragma omp reduction指令多线程并行计算r=r-αq。

13)#pragma omp single指令单线程进行MPI_Allreduce归约各计算节点r的范 数。

14)if||r||<Tolerance,循环迭代终止;else goto3)。

15)end/*结束for循环和OpenMP多线程计算*/。

(3)各计算节点的计算结果x归约后得到最终计算结果,得到最终的线性方程组的 解x,输出线性方程组的解x。

本发明通过消息传递模型处理多进程间的粗粒度通信,而多线程并行编程模型能提供轻 量级线程,更好地解决每个计算节点内各个处理器间的交互,充分利用基于分布式存储的消 息传递模型和基于共享存储的多线程并行编程模型的优点。

本发明的MPI+OpenMP混合并行模型能通过共享内存访问代替节点间的消息传递,降低 数据通信的开销。

由于共享内存的数据读取效率要高于不同内存间的数据传递,因此在同样数目处理器情 况下,MPI+OpenMP混合并行模型的数据读取效率要高于MPI模型的效率,本发明采用的 MPI+OpenMP混合并行模型能提高数据读取效率。

OpenMP并行模型不能扩展超过计算机内部处理器数目,MPI模型在进程个数增加时, 会因消息传递开销的增加降低并行性能,而本发明的MPI+OpenMP混合并行模型能兼顾两者 的优点,在同样数目处理器中的通信开销较低,并行性能良好,有潜在的可扩展性,本发明 采用的MPI+OpenMP混合并行模型能提高可扩展性。

本发明融合了消息传递模型和多线程并行编程模型的优点,能在SMP集群上减少计算的 挂钟时间,提高预条件共轭梯度法的计算速度。

上述说明是针对本发明较佳可行实施例的详细说明,但实施例并非用以限定本发明的专 利申请范围,凡本发明所揭示的技术精神下所完成的同等变化或修饰变更,均应属于本发明 所涵盖专利范围。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号