CN108595277B - 一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法 - Google Patents

一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法 Download PDF

Info

Publication number
CN108595277B
CN108595277B CN201810308300.4A CN201810308300A CN108595277B CN 108595277 B CN108595277 B CN 108595277B CN 201810308300 A CN201810308300 A CN 201810308300A CN 108595277 B CN108595277 B CN 108595277B
Authority
CN
China
Prior art keywords
thread
communication
mpi
calculation
processes
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.)
Active
Application number
CN201810308300.4A
Other languages
English (en)
Other versions
CN108595277A (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.)
Xian Jiaotong University
Original Assignee
Xian Jiaotong University
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 Xian Jiaotong University filed Critical Xian Jiaotong University
Priority to CN201810308300.4A priority Critical patent/CN108595277B/zh
Publication of CN108595277A publication Critical patent/CN108595277A/zh
Application granted granted Critical
Publication of CN108595277B publication Critical patent/CN108595277B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法,具体以下步骤:根据通信负载和计算负载对计算域进行区域分解,划分为可并行求解的若干子域;根据{进程,线程组}的设置情况,确定各个网格块之间的网络拓扑关系,创建并初始化进程间的MPI持久化通信关系;线程间无关计算推进结束后,进程间激活MPI通道进行消息通信,同时线程组内使用共享内存通信,实现网格块之间的边界数据交换;线程组内计算残差,进程间收集最大残差,如果最大残差仍未满足收敛条件返回网格推进步骤进行迭代,否则结束并行计算。从而能有效的提升CFD仿真程序的并行效率。

Description

