CN111177979A - 一种基于OpenMP对流体动力学软件GASFLOW的优化方法 - Google Patents
一种基于OpenMP对流体动力学软件GASFLOW的优化方法 Download PDFInfo
- Publication number
- CN111177979A CN111177979A CN201911027476.3A CN201911027476A CN111177979A CN 111177979 A CN111177979 A CN 111177979A CN 201911027476 A CN201911027476 A CN 201911027476A CN 111177979 A CN111177979 A CN 111177979A
- Authority
- CN
- China
- Prior art keywords
- parallel
- module
- program
- openmp
- gasflow
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
申请专利为一种基于OpenMP对流体动力学软件GASFLOW的优化方法,具体实现过程为:首先获取不同工况下程序各模块的计算用时占比,随后依次优化占时比最高的使用预处理的共轭残差法求解N‑S方程中大型稀疏对称矩阵的部分以及湍流模块和燃烧模块的代码,最后添加人工控制接口。该种基于OpenMP对流体动力学软件GASFLOW的优化方法与原有的流体动力学软件GASFLOW相比,并行加速方法修改简单,改动方法适用于其他使用相同的ICE’d‑ALE算法的流体动力学软件;充分利用单节点多核心架构的计算集群,并行效果好,有很好的科研和工程应用价值。采用该方法在4核CPU的电脑上可以达到阿姆达尔定律算得的理论比的90%加速效率。
Description
技术领域
本发明涉及核电站安全领域,更具体地,涉及一种基于OpenMP对流体动力学软件GASFLOW的优化方法。
背景技术
在福岛核电站核泄漏事故之后,各国政府都开始重视核电站的安全问题。在2012年6月26日出台了关于印发《福岛核事故后核电厂改进行动通用技术要求(试行)》的通知,在通知中要求核电厂“开展严重事故下安全壳内氢气分布的分析、氢气监测与控制措施有效性的评估,以及氢气监测与控制系统在严重事故情况下的功能和设备要求。”所以对核工流体动力学软件的开发和优化都变得格外重要。
GASFLOW是一款在核电站安全领域被广泛应用的开源流体动力学软件,用它模拟严重事故下氢气在安全壳内分布的结果得到了国内外的一致认可。在核工程方面的数值模拟具有以下特点:模型复杂且网格数量多;模拟的气体环境有高速气流和低速气流并存的复杂工况;热工水力现象经常需要持续几小时或更长。所以GASFLOW计算复杂案例一次工况通常需要数周计算时间。
为了能够很好的模拟上面提到的复杂的核工程问题,GASFLOW采用的核心计算流体算法为隐式连续欧拉-任意拉格朗日欧拉方法(Implicit Continuous Eulerian-Arbitrary Lagrangian Eulerian,简称ICE’d-ALE)。该算法第一步进行显式拉格朗日计算,在这一步中,考虑流场中所有物理、化学过程对密度、动量和能量的影响。第二步进行隐式拉格朗日压力迭代,求解对流项中的压力部分。压力迭代方程为七对角泊松方程,属于大型稀疏对称矩阵。采用预处理的共轭残差法求解之后,再更新其他求解变量。第三步,执行质量、动量和能量等对流通量项的计算,更新对应的物理量。其中第二步使用预处理的共轭残差法求解大型稀疏对称矩阵为整个GASFLOW最主要的计算部分,耗时远大于其他部分。
OpenMP算法采用共享内存式并行编译模型,并行应用程序中的进程通过对共享内存区的读写操作来实现相互通信。它的执行模型采用派生-会合(fork-join)的形式。单线程的主进程(Master Thread)在执行任务中遇到遇到并行代码端时,程序根据参数和处理器核数派生出几个分线程来同步执行任务。在并行计算时,主进程和派生的分线程在内存共享的情况下协同工作,等到并行任务执行完成,派生的子进程挂起,仅保留单线程的主进程。一般情况下使用OpenMP并行对原始的串行代码修改少,适合在已有的串行程序的基础上渐进式添加并行。现有的超级计算机架构中,每个节点内有多个CPU,每个CPU有多个核。OpenMP算法作为多核并行加速的算法,在超级计算机和单节点多核的小型机上都能起到良好的加速效果。
由于GASFLOW是开源软件,而且算法适合核工环境,所以核工中一些新型流体动力学软件都采用了ICE’d-ALE作为核心算法。然而GASFLOW现在研究的MPI并行算法加速,由于MPI本身的局限性,串行程序需要重新编写,工程量浩大,对程序员要求高,只能在多节点的超算机上才有加速效果,而且还有进一步采用OpenMP优化的空间。
发明内容
为了克服现有并行优化技术的缺陷和不足,本发明提出了一种基于OpenMP对流体动力学软件GASFLOW的并行优化方法,主要解决GASFLOW和使用相同的ICE’d-ALE算法的流体动力学软件计算耗时长、并行优化工作量大且难、只利用了多核CPU的一个核的低效率等问题。
为了实现上述目的,本发明采用的技术方案为一种基于0penMP对流体动力学软件GASFLOW的并行优化方法。该方法包括以下内容。
一、首先利用OpenMP自带的函数omp_get_wtime()来获得GASFLOW中各程序段的计算用时占程序总时长的比值。为了更好地得到不同模块的计算用时占比,让程序优化有泛用性,在测试中分别测试了带有燃烧、湍流、冷凝和氢气复合器等不同求解器的复杂算例。最终得到程序的主要耗时用在ICE’d-ALE算法求解N-S方程第二步,使用预处理的共轭残差法求解大型稀疏对称矩阵的部分。该部分的计算用时约占计算总时长的60%。
二、保留其他程序段的内容不变,仅对共轭残差法部分的程序进行优化重写。
根据上一步测时间的结论,在保留程序其他模块不变的情况下,先对预处理的共轭残差法部分进行并行优化处理,其他区域的代码原封不动的保留就可以让程序正常运行。
根据预处理的共轭残差算法,对于给定系数矩阵A,右端项b,初始近似向量x0,以及计算精度e>0,求解Az=b的解向量z。
步骤一:首先程序生成初始近似向量x0,
并且算出M≈A为A的预处理矩阵,
计算残差向量:
r0=b-Ax0
q0=0
步骤二:计算搜索向量,解向量和残差向量
k=1,2,...,n
βk=-(rk-1,qk-1)/(qk-1,Apk-1)
pk=rk-1+βkpk-1
求解:Mqk=Apk得到qk
αk=-(rk-1,Ark-1)/(qk,Apk)
xk-1=xk-1+αkpk
rk=rk-1-αkqk
其中k为迭代次数,x为估计解向量,r为解向量
步骤三:验证残差收敛
rk=rk-1-αkAqk
当1≤m≤n时,如果[rk]m<e则退出循环,认为结果已收敛,rk就是我们需要的解向量,不然就回到步骤二继续迭代,迭代次数k加1,直到结果收敛为止。
由上面的算法可知,在程序中有大量的数组间的乘法运算。需要用到复杂的嵌套循环。因为原程序在编写中,没有考虑到OpenMP并行优化的问题,如果直接添加并行指令会产生数据依赖等问题导致计算错误。OpenMP并行算法本身,创建、管理、销毁和同步化线程所需的开销因fork-join转换的次数的增加而增加。所以这部分改写内容中主要利用共轭残差法理论的特点通过重整循环结构来解决数据依赖问题并增大并行的粒度来减少开销。采用动态调度的命令来减少各进程负载不均衡的影响。此外通过合并数组和循环交换来改进高速缓冲存储器的性能。
三、在第一步的测试中注意到,在GASFLOW程序的求解中,预处理的共轭残差法用时部分约占60%。那么其他模块的的并行加速对速度带来的提升也是很可观的。上一步分析中提到了如果循环节内的计算量太小,OpenMP并行带来的速度提升会被程序fork-join的开销抵消。最后经过测试,在程序的燃烧模块和湍流计算模块也添加了并行代码。优化方式与步骤二相同。并且通过if指令,只有循环数足够大的情况下才启动并行。
四、为程序增添人工控制接口,可以人为定义并行线程数,在缺省条件下程序自动把并行线程数设置为最大线程数来获得最大加速比。
本发明的有益效果和特点为:用OpenMP并行加速程序修改简单,改动方法适用于其他使用相同的ICE’d-ALE算法的流体动力学软件;充分利用单CPU多核心的CPU架构,并行效果好,有很好的科研和工程应用价值。
具体实施方式
下面结合实施例对本发明做进一步说明。
基于OpenMP对流体动力学软件GASFLOW的优化,几个关键实施过程如下:
第一步、获取流体动力学软件各模块计算用时。
因为GASFLOW程序编写复杂,各模块之间调用频繁,利用OpenMP自带的函数omp_get_wtime()可以准确的获得程序运行到该行代码时的系统时间。在每个计算功能模块前后使用该代码,之后将两者求差可以获得程序运行一次该模块使用的时间。由于程序中主要的计算模块都需要多次迭代。所以通过累加求和的方式获得该模块在程序工作中的实际用时占比。为了使程序优化有泛用性,在测试中在测试中分别测试了带有燃烧、湍流、冷凝和氢气复合器等不同求解器的复杂算例。得出了程序的主要耗时用在ICE’d-ALE算法求解N-S方程第二步,使用预处理的共轭残差法求解大型稀疏对称矩阵的部分。该部分的计算用时占计算总时长的60%的结论,指导了后面的优化重点方向。
第二步、对共轭残差法部分的程序进行优化重写。以下为根据GASFLOW的fortran代码改写测试用的C++代码。实际程序的优化包括且不仅限于以下的用法。
示例1原代码:
改写后代码:
上面这个示例中,优化前是以k和m为变量的嵌套循环。K为模型z方向的网格数,数值比较小,如果在k外层加并行会导致负载不均衡的问题,而且需要的私有变量也很多。如果只对m进行循环,会导致颗粒度过小,大量的并行开销用在线程的创建和销毁。
优化后,通过预先计算mstart和mend的变量值,将优化前以优化成了只有m做变量的单循环。看似代码变得复杂,实际增大了颗粒度,并行测试效果明显。使用num_threads(numberofthreads)子句,通过调整输入卡内变量numberofthreads的值来调整程序运行的并行数,便于测试和实际计算。
ij=ij+1命令如果在OpenMP并行中使用,会产生数据依赖,因为多线程同时给ij赋值导致结果混乱,所以需要private子句降其变更成私有变量。schedule(dynamic)为动态调度子句,保证了程序的负载均衡。
示例2原代码:
改写后代码:
这段代码是共轭残差法通过Mqk=Apk得到qk的关键部分代码。由于安全壳内模型的边界和模型内部障碍物的条件复杂,不同高度的气体空间的网格分布往往不一样。所以在该段程序中,内循环的初值和终值取决于外循环的循环变量,这种情况就只能对内循环进行并行处理。
示例3原代码:
改写后代码:
本段是迭代求解解向量x的部分代码,这个示例里的for循环有多了循环变量和不同的变量条件,原本无法并行处理。改写后重新确认新的循环变量ii的取值范围,使该循环可以并行。
示例4:为了提高CPU的高速缓冲存储器的性能,在代码中合并了一些可以同时处理的单循环。并且交换了一些数组的内外循环结构来保证嵌套循环的外循环为行主导,减少访存浪费。
第三步、联合第一二步的经验获知在部分算例中燃烧模块和湍流模块的计算用时也很长,有并行优化的价值。采用与第二步相同的方式对两个模块的代码进行处理。此外因为分析中提到了如果循环节内的计算量太小,OpenMP并行带来的速度提升会被程序fork-join的开销抵消。所以在两个模块中额外增加了判断子句,只有两个模块开启并且计算量足够大的时候才开启并行运算。
第四步、为程序增添人工控制接口通过输入卡中numberofthreads参数来调整并行线程数量。方便人为定义并行线程数,在缺省条件下程序自动把并行线程数设置为最大线程数来获得最大加速比。实际测试中,程序在4线程并行的时候,加速区域可以获得2.58倍的加速比,整体加速比1.67,此时由阿姆达尔定律算得的理论加速比为1.82。经比对加速效果很好,有科研和工程应用价值。
而且经过OpenMP并行优化方案之后,该程序还可以与MPI并行优化相结合,为OpenMP/MPI混合优化做铺垫,此时现有的OpenMP优化都可以保留,不需要额外的处理。
Claims (2)
1.一种基于OpenMP对流体动力学软件GASFLOW的优化方法,其特征在于以下步骤:
1)首先通过omp_get_wtime()指令对复杂的各模块代码计时并累计求和,统计出不同工况下各模块的计算耗时,找出耗时最大的主要模块,GASFLOW程序里为N-S方程中使用预处理共轭残差法求解大型稀疏对称矩阵的部分;
2)对于该预处理共轭残差法求解计算模块采用OpenMP并行优化方案;
3)在未改动其他代码的情况下,对燃烧模块和湍流模块进行了同样的优化。关键是增加了判断语句,根据计算量和最大进程数选择适合的进程数来使程序达到最快计算效果,避免小模块开启并行或者中等模块开启过多线程导致的计算减速,保证程序并行的加速效果;
4)增加对程序并行线程数控制的接口,保证程序符合用户的需求。
2.根据权利要求1所述的对于该预处理的共轭残差法求解计算模块采用OpenMP并行优化方案,其特征在于:
1)使用private子句避免数据依赖;
2)使用schedule(dynamic)子句保证负载均衡;
3)将嵌套循环改写成单循环来增大粒度;
4)合并循环和交换内外侧循环来提高CPU的高速缓冲存储器的性能;
5)在共轭残差法Mqk=Apk计算中,对获得工作数组qk以及解向量x的代码重新改写,保证了并行功能的实现。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911027476.3A CN111177979A (zh) | 2019-10-19 | 2019-10-19 | 一种基于OpenMP对流体动力学软件GASFLOW的优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911027476.3A CN111177979A (zh) | 2019-10-19 | 2019-10-19 | 一种基于OpenMP对流体动力学软件GASFLOW的优化方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111177979A true CN111177979A (zh) | 2020-05-19 |
Family
ID=70651820
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911027476.3A Pending CN111177979A (zh) | 2019-10-19 | 2019-10-19 | 一种基于OpenMP对流体动力学软件GASFLOW的优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111177979A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113850032A (zh) * | 2021-12-02 | 2021-12-28 | 中国空气动力研究与发展中心计算空气动力研究所 | 一种数值模拟计算中的负载均衡方法 |
-
2019
- 2019-10-19 CN CN201911027476.3A patent/CN111177979A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113850032A (zh) * | 2021-12-02 | 2021-12-28 | 中国空气动力研究与发展中心计算空气动力研究所 | 一种数值模拟计算中的负载均衡方法 |
CN113850032B (zh) * | 2021-12-02 | 2022-02-08 | 中国空气动力研究与发展中心计算空气动力研究所 | 一种数值模拟计算中的负载均衡方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9038088B2 (en) | Load balancing on hetrogenous processing cluster based on exceeded load imbalance factor threshold determined by total completion time of multiple processing phases | |
Xu et al. | Collaborating CPU and GPU for large-scale high-order CFD simulations with complex grids on the TianHe-1A supercomputer | |
CN102193830B (zh) | 面向众核环境的分治映射/归约并行编程模型 | |
CN102708088A (zh) | 面向海量数据高性能计算的cpu/gpu协同处理方法 | |
CN101833438A (zh) | 一种基于多重并行的数据通用处理方法 | |
CN109088776B (zh) | 一种基于超级计算机的并行cfd计算与通信重叠优化方法 | |
CN114970294A (zh) | 基于神威架构的三维应变仿真pcg并行优化方法及系统 | |
CN111177979A (zh) | 一种基于OpenMP对流体动力学软件GASFLOW的优化方法 | |
Nomizu et al. | Implementation of xcalablemp device acceleration extention with opencl | |
Xu et al. | Balancing cpu-gpu collaborative high-order cfd simulations on the tianhe-1a supercomputer | |
Pilla et al. | Asymptotically optimal load balancing for hierarchical multi-core systems | |
Zheng et al. | GPU-based multifrontal optimizing method in sparse Cholesky factorization | |
Wan et al. | HCE: a runtime system for efficiently supporting heterogeneous cooperative execution | |
CN111090508B (zh) | 一种基于OpenCL的异构协同并行计算中设备间动态任务调度方法 | |
Huang et al. | A novel multi-CPU/GPU collaborative computing framework for SGD-based matrix factorization | |
CN106383961A (zh) | Cpu+mic异构平台下的大涡模拟算法优化处理方法 | |
CN102981805B (zh) | 串行软件的响应方法和系统 | |
CN105335226A (zh) | 针对多处理器系统的迭代式静态任务列表调度算法 | |
CN112148361B (zh) | 一种用于处理器加密算法移植的方法及系统 | |
Li et al. | A cuda-Based multi-Channel particle swarm algorithm | |
Lei et al. | MIC-THPCM: MIC-based heterogeneous parallel optimization for axial compressor rotor | |
Liu et al. | A Spark-based parallel simulation approach for repairable system | |
Lupo et al. | Enhancing regional ocean modeling simulation performance with the Xeon Phi architecture | |
Li et al. | Gpu-s2s: a compiler for source-to-source translation on gpu | |
Dudnik et al. | Cuda architecture analysis as the driving force Of parallel calculation organization |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
DD01 | Delivery of document by public notice |
Addressee: Zhu Siwen Document name: Deemed withdrawal notice |
|
DD01 | Delivery of document by public notice |