CN104461467A - 针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法 - Google Patents

针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法 Download PDF

Info

Publication number
CN104461467A
CN104461467A CN201310442102.4A CN201310442102A CN104461467A CN 104461467 A CN104461467 A CN 104461467A CN 201310442102 A CN201310442102 A CN 201310442102A CN 104461467 A CN104461467 A CN 104461467A
Authority
CN
China
Prior art keywords
mpi
openmp
parallel
calculation
computing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201310442102.4A
Other languages
English (en)
Other versions
CN104461467B (zh
Inventor
罗海飙
廖俊豪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangzhou Institute of Software Application Technology Guangzhou GZIS
Original Assignee
Guangzhou Institute of Software Application Technology Guangzhou GZIS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guangzhou Institute of Software Application Technology Guangzhou GZIS filed Critical Guangzhou Institute of Software Application Technology Guangzhou GZIS
Priority to CN201310442102.4A priority Critical patent/CN104461467B/zh
Publication of CN104461467A publication Critical patent/CN104461467A/zh
Application granted granted Critical
Publication of CN104461467B publication Critical patent/CN104461467B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Multi Processors (AREA)

Abstract

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

Description

针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法
技术领域
本发明涉及一种并行计算技术,具体地说,涉及一种并行计算提高计算速度的方法。
背景技术
迭代法是目前求解大型稀疏线性方程组的主流方法,迭代法中的预条件共轭梯度法是通过预处理技术减少共轭梯度法的迭代次数,并能加速收敛的一种方法,在工程和科学计算中已有广泛的应用。共轭梯度法是求解特定线性系统的数值解的方法,其中的系数矩阵为对称和正定的实数阵。随着科学与工程问题的规模和复杂程度的提高,串行共轭梯度法已经很难满足对稀疏线性系统的求解规模和速度的要求。
由于串行计算本身存在的瓶颈,当计算量相对较大,计算机本身的性能将大大制约其进行演算的效率。现有技术中采用串行方法计算共轭梯度法,仅在处理稀疏矩阵向量乘时才启用MPI,通过在各节点上计算分块稀疏矩阵与分块向量的乘积实现并行计算。但共轭梯度法除了稀疏矩阵向量乘,还有多个向量与向量、标量与向量的乘积和求和,以及线性方程组求解等计算步骤,这些计算仍然使用串行方法计算,不能最大限度地将算法并行优化。对于分布式和共享式存储结构混合的SMP集群系统,难以充分利用计算资源,提升其计算速度。
发明内容
本发明的目的在于提供一种针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法,通过利用集群以及多核平台的优势,提升共轭梯度法的计算速度,满足对稀疏线性系统的求解规模和速度的要求。
为了实现上述目的,本发明所采用的技术方案如下:
一种针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法,包括以下步骤:
(1)计算准备
a)启动MPI多进程计算,其中进程数小于或等于可用计算节点数目;
b)每个进程读入子稀疏矩阵A、子初始向量x0、块向量b和最大计算公差Tolerance,子稀疏矩阵A、子初始向量x0和块向量b是通过网格划分软件划分问题的计算域后生成;
(2)开始预条件共轭梯度法的MPI+OpenMP并行的循环计算
1)根据初始值x0,计算r=b-Ax0
2)p=M-1r;
3)ρ=rTp;
4)每个进程开启OpenMP多线程编译指令,其中线程数小于或等于该线程所处计算节点可用CPU核数目:
#pragmaompparallel{  /*开始OpenMP线程*/
5)fori=1,2,……  /*开始循环*/
6)#pragmaompparallelforreduction(+:α){
7)q=Ap  /*稀疏矩阵向量乘*/
其中,具体包括以下步骤:
①多线程并行计算行循环:按行顺序,i从0循环到稀疏矩阵最后一行。其中:
a)预先读取子稀疏矩阵A第i行的数据,存到向量tmp中;
b)j从0循环到第i行非零值结尾。其中:
i.k=第i行第j个非零值的列指数;
ii.q[k]=tmp[j]*+q[k]。
②MPI非阻塞通信交换各节点的q。
8)α=pTq  /*向量内积*/
9)}
10)α=ρ/α
11)ρold=ρ
12)#pragmaompparallelforreduction(+:ρ,error){
13)x=x+αp  /*AXPY*/
14)r=r-αq  /*AXPY*/
15)q=M-1r  /*向量内积*/
16)q=rTq  /*向量内积*/
17)error=rTr  /*向量内积*/
18)}
19)β=ρ/ρold
20)#pragmaompparallelfornowait{p=q+βp}  /*AXPY*/
21)#pragmaompsingle{MPI_Allgather(error);
22)  If(error<tolerance)break}
23)}  /*结束for循环和OpenMP多线程计算*/
(3)各计算节点的计算结果归约后得到最终计算结果。
并行计算时,首先MPI进程启动,对问题进行多进程分解,开始节点间的并行,每个MPI进程被分配到一个计算节点上,进程间使用消息传递交换信息;然后在每个MPI进程中,使用OpenMP制导指令创建一组线程,并分配到计算节点的不同处理器上并行执行。
进一步,所述网格划分软件可为Metis或ParMetis。
进一步,开启MPI多进程计算和OpenMP多线程计算后,能够针对多核SMP集群多核、多节点的硬件资源特性,实现计算节点间和计算节点内的两级并行。
进一步,并行计算执行过程中,计算节点间(即进程间)通过MPI消息传递方式通信数据,在计算节点内(即进程内)通过OpenMP线程组的共享内存方式实现数据共享。
进一步,每一子稀疏矩阵的存储格式为CSR。
进一步,并行计算执行过程中,可以访问的存储空间分为三级存储空间,进程控制的处理器全局共享第一级存储空间,线程组共享第二级存储空间,线程私有第三级存储空间。
进一步,预条件共轭梯度法的MPI+OpenMP并行的循环计算中只有第6)、12)和21)这三步存在OpenMP栅障,各线程计算到OpenMP栅障时需要等待所有线程计算到这一步才能进行下一步的计算。
与现有技术相比,本发明融合了消息传递模型和多线程并行编程模型的优点,更好地解决每个计算节点内各个处理器间的交互,充分利用计算资源,减少算法中的OpenMP栅障数目,减少了多线程计算中的同步,提高了预条件共轭梯度法的计算速度。
附图说明
图1为本发明的编程模式示意图;
图2为本发明的流程步骤示意图;
图3为本发明的稀疏矩阵向量乘的示意图。
具体实施方式
下面结合附图和具体实施例对本发明针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法作进一步说明。
高性能计算机(HPC)按其存储结构可分为共享存储结构和分布存储结构两大类。分布式存储系统没有一个统一的内存空间,其中的一个或多个处理器和它们的内存空间构成一个独立的系统,多个系统由一个操作系统控制,可以独立运行。每个系统叫作节点,这些节点使用网络接口相互连接进行通信。共享式存储系统多为对称式共享存储体系结构,又叫对称多处理器结构(SymmetricMulti-Processing,SMP)。服务器中多个CPU对称工作,无主次或从属关系。各CPU共享相同的物理内存,每个CPU访问内存中的任何地址所需时间是相同的,因此SMP也被称为一致存储器访问结构(UMA,UniformMemoryAccess)。SMP集群系统可以看成是这两种内存结构的集合,它由拥有多个处理器的SMP节点和连接各节点间的高速网络组成一套多级体系结构。SMP集群即有分布式节点系统的良好扩展性,也支持共享式存储系统的数据共享。因此当前以SMP集群为代表的高性能计算机发展迅速,成为高性能计算机领域的主流。
不同存储结构的高性能计算机有相应的并行编程模型,其中一种是基于消息传递模型,一般应用于分布式存储结构,也可用于共享式存储结构。通过将计算任务或数据按照进程数划分,各个并行执行的任务之间通过传递消息来交换信息、协调步伐、控制执行。其中,MPI(messagepassinginterface)是为开发基于消息传递模型的并行程序而制定的工业标准。另一种是基于共享存储的多线程并行编程模型。OpenMP是其中的共享存储并行编程的典型方法,能提供描述并行区域的编译制导语句并隐藏有关并行线程创建和管理的细节,是一种能显式指导多线程、共享内存并行的应用程序编程接口(API)。OpenMP标准化了细粒度的并行性,同时也支持粗粒度的并行性。
本发明采用MPI和OpenMP混合编程模型,将分布式存储编程模型MPl、共享存储编程模型OpenMP相结合,充分利用SMP集群层次存储结构的特点。本发明的MPI和OpenMP混合编程模型具有的层次结构为上层的MPI表示节点间的并行,下层的OpenMP表示节点内的并行。本发明的MPI和OpenMP混合编程模型基于如下的理论分配模型:首先对问题进行MPI分解,将任务划分成通信不密集的几个部分,每个部分分配到一个SMP节点(即一个进程)上,节点间通过消息传递进行通信;然后添加OpenMP编译制导语句将每个节点上的部分再次分解,并分配到SMP的不同处理器上由多个线程并行执行,节点内通过共享存储进行通信。MPI和OpenMP混合编程模型提供了节点间和节点内的两级并行机制,结合了进程级的粗粒度并行)和循环级的细粒度并行。
集群系统是由一组计算机系统(节点)通过高性能网络或局域网互连而形成的具有单一系统映像的高可用、高性能、高可扩展性的计算机集群系统。运行在机群系统上的并行程序将其计算任务分割成若干并行的子任务,并分配给每个计算节点执行。根据并行程序算法需求,在某些子任务间存在保序关系,因此需要进行同步处理。
栅障(Barrier)是同步机制的一种,被广泛应用于机群系统。Barrier操作是并行程序的同步点,并行程序要等待所有参与其中的计算节点都到达这个同步点后,才能执行后续操作。共同完成一个计算任务的所有计算节点,通过某种拓扑网络,互连形成一棵在逻辑上有根的Barrier树。当Barrier树中的计算节点到达Barrier同步点后就停止执行其他操作,直到它被通知Barrier树中的所有计算节点都已到达同步点,Barrier同步完成,计算节点才能够继续处理其它任务。Barrier同步完成的时间取决于Barrier树中最后一个达到Barrier同步点的计算节点,Barrier同步的延时定义为从最后一个计算节点达到Barrier同步点到Barrier树中所有计算节点都被通知到Barrier同步完成所需的时间。在接收到Barrier完成通知前,Barrier树中所有提前到达Barrier同步点的计算节点都处在空闲等待状态,降低了并行系统的性能,因此降低Barrier同步延时对提高并行系统的性能有重要作用。
现有的采用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)#pragmaompfor指令多线程并行计算z=M-1r。
5)#pragmaompfor指令多线程并行计算ρi-1=rTz。
6)#pragmaompsingle指令单线程进行MPI通信,MPI_Allreduce函数归约各计算节点的ρi-1
7)ifi=1β=0elseβ=ρi-1i-2
8)#pragmaompfor指令多线程并行计算p=z+βp。
9)#pragmaompfor指令多线程并行计算q=Ap。
10)#pragmaompfor指令多线程并行计算α=ρi-1/pTq。
11)#pragmaompreduction指令多线程并行计算x=x+αp。
12)#pragmaompreduction指令多线程并行计算r=r-αq。
13)#pragmaompsingle指令单线程进行MPI_Allreduce归约各计算节点r的范数。
14)if,循环迭代终止;elsegoto3)。
15)end/*结束for循环和OpenMP多线程计算*/。
(3)各计算节点的计算结果x归约后得到最终计算结果,得到最终的线性方程组的解x,输出线性方程组的解x。
可以看出,上述算法共有9步OpenMP的#pragmaomp指令,每一步都有OpenMP栅障(Barrier),程序必须等待所有线程都达到同一栅障才能进行下一步。如果各线程计算量不一样,各线程将不能同时达到栅障,程序执行会大大延缓。所以,优化算法,减少OpenMP栅障将会提高计算效率。
本发明通过将和设置成线程局部变量,可以消除全局通信,这样线程执行到和的赋值时无需等待其它线程,可以直接执行下一步计算,因此减少了OpenMP栅障。
本发明公开了一种基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法,包括以下步骤:
根据计算节点数目和节点内可用CPU核数确定可调用的MPI进程数和OpenMP线程数;每个进程读入已有子稀疏矩阵A、子初始向量x0和块向量b和最大计算公差Tolerance;每个进程开启多线程编译指令;在各个进程上进行预条件共轭梯度法的循环计算;若计算的误差小于允许值,循环结束,否则继续循环计算;归约各个进程的计算结果,输出问题的解;并行计算时,首先MPI进程启动,对问题进行多进程分解,开始节点间的并行,每个MPI进程被分配到一个计算节点上,进程间使用消息传递交换信息;然后在每个MPI进程中,使用OpenMP制导指令创建一组线程,并分配到计算节点的不同处理器上并行执行。
开启多线程时,每一进程可开启的线程数小于或等于该进程的可用处理器数。每一子稀疏矩阵的存储格式为CSR(CompressedSparseRow)。其中,程序在预条件共轭梯度算法循环开始前动态确定可用线程数,开启OpenMP多线程,在循环中根据需要调用不同OpenMP多线程指令,如for循环指令、reduction指令、single指令等。并行计算执行过程中,可以访问的存储空间分为三级存储空间:进程控制的多核微处理器全局共享第一级存储空间,线程组共享第二级存储空间,线程私有第三级存储空间。线程组共享的第二级存储空间在共轭梯度循环前创建,将当前预条件共轭梯度算法函数内的变量空间作为线程组的共享的第二级存储空间,线程组内的每个线程均能访问这一空间,但其它线程组不能访问。同时,每个线程会被分配一个只有线程才能访问的私有的第三级存储空间,该存储空间具有所属线程相同的生命周期。
实施例一
本实施例采用针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法求解大规模线性方程组。预条件共轭梯度法是求解对称正定稀疏矩阵线性方程组的迭代法,在工程和科学计算中有广泛的应用,其算法如下所示:
取x(0)∈Rn,计算r(0)=b-Ax(0),令p(0)=r(0)
对k=0,1,2,...,计算
x(k+1)=x(k+1)kp(k)
r(k+1)=b-Ax(k+1)=r(k)kAp(k)
则输出x′≡x(k+1),停止计算。否则,
p(k+1)=r(k+1)kp(k)
其中,在大型工程和计算问题中,x是需求解的向量,b是已知向量,A为系数矩阵,其通常为大型稀疏矩阵。稀疏矩阵是指非零值占矩阵极小比例的矩阵(通常小于1%),绝大部分值为零。稀疏矩阵存储方法是CompressedSparseRow(CSR)格式,其使用3个数组表示一个维数为m×n,含有nnz个非零元的稀疏矩阵:数组val和数组colval分别保存每个非零元的取值和列值,数组rowptr保存每行第一个非零元在val或colval中的索引位置。本发明采用MPI和OpenMP混合编程模型,让预条件共轭梯度法在多核多节点的SMP集群系统上能够更好地利用SMP集群的特性,实现计算速度的提升。
请参阅图2,采用针对SMP集群系统采用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)
fori=1,2,…
solveMz(i-1)=r(i-1)
&rho; i - 1 = r ( i - 1 ) T z ( i - 1 )
ifi=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=I,其中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)p=M-1r。
3)ρ=rTp。
4)每个进程开启OpenMP多线程编译指令,其中线程数小于或等于该线程所处计算节点可用CPU核数目:
#pragmaompparallel{  /*开始OpenMP线程*/
5)fori=1,2,……  /*开始循环*/
6)#pragmaompparallelforreduction(+:α){
7)q=Ap  /*稀疏矩阵向量乘*/
其中,具体包括以下步骤:
①多线程并行计算行循环:按行顺序,i从0循环到稀疏矩阵最后一行。其中:
a)预先读取子稀疏矩阵A第i行的数据,存到向量tmp中;
b)j从0循环到第i行非零值结尾。其中:
i.k=第i行第j个非零值的列指数;
ii.q[k]=tmp[j]*p[k]+q[k]。
②MPI非阻塞通信交换各节点的q。
8)α=pTq    /*向量内积*/
9)}
10)α=ρ/α
11)ρold=ρ
12)#pragmaompparallelforreduction(+:ρ,error){
13)x=x+αp  /*AXPY*/
14)r=r-αq  /*AXPY*/
15)q=M-1r   /*向量内积*/
16)q=rTq  /*向量内积*/
17)error=rTr     /*向量内积*/
18)}
19)β=ρ/ρold
20)#pragmaompparallelfornowait{p=q+βp}/*AXPY*/
21)#pragmaompsingle{MPI_Allgather(error);
22)  If(error<tolerance)break}
23)}  /*结束for循环和OpenMP多线程计算*/
(3)各计算节点的计算结果x归约后得到最终计算结果,得到最终的线性方程组的解x,输出线性方程组的解x。
本发明预条件共轭梯度法的MPI+OpenMP并行的循环计算中只有第6)、12)和21)这三步存在OpenMP栅障,各线程计算到OpenMP栅障时需要等待所有线程计算到这一步才能进行下一步的计算,其它循环计算步骤无需等待其它线程的同步。
本发明优化了传统预条件共轭梯度算法,减少算法中的OpenMP栅障数目,减少了多线程计算中的同步,因此能够在多核多节点超级计算机上的提高计算效率,缩短计算时间;同时新算法减少了一个变量,这也能提高cache中数据读取效率。
本发明通过消息传递模型处理多进程间的粗粒度通信,而多线程并行编程模型能提供轻量级线程,更好地解决每个计算节点内各个处理器间的交互,充分利用基于分布式存储的消息传递模型和基于共享存储的多线程并行编程模型的优点。
本发明的MPI+OpenMP混合并行模型能通过共享内存访问代替节点间的消息传递,降低数据通信的开销。
由于共享内存的数据读取效率要高于不同内存间的数据传递,因此在同样数目处理器情况下,MPI+OpenMP混合并行模型的数据读取效率要高于MPI模型的效率,本发明采用的MPI+OpenMP混合并行模型能提高数据读取效率。
OpenMP并行模型不能扩展超过计算机内部处理器数目,MPI模型在进程个数增加时,会因消息传递开销的增加降低并行性能,而本发明的MPI+OpenMP混合并行模型能兼顾两者的优点,在同样数目处理器中的通信开销较低,并行性能良好,有潜在的可扩展性,本发明采用的MPI+OpenMP混合并行模型能提高可扩展性。
本发明融合了消息传递模型和多线程并行编程模型的优点,能在SMP集群上减少计算的挂钟时间,提高预条件共轭梯度法的计算速度。
上述说明是针对本发明较佳可行实施例的详细说明,但实施例并非用以限定本发明的专利申请范围,凡本发明所揭示的技术精神下所完成的同等变化或修饰变更,均应属于本发明所涵盖专利范围。