一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化 方法
技术领域
本发明属于计算流体力学与计算机交叉领域,特别涉及一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法。
背景技术
计算流体动力学(Computational Fluid Dynamics,简称CFD)是伴随着计算机迅速崛起的一门交叉学科分。它为流体力学的理论和工程研究供了廉价的模拟、设计和优化的工具,广泛的服务于传统的流体力学和流体工程领域如航空、航天、船舶、水利等。CFD方法的本质是对流场的控制方程用计算数学的方法将其离散到一系列网格节点上求其离散的数值解的一种方法。因此网格点的规模大小就决定了CFD问题的求解复杂度。计算机发展之初主要是单核模式,计算流体力学仿真程序以串行模式运行,受限于计算机的计算能力,只能对小规模的区域网格进行模拟而且精度不高。
随着超级计算机(简称超算)的不断发展,计算能力也达到千万亿次的峰值。为了借助于多核架构的超级计算机进行计算流体力学的仿真,CFD程序也走向了并行化,并行过程中进程/线程间额外的通信消耗也成为整个仿真程序的瓶颈。超算大多基于对称多处理机(Symmetrical Multi-Processing,简称SMP)的架构,具有整机多机柜,机柜内节点,节点内多CPU,CPU多核的特点,采用单一的共享内存通信OpenMP或者是消息传递通信MPI都无法充分利用超算本身架构的特点。
目前混合编程在CFD仿真程序中的使用较为粗放,大多数仿真程序为了利用超算多核特点简化通信过程,大多采用纯MPI的架构,这种架构在程序规模逼近万核时,进程间频繁消息通信造成的网格带宽压力形成明显的瓶颈。少数使用了OpenMP/MPI混合编程的程序,都只是停留在OpenMP对局部for循环的细粒度展开加速,缺乏相应的优化策略,没有发挥粗粒度OpenMP共享内存通信的优势。
发明内容
本发明的目的在于提供一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法,以解决上述问题。
为实现上述目的,本发明采用以下技术方案:
一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法,包括以下步骤:
步骤一,根据通信负载和计算负载对计算域进行区域分解,划分为可并行求解的若干子域;
步骤二,根据{进程,线程组}的设置情况,确定各个网格块之间的网络拓扑关系,创建并初始化进程间的MPI持久化通信关系;
步骤三,线程间无关计算推进结束后,进程间激活MPI通道进行消息通信,同时线程组内使用共享内存通信,实现网格块之间的边界数据交换;
步骤四,线程组内计算残差,进程间收集最大残差,如果最大残差仍未满足收敛条件则返回步骤二进行迭代,否则并行计算结束。
进一步的,步骤一具体包括以下步骤:
1)根据通信负载将求解网格划分为若干个较大的子网格块,每个进程负责一个网格块的计算;
2)根据计算负载将进程的网格块在划分为若干个较小的网格块,每个线程负责一个小网格块的计算;
线程数,进程数,细分后总的网格块数目满足:
nblocks=nprocs*nthreads
其中nblocks是总的网格块数目,nprocs是总的进程数,nthreads是每个进程包含的线程数。
进一步的,步骤二具体包括以下步骤:
1)根据{进程,线程组}和网格块的对应关系,设置进程中每个线程计算的网格块边界中分别需要进程间MPI通信和进程内共享缓存通信的拓扑关系;
BlockNum/threads=procid,BlockNum%threads=threadid
其中BlockNum代表要和本线程通信的线程所计算的网格块编号,threads代表一个线程组中线程的总个数,procid代表要通信的线程所属的进程号,threadid代表要通信的线程在它的线程组中的线程号。
2)根据拓扑关系对需要进行MPI通信的进程,调用MPI函数MPI_Send_init/MPI_Recv_init创建持久化通信,建立半关闭的通信通道等待激活。
进一步的,每个线程同步的计算需要和本线程通信的其他线程号,并通过判断来确定该线程是否和自己同属一个线程组,如果是则使用共享缓存通信方法,否则就需要在进程之间使用消息通信。
进一步的,步骤三具体包括以下步骤:
1)各线程进行相对独立的CFD推进计算。
2)线程间无关计算推进结束后,根据之前建立的网络拓扑关系,主线程激活进程间MPI通信通道进行数据交换,同时其他副线程进行线程内的OpenMP共享内存通信,实现两种通信方式的重叠,隐藏部分通信等待时间。
进一步的,步骤三具体包括以下步骤:
1)各个线程计算出自己目前推进所得到的残差结果,并写入本线程所在进程的共享缓存;
2)主线程计算出本进程最大残差,同时通过MPI通信收集其他进程的最大残差;获得所有进程最大残差后,根据结果判断继续迭代还是结束。
与现有技术相比,本发明有以下技术效果:
本发明提供的基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法,首先实现了任务级别的粗粒度OpenMP/MPI混合编程模型,使得问题的划分更加细化,能有效的利用共享内存通信和消息传递通信各自的优势,将两者的特性结合提高CFD仿真程序的通信效率。其次粗粒度的混合编程模型能充分耦合目前超算整机多机柜、机柜内节点、节点内多CPU、CPU多核的物理特性,通过充分挖掘平台特性,提升并行程序的执行效率。最后在通信时将进程间MPI通信交给主线程完成,其他线程同步的进行共享内存通信,避免了所有线程由于进程间的MPI通信造成等待现象,实现了OpenMP通信和MPI通信的重叠,进一步提高了通信效率。
附图说明
图1为本发明提供方法的流程图。
具体实施方式
下面结合附图对本发明做进一步的详细说明。
本发明提出的一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法的流程,如图1所示,包括:
步骤A、根据通信负载和计算负载对计算域进行区域分解,划分为可并行求解的若干子域:
步骤A1、根据通信负载将求解网格划分为若干个较大的子网格块,每个进程负责一个网格块的计算,进程间的区域分解算法要使得相邻网格块之间的重叠面要少,减少进程间的通信量。
步骤A2、根据计算负载将进程的网格块在划分为若干个较小的网格块,每个线程负责一个小网格块的计算。主线程负责协调额外开销较大,要分配较少的计算负载即网格数,其他副线程计算能力相当,分配均等的网格数,实现负载均衡。
线程数,进程数,细分后总的网格块数目满足:
nblocks=nprocs*nthreads (1)
其中nblocks是总的网格块数目,nprocs是总的进程数,nthreads是每个进程包含的线程数。
步骤B、根据{进程,线程组}的设置情况,确定各个网格块之间的网络拓扑关系,创建并初始化进程间的MPI持久化通信关系;
步骤B1、根据{进程,线程组}和网格块的对应关系,每个线程同步的计算需要和本线程通信的其他线程号,并通过判断来确定该线程是否和自己同属一个线程组,如果是则使用共享缓存通信方法,否则就需要在进程之间使用消息通信。设置进程中每个线程计算的网格块边界中分别需要进程间MPI通信和进程内共享缓存通信的拓扑关系。
BlockNum/threads=procid,BlockNum%threads=threadid (2)
其中BlockNum代表要和本线程通信的线程所计算的网格块编号,threads代表一个线程组中线程的总个数,procid代表要通信的线程所属的进程号,threadid代表要通信的线程在它的线程组中的线程号。通过比对procid可以判断是否是跨进程的MPI通信,通过threadid可以明确共享缓存通信的线程地址。
步骤B2、根据拓扑关系对需要进行MPI通信的进程,调用MPI函数MPI_Send_init/MPI_Recv_init创建持久化通信,建立半关闭的通信通道等待激活。
步骤C、线程间无关计算推进结束后,进程间激活MPI通道进行消息通信,同时线程组内使用共享内存通信,实现网格块之间的边界数据交换;
步骤C1、各线程进行相对独立的CFD推进计算。
步骤C2、线程间无关计算推进结束后,根据之前建立的网络拓扑关系,主线程激活进程间MPI通信通道进行数据交换,同时其他副线程进行线程内的OpenMP共享内存通信,实现两种通信方式的重叠,隐藏部分通信等待时间。
步骤D、线程组内计算残差,进程间收集最大残差,如果最大残差仍未满足收敛条件返回第2)步进行迭代,否则并行计算结束。
步骤D1、各线程计算出自己目前推进所得到的残差结果,并写入本线程所在线程组即进程的共享缓存。
步骤D2、主线程计算出本进程的最大残差,同时调用MPI_Allreduce收集其他进程的最大残差,并得到程序的最大残差后,根据结果判断继续迭代还是结束并行。
实验结果表明,该基于OpenMP/MPI混合编程的CFD仿真程序的通信重叠优化方法能和机器架构充分耦合,发挥节点内多线程OpenMP共享内存通信速度快,使用MPI通信实现分布式的节点间通信,能明显提升万核级的大规模CFD仿真程序效率。

Claims (3)

1.一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法,其特征在于,包括以下步骤:
步骤一,根据通信负载和计算负载对计算域进行区域分解,划分为可并行求解的若干子域;步骤一具体包括以下步骤:
1)根据通信负载将求解网格划分为若干个较大的子网格块,每个进程负责一个网格块的计算;
2)根据计算负载将进程的网格块在划分为若干个较小的网格块,每个线程负责一个小网格块的计算;
线程数,进程数,细分后总的网格块数目满足:
nblocks=nprocs*nthreads
其中nblocks是总的网格块数目,nprocs是总的进程数,nthreads是每个进程包含的线程数;
步骤二,根据{进程,线程组}的设置情况,确定各个网格块之间的网络拓扑关系,创建并初始化进程间的MPI持久化通信关系;
步骤三,线程间无关计算推进结束后,进程间激活MPI通道进行消息通信,同时线程组内使用共享内存通信,实现网格块之间的边界数据交换;
步骤四,线程组内计算残差,进程间收集最大残差,如果最大残差仍未满足收敛条件则返回步骤二进行迭代,否则并行计算结束;
步骤二具体包括以下步骤:
1)根据{进程,线程组}和网格块的对应关系,设置进程中每个线程计算的网格块边界中分别需要进程间MPI通信和进程内共享缓存通信的拓扑关系;
BlockNum/threads=procid,BlockNum%threads=threadid
其中BlockNum代表要和本线程通信的线程所计算的网格块编号,threads代表一个线程组中线程的总个数,procid代表要通信的线程所属的进程号,threadid代表要通信的线程在它的线程组中的线程号;
2)根据拓扑关系对需要进行MPI通信的进程,调用MPI函数MPI_Send_init/MPI_Recv_init创建持久化通信,建立半关闭的通信通道等待激活;
每个线程同步的计算需要和本线程通信的其他线程号,并通过判断来确定该线程是否和自己同属一个线程组,如果是则使用共享缓存通信方法,否则就需要在进程之间使用消息通信。
2.根据权利要求1所述的一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法,其特征在于,步骤三具体包括以下步骤:
1)各线程进行相对独立的CFD推进计算;
2)线程间无关计算推进结束后,根据之前建立的网络拓扑关系,主线程激活进程间MPI通信通道进行数据交换,同时其他副线程进行线程内的OpenMP共享内存通信,实现两种通信方式的重叠,隐藏部分通信等待时间。
3.根据权利要求1所述的一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法,其特征在于,步骤四具体包括以下步骤:
1)各个线程计算出自己目前推进所得到的残差结果,并写入本线程所在进程的共享缓存;
2)主线程计算出本进程最大残差,同时通过MPI通信收集其他进程的最大残差;获得所有进程最大残差后,根据结果判断继续迭代还是结束。
CN201810308300.4A 2018-04-08 2018-04-08 一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法 Active CN108595277B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810308300.4A CN108595277B (zh) 2018-04-08 2018-04-08 一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810308300.4A CN108595277B (zh) 2018-04-08 2018-04-08 一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法