Claims (7)

1.一种针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法,其特征在于,包括以下步骤:
(1)计算准备
a)启动MPI多进程计算,其中进程数小于或等于可用计算节点数目;
b)每个进程读入子稀疏矩阵A、子初始向量x0、块向量b和最大计算公差Tolerance,子稀疏矩阵A、子初始向量x0和块向量b是通过网格划分软件划分问题的计算域后生成;
(2)开始预条件共轭梯度法的MPI+OpenMP并行的循环计算
1)根据初始值x0,计算r=b-Ax0
2)p=M-1r;
3)ρ=rTp;
4)每个进程开启OpenMP多线程编译指令,其中线程数小于或等于该线程所处计算节点可用CPU核数目:
#pragmaompparallel{  /*开始OpenMP线程*/
5)fori=1,2,……  /*开始循环*/
6)#pragmaompparallelforreduction(+:α){
7)q=Ap  /*稀疏矩阵向量乘*/
其中,具体包括以下步骤:
①多线程并行计算行循环:按行顺序,i从0循环到稀疏矩阵最后一行,其中:
a)预先读取子稀疏矩阵A第i行的数据,存到向量tmp中,
b)j从0循环到第i行非零值结尾,其中:
i.k=第i行第j个非零值的列指数,
ii.q[k]=tmp[j]*p[k]+q[k],
②MPI非阻塞通信交换各节点的q;
8)α=pTq  /*向量内积*/
9)}
10)α=ρ/α
11)ρold=ρ
12)#pragmaompparallelforreduction(+:ρ,error){
13)x=x+αp  /*AXPY*/
14)r=r-αq  /*AXPY*/
15)q=M-1r  /*向量内积*/
16)q=rTq   /*向量内积*/
17)error=rTr  /*向量内积*/
18)}
19)β=ρ/ρold
20)#pragmaompparallelfornowait{p=q+βp}  /*AXPY*/
21)#pragmaompsingle{MPI_Allgather(error);
22)    If(error<tolerance)break}
23)}     /*结束for循环和OpenMP多线程计算*/
(3)各计算节点的计算结果归约后得到最终计算结果。
并行计算时,首先MPI进程启动,对问题进行多进程分解,开始节点间的并行,每个MPI进程被分配到一个计算节点上,进程间使用消息传递交换信息;然后在每个MPI进程中,使用OpenMP制导指令创建一组线程,并分配到计算节点的不同处理器上并行执行。
2.如权利要求1所述的针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法,其特征在于:所述网格划分软件可为Metis或ParMetis。
3.如权利要求1所述的针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法,其特征在于:开启MPI多进程计算和OpenMP多线程计算后,能够针对多核SMP集群多核、多节点的硬件资源特性,实现计算节点间和计算节点内的两级并行。
4.如权利要求1所述的针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法,其特征在于:并行计算执行过程中,计算节点间(即进程间)通过MPI消息传递方式通信数据,在计算节点内(即进程内)通过OpenMP线程组的共享内存方式实现数据共享
5.如权利要求1所述的针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法,其特征在于:每一子稀疏矩阵的存储格式为CSR。
6.如权利要求1所述的针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法,其特征在于:并行计算执行过程中,可以访问的存储空间分为三级存储空间,进程控制的处理器全局共享第一级存储空间,线程组共享第二级存储空间,线程私有第三级存储空间。
7.如权利要求1所述的针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法,其特征在于:预条件共轭梯度法的MPI+OpenMP并行的循环计算中只有第6)、12)和21)这三步存在OpenMP栅障,各线程计算到OpenMP栅障时需要等待所有线程计算到这一步才能进行下一步的计算。
CN201310442102.4A 2013-09-25 2013-09-25 针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法 Active CN104461467B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310442102.4A CN104461467B (zh) 2013-09-25 2013-09-25 针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310442102.4A CN104461467B (zh) 2013-09-25 2013-09-25 针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法