Publications (2)

Publication Number Publication Date
CN108595277A CN108595277A (zh) 2018-09-28
CN108595277B true CN108595277B (zh) 2021-01-19

Family

ID=63621360

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810308300.4A Active CN108595277B (zh) 2018-04-08 2018-04-08 一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法

Country Status (1)

Country Link
CN (1) CN108595277B (zh)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109684061A (zh) * 2018-12-24 2019-04-26 无锡江南计算技术研究所 一种非结构网格众核粗粒度并行计算方法
CN109828841B (zh) * 2019-01-21 2021-02-12 南京航空航天大学 一种cfd并行计算方法
CN109977497B (zh) * 2019-03-10 2022-12-02 西安电子科技大学 基于cpu加速通用雷达信号处理流程的并行方法
CN110543663B (zh) * 2019-07-22 2021-07-13 西安交通大学 一种面向粗粒度MPI+OpenMP混合并行的结构网格区域划分方法
CN110764934B (zh) * 2019-10-24 2020-11-27 清华大学 面向数值模型的并行通信方法、装置、系统和存储介质
CN114764346A (zh) * 2021-01-14 2022-07-19 华为技术有限公司 一种数据传输方法、系统以及计算节点
CN112861333B (zh) * 2021-01-29 2022-11-15 中国海洋大学 基于OpenMP和MPI的电磁波与等离子体作用的计算方法及装置
CN113297729B (zh) * 2021-05-13 2022-08-09 中国人民解放军军事科学院战争研究院 一种基于实体类型的并行仿真实体划分方法
CN113392472B (zh) * 2021-08-17 2021-11-09 北京航空航天大学 一种飞行器气动特性模拟的OpenMP并行扰动域更新方法
CN113900808B (zh) * 2021-10-09 2024-09-20 合肥工业大学 一种基于任意多面体非结构网格的mpi并行数据结构
CN113791912B (zh) * 2021-11-11 2022-02-11 中国空气动力研究与发展中心计算空气动力研究所 基于mpi+x的dsmc并行计算方法、设备及介质
CN116128093B (zh) * 2022-11-16 2024-02-02 河北省气象灾害防御和环境气象中心(河北省预警信息发布中心) 一种融合机器学习和数值模拟的减排效果快速评估方法
CN117573375B (zh) * 2024-01-15 2024-04-02 上海交通大学四川研究院 一种面向自适应解耦方程的动态负载平衡并行计算方法
CN118714020A (zh) * 2024-08-21 2024-09-27 浙江大学 一种计算机网络拓扑结构及计算域划分方法、计算机系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103324531A (zh) * 2013-06-09 2013-09-25 浪潮电子信息产业股份有限公司 一种基于格子Boltzmann理论CPU/MIC协同计算的大涡模拟方法
CN104375882A (zh) * 2014-11-21 2015-02-25 北京应用物理与计算数学研究所 匹配于高性能计算机结构的多级嵌套数据驱动计算方法
CN104461467A (zh) * 2013-09-25 2015-03-25 广州中国科学院软件应用技术研究所 针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2804105B1 (en) * 2013-05-17 2015-10-07 Fujitsu Limited Method of improving fault tolerance in a computing system arranged to find a computational solution

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103324531A (zh) * 2013-06-09 2013-09-25 浪潮电子信息产业股份有限公司 一种基于格子Boltzmann理论CPU/MIC协同计算的大涡模拟方法
CN104461467A (zh) * 2013-09-25 2015-03-25 广州中国科学院软件应用技术研究所 针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法
CN104375882A (zh) * 2014-11-21 2015-02-25 北京应用物理与计算数学研究所 匹配于高性能计算机结构的多级嵌套数据驱动计算方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
地下水流动空间数据并行计算的研究;李丹丹;《中国博士学位论文全文数据库 基础科技辑》;20140815;摘要、第4.4节、图4-21 *
基于SMP集群系统的MPI-OpenMP混合并行FDTD算法研究;朱良杰等;《现代电子技术》;20110715;第34卷(第14期);第2.2节、图2 *

Also Published As

Publication number Publication date
CN108595277A (zh) 2018-09-28

Similar Documents

Publication Publication Date Title
CN108595277B (zh) 一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法
WO2018133348A1 (zh) 一种静态安全分析计算方法、装置及计算机存储介质
CN109919310B (zh) 一种面向深度学习训练任务的gpu内存优化方法及系统
CN103617150A (zh) 一种基于gpu的大规模电力系统潮流并行计算系统及其方法
CN104461467A (zh) 针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法
CN111639054B (zh) 一种海洋模式与资料同化的数据耦合方法、系统及介质
CN101639788B (zh) 一种基于tbb线程构建块的连续系统仿真多核并行方法
Shi et al. A DAG model of synchronous stochastic gradient descent in distributed deep learning
CN114970294B (zh) 基于神威架构的三维应变仿真pcg并行优化方法及系统
CN111858066A (zh) 气体动理论统一算法中的cpu+gpu异构并行优化方法
Wang et al. Cloud-based parallel power flow calculation using resilient distributed datasets and directed acyclic graph
CN102306141A (zh) 一种描述动态可重构阵列配置信息的方法
CN112035995A (zh) 基于gpu计算技术的非结构网格潮汐潮流数值模拟方法
CN111008042B (zh) 基于异构流水线的高效通用处理器执行方法及系统
CN101840329A (zh) 一种基于图拓扑结构的数据并行处理方法
CN103235717B (zh) 具有多态指令集体系结构的处理器
CN102023846B (zh) 基于单片多处理器系统的共享前端流水线结构
CN109038543B (zh) 一种基于cpu+gpu混合异构的状态估计计算方法
CN102750428B (zh) 供水管网节点水力计算方程并行算法分区域构造方法
CN103984832A (zh) 一种铝电解槽电场仿真分析方法
Lin et al. swFLOW: A dataflow deep learning framework on sunway taihulight supercomputer
CN112559032A (zh) 基于循环段的众核程序重构方法
Deng et al. CPU/GPU computing for an implicit multi-block compressible Navier-Stokes solver on heterogeneous platform
Liu et al. Massively parallel CFD simulation software: CCFD development and optimization based on Sunway TaihuLight
CN104166593A (zh) 一种计算多应用功能异步并发调度方法

Legal Events

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