Publications (2)

Publication Number Publication Date
CN104461467A true CN104461467A (zh) 2015-03-25
CN104461467B CN104461467B (zh) 2018-05-04

Family

ID=52907585

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310442102.4A Active CN104461467B (zh) 2013-09-25 2013-09-25 针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法

Country Status (1)

Country Link
CN (1) CN104461467B (zh)

Cited By (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105260342A (zh) * 2015-09-22 2016-01-20 浪潮(北京)电子信息产业有限公司 一种对称正定线性方程组的求解方法与系统
CN106407561A (zh) * 2016-09-19 2017-02-15 复旦大学 一种并行gpdt算法在多核soc上的划分方法
CN106446303A (zh) * 2016-12-16 2017-02-22 郑州云海信息技术有限公司 用于部署大规模集群文件系统的系统及方法
CN106775594A (zh) * 2017-01-13 2017-05-31 中国科学院软件研究所 一种基于国产申威26010处理器的稀疏矩阵向量乘异构众核实现方法
CN107203406A (zh) * 2017-06-26 2017-09-26 西安微电子技术研究所 一种面向分布式存储结构的处理方法
CN107273339A (zh) * 2017-06-21 2017-10-20 郑州云海信息技术有限公司 一种任务处理方法及装置
CN107273094A (zh) * 2017-05-18 2017-10-20 中国科学院软件研究所 一种适应于“神威·太湖之光”上hpcg优化的数据结构及其高效实现方法
CN107291666A (zh) * 2017-06-27 2017-10-24 郑州云海信息技术有限公司 一种数据处理方法及处理装置
CN108595277A (zh) * 2018-04-08 2018-09-28 西安交通大学 一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法
CN108932172A (zh) * 2018-06-27 2018-12-04 西安交通大学 一种基于OpenMP/MPI混合并行CFD计算的细粒度共享内存通信同步方法
CN109635191A (zh) * 2018-12-05 2019-04-16 广州市百果园信息技术有限公司 相似度确定方法、装置、存储介质和计算机设备
CN111078214A (zh) * 2019-12-02 2020-04-28 西安交通大学 一种将模型与r进行耦合交互的方法
CN111240744A (zh) * 2020-01-03 2020-06-05 支付宝(杭州)信息技术有限公司 一种提高涉及稀疏矩阵并行计算效率的方法和系统
CN111611479A (zh) * 2020-05-07 2020-09-01 北京达佳互联信息技术有限公司 用于网络资源推荐的数据处理方法及相关装置
CN112074830A (zh) * 2018-04-20 2020-12-11 超威半导体公司 图形处理单元上的高性能稀疏三角求解
CN113239591A (zh) * 2021-05-18 2021-08-10 北京科技大学 面向dcu集群的大规模有限元网格并行分区的方法及装置
CN113377534A (zh) * 2021-06-08 2021-09-10 东南大学 一种基于csr格式的高性能稀疏矩阵向量乘法计算方法
CN113678115A (zh) * 2019-03-27 2021-11-19 图核有限公司 具有嵌入的环的联网计算机领域
CN113791912A (zh) * 2021-11-11 2021-12-14 中国空气动力研究与发展中心计算空气动力研究所 基于mpi+x的dsmc并行计算方法、设备及介质
CN114244708A (zh) * 2021-04-26 2022-03-25 无锡江南计算技术研究所 一种胖树网络结构上的通信优化方法
CN115408653A (zh) * 2022-11-01 2022-11-29 泰山学院 一种IDRstab算法高可扩展并行处理方法及系统
CN117311948A (zh) * 2023-11-27 2023-12-29 湖南迈曦软件有限责任公司 Cpu与gpu异构并行的自动多重子结构数据处理方法
CN117436370A (zh) * 2023-12-06 2024-01-23 山东省计算中心(国家超级计算济南中心) 面向流体力学网格生成的超定矩阵方程并行方法及系统
WO2024108800A1 (zh) * 2022-11-23 2024-05-30 海光信息技术股份有限公司 数据处理方法和装置、电子设备和计算机可读存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050197808A1 (en) * 2004-03-08 2005-09-08 An-Yu Kuo Method for determining electrical and magnetic field effects
CN101819651A (zh) * 2010-04-16 2010-09-01 浙江大学 粒子群算法在多机上并行执行的方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050197808A1 (en) * 2004-03-08 2005-09-08 An-Yu Kuo Method for determining electrical and magnetic field effects
CN101819651A (zh) * 2010-04-16 2010-09-01 浙江大学 粒子群算法在多机上并行执行的方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
张健飞 等: "基于GPU的稀疏线性系统的预条件共轭梯度法", 《计算机应用》 *
李苏平 等: "基于MPI与OpenMP混合并行计算技术的研究", 《软件导刊》 *
潘卫 等: "基于SMP集群的MPI+OpenMP混合编程模型研究", 《计算机应用研究》 *

Cited By (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105260342A (zh) * 2015-09-22 2016-01-20 浪潮(北京)电子信息产业有限公司 一种对称正定线性方程组的求解方法与系统
CN106407561A (zh) * 2016-09-19 2017-02-15 复旦大学 一种并行gpdt算法在多核soc上的划分方法
CN106407561B (zh) * 2016-09-19 2020-07-03 复旦大学 一种并行gpdt算法在多核soc上的划分方法
CN106446303A (zh) * 2016-12-16 2017-02-22 郑州云海信息技术有限公司 用于部署大规模集群文件系统的系统及方法
CN106446303B (zh) * 2016-12-16 2020-01-14 苏州浪潮智能科技有限公司 用于部署大规模集群文件系统的系统及方法
CN106775594B (zh) * 2017-01-13 2019-03-19 中国科学院软件研究所 一种基于申威26010处理器的稀疏矩阵向量乘异构众核实现方法
CN106775594A (zh) * 2017-01-13 2017-05-31 中国科学院软件研究所 一种基于国产申威26010处理器的稀疏矩阵向量乘异构众核实现方法
CN107273094A (zh) * 2017-05-18 2017-10-20 中国科学院软件研究所 一种适应于“神威·太湖之光”上hpcg优化的数据结构及其高效实现方法
CN107273094B (zh) * 2017-05-18 2020-06-16 中国科学院软件研究所 一种适应于“神威·太湖之光”上hpcg优化的数据结构及其高效实现方法
CN107273339A (zh) * 2017-06-21 2017-10-20 郑州云海信息技术有限公司 一种任务处理方法及装置
CN107203406A (zh) * 2017-06-26 2017-09-26 西安微电子技术研究所 一种面向分布式存储结构的处理方法
CN107203406B (zh) * 2017-06-26 2020-11-06 西安微电子技术研究所 一种面向分布式存储结构的处理方法
CN107291666A (zh) * 2017-06-27 2017-10-24 郑州云海信息技术有限公司 一种数据处理方法及处理装置
CN108595277B (zh) * 2018-04-08 2021-01-19 西安交通大学 一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法
CN108595277A (zh) * 2018-04-08 2018-09-28 西安交通大学 一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法
CN112074830A (zh) * 2018-04-20 2020-12-11 超威半导体公司 图形处理单元上的高性能稀疏三角求解
CN108932172A (zh) * 2018-06-27 2018-12-04 西安交通大学 一种基于OpenMP/MPI混合并行CFD计算的细粒度共享内存通信同步方法
CN108932172B (zh) * 2018-06-27 2021-01-19 西安交通大学 一种基于OpenMP/MPI混合并行CFD计算的细粒度共享内存通信同步方法
CN109635191A (zh) * 2018-12-05 2019-04-16 广州市百果园信息技术有限公司 相似度确定方法、装置、存储介质和计算机设备
CN113678115A (zh) * 2019-03-27 2021-11-19 图核有限公司 具有嵌入的环的联网计算机领域
CN111078214A (zh) * 2019-12-02 2020-04-28 西安交通大学 一种将模型与r进行耦合交互的方法
CN111240744A (zh) * 2020-01-03 2020-06-05 支付宝(杭州)信息技术有限公司 一种提高涉及稀疏矩阵并行计算效率的方法和系统
CN111240744B (zh) * 2020-01-03 2022-03-22 支付宝(杭州)信息技术有限公司 一种提高涉及稀疏矩阵并行计算效率的方法和系统
CN111611479A (zh) * 2020-05-07 2020-09-01 北京达佳互联信息技术有限公司 用于网络资源推荐的数据处理方法及相关装置
CN111611479B (zh) * 2020-05-07 2024-02-13 北京达佳互联信息技术有限公司 用于网络资源推荐的数据处理方法及相关装置
CN114244708A (zh) * 2021-04-26 2022-03-25 无锡江南计算技术研究所 一种胖树网络结构上的通信优化方法
CN114244708B (zh) * 2021-04-26 2023-08-08 无锡江南计算技术研究所 一种胖树网络结构上的通信优化方法
CN113239591A (zh) * 2021-05-18 2021-08-10 北京科技大学 面向dcu集群的大规模有限元网格并行分区的方法及装置
CN113239591B (zh) * 2021-05-18 2023-10-27 北京科技大学 面向dcu集群的大规模有限元网格并行分区的方法及装置
CN113377534A (zh) * 2021-06-08 2021-09-10 东南大学 一种基于csr格式的高性能稀疏矩阵向量乘法计算方法
CN113791912A (zh) * 2021-11-11 2021-12-14 中国空气动力研究与发展中心计算空气动力研究所 基于mpi+x的dsmc并行计算方法、设备及介质
CN115408653A (zh) * 2022-11-01 2022-11-29 泰山学院 一种IDRstab算法高可扩展并行处理方法及系统
CN115408653B (zh) * 2022-11-01 2023-03-21 泰山学院 一种IDRstab算法高可扩展并行处理方法及系统
WO2024108800A1 (zh) * 2022-11-23 2024-05-30 海光信息技术股份有限公司 数据处理方法和装置、电子设备和计算机可读存储介质
CN117311948A (zh) * 2023-11-27 2023-12-29 湖南迈曦软件有限责任公司 Cpu与gpu异构并行的自动多重子结构数据处理方法
CN117311948B (zh) * 2023-11-27 2024-03-19 湖南迈曦软件有限责任公司 Cpu与gpu异构并行的自动多重子结构数据处理方法
CN117436370A (zh) * 2023-12-06 2024-01-23 山东省计算中心(国家超级计算济南中心) 面向流体力学网格生成的超定矩阵方程并行方法及系统
CN117436370B (zh) * 2023-12-06 2024-03-19 山东省计算中心(国家超级计算济南中心) 面向流体力学网格生成的超定矩阵方程并行方法及系统

Also Published As

Publication number Publication date
CN104461467B (zh) 2018-05-04

Similar Documents

Publication Publication Date Title
CN104461467A (zh) 针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法
CN104461466A (zh) 基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法
CN104714850B (zh) 一种基于opencl的异构共同计算均衡方法
CN103970602B (zh) 一种面向x86多核处理器的数据流程序调度方法
CN102855153B (zh) 面向片式多核处理器的流编译优化方法
Bosilca et al. Performance portability of a GPU enabled factorization with the DAGuE framework
CN105700941A (zh) 三维调度器模型及其调度算法
Dogan et al. Accelerating graph and machine learning workloads using a shared memory multicore architecture with auxiliary support for in-hardware explicit messaging
CN111985629A (zh) 用于训练神经网络的并行化策略
CN107329822A (zh) 面向多源多核系统的基于超任务网的多核调度方法
CN101021831A (zh) 面向科学计算的64位流处理器芯片体系结构
CN109840306A (zh) 一种基于递归的并行快速傅里叶变换通信优化方法和系统
CN113391932B (zh) 面向异构众核架构的并行特征线法输运扫描方法及装置
Eleliemy et al. Dynamic loop scheduling using MPI passive-target remote memory access
CN113556242B (zh) 一种基于多处理节点来进行节点间通信的方法和设备
Kadav et al. ASAP: asynchronous approximate data-parallel computation
Huang et al. Performance optimization of High-Performance LINPACK based on GPU-centric model on heterogeneous systems
CN117573375B (zh) 一种面向自适应解耦方程的动态负载平衡并行计算方法
US20230289189A1 (en) Distributed Shared Memory
US11940940B2 (en) External exchange connectivity
Zhou et al. An effective 3-d fast fourier transform framework for multi-gpu accelerated distributed-memory systems
US20230289215A1 (en) Cooperative Group Arrays
Yin et al. Heterogeneous Big Data Parallel Computing Optimization Model using MPI/OpenMP Hybrid and Sensor Networks
Ilic et al. Efficient Multilevel Load Balancing on Heterogeneous CPU+ GPU Systems
EP4182793A1 (en) Communication between host and accelerator over network

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant