基于mpi+x的dsmc并行计算方法、设备及介质

文档序号:1963587 发布日期:2021-12-14 浏览:17次 >En<

阅读说明:本技术 基于mpi&#43;x的dsmc并行计算方法、设备及介质 (MPI &#43; X-based DSMC parallel computing method, equipment and medium ) 是由 邓亮 代喆 丁鑫 王昉 赵丹 王岳青 陈呈 周永国 于 2021-11-11 设计创作,主要内容包括:本发明公开了一种基于MPI+X的DSMC并行计算方法、设备及介质,其中方法包括以下步骤:根据计算的节点数目和节点内可用CPU核数对网格进行分区,将其划分为多个独立的分区文件;初始化MPI即粗粒度多进程,各进程载入网格数据;各进程对载入的所述网格数据分别进行相应的预处理;各进程分别启用多线程并行计算各自分区内的粒子运动;各进程分别对各自分区内的粒子索引进行排序编号;各进程分别对各自分区内的粒子进行碰撞计算;各进程分别对各自的子区域流场性质进行采样;迭代步数如果达到阈值,则进行相应的后处理并输出结果文件。本发明将粗粒度多进程与细粒度多线程有效结合,可以大大减少通信量和通信次数,有效提升并行效率。(The invention discloses a method, equipment and a medium for parallel computing of DSMC based on MPI &#43; X, wherein the method comprises the following steps: partitioning the grid according to the calculated number of the nodes and the number of available CPU cores in the nodes, and dividing the grid into a plurality of independent partition files; initializing MPI (multi-process interface), namely coarse-grained multi-process, and loading grid data into each process; each process respectively carries out corresponding preprocessing on the loaded grid data; each process respectively starts multithreading and calculates the particle motion in each partition in parallel; each process respectively carries out sequencing numbering on the particle indexes in the respective subareas; each process carries out collision calculation on the particles in each partition; each process respectively samples the flow field property of each sub-region; and if the iteration step number reaches the threshold value, performing corresponding post-processing and outputting a result file. The invention effectively combines coarse-grained multi-process and fine-grained multi-process, can greatly reduce communication traffic and communication times, and effectively improves the parallel efficiency.)

基于MPI+X的DSMC并行计算方法、设备及介质

技术领域

本发明涉及高性能计算技术领域,尤其涉及一种基于MPI+X的DSMC并行计算方法、设备及介质。

背景技术

直接模拟蒙特卡洛(Direct Simulation Monte Carlo, DSMC)方法由Bird提出(Bird G A,Direct simulation and the Boltzmann equation[J]. 1970),该方法是目前求解稀薄气体动力学领域真实气体流动问题中唯一有效的选择。同时,非结构网格具有对复杂外形的高度适体性,通用性高,已成为DSMC方法的主流。然而,非结构DSMC方法的计算量十分巨大,导致DSMC在工程应用中成为一项十分耗时和昂贵的工作。因此,基于高性能计算平台,开展DSMC并行计算研究具有较好的实际应用价值。

传统的DSMC并行方法是采用区域分解的方式进行并行计算,以网格区块为组织单元,并行MPI进程或OpenMP线程负责若干网格区块的计算,按照网格区块进行循环处理。王学德基于MPI的主从模式,实现了非结构DSMC并行计算,使用32核进行计算获得了23.82的加速比(王学德. 高超声速稀薄气流非结构网格DSMC及并行算法研究[D]. 2006.)。黄飞等人发展了基于对等模式的非结构DSMC并行方法,与主从模式相比,对等模式的计算开销更少、并行效率更高,使用32核获得了65%左右的并行效率(黄飞,苗文博,程晓丽,等. 一种DSMC方法的并行策略[J]. 2014)。李学东等人基于OpenMP共享内存并行编程模型,实现了非结构DSMC的细粒度OpenMP并行计算,使用双核Intel(R) Xeno(TM)处理器实现了约为1.86的加速比(李学东,王保国. 稀薄气体高超声速流动的非结构DSMC并行化计算[J].2010)。Da Gao等人研究了三维DSMC线程级OpenMP并行算法设计及其优化方法,在双核Intel Core2 Duo CPU E6750和四核Intel Xeon Quad Core CPU X5550上分别取得了1.99的加速比和3.79的加速比(DA GAO, THOMAS E. SCHWARTZENTRUBER. Optimizations andOpenMP implementation for the direct simulation Monte Carlo method[J].2011)。然而,在同构体系架构下,已有工作的并行规模较小,并行算法与硬件体系架构的适配程度有待进一步提高。

GPU作为通用计算设备具有较长的历史,国内外学者结合GPU体系结构的特征和DSMC算法的特点,设计了多种GPU并行算法。Gladkov基于统一计算设备架构(ComputeUnified Device Architecture, CUDA)编程模型,设计了适合GPU的高效随机数生成算法,优化了网格边界条件判断算法,实现了DSMC方法的GPU并行计算,相较于Intel Core i7CPU单核,单张Tesla C2050 GPU并行加速比最高可达10倍(Gladkov D , Tapia J J,Alberts S , et al. Graphics Processing Unit based direct simulation MonteCarlo[J].2012)。Su等人基于MPI-CUDA并行编程模型,实现了面向异构平台的大规模DSMC并行算法,使用3000万仿真粒子的二维算例进行计算,与Intel Xeon X5670 CPU单核相比,单张M2070 GPU和16张M2070 GPU的加速比分别为15和185(Su C C , Smith M R , Kuo FA , et al. Large-scale simulations on multiple Graphics Processing Units(GPUs) for the direct simulation Monte Carlo method[J].2012)。Kashkovsky等人提出了基于多GPU的DSMC并行方法,最大实现了48张GPU卡的并行计算,与Intel Xeon E5420CPU单核相比,单张M2090 GPU的加速比为30(Kashkovsky, Alexander. 3D DSMCComputations on a Heterogeneous CPU-GPU Cluster with a Large Number of GPUs[J].2014)。Goldsworthy提出了自适应网格下的DSMC异构GPU并行算法,在1300万仿真粒子的无反应流算例中,在单张Tesla C2050 GPU上可获得20倍的加速比(Goldsworthy, M. J. A GPU-CUDA based direct simulation Monte Carlo algorithm for real gas flows[J].2014)。在异构体系架构下,已有工作主要是基于CUDA编程模型的结构网格DSMC应用的GPU并行计算,应用范围有限,可移植性较差。此外,针对非结构网格DSMC应用,研究基于OpenACC编程模型异构并行算法的相关工作较少。

发明内容

为了解决上述问题,本发明提出一种基于MPI+X的DSMC并行计算方法、设备及介质,将粗粒度多进程MPI与细粒度多线程有效结合,充分利用硬件特性,可以大大减少通信量和通信次数,有效提升并行效率,降低DSMC的计算成本。

本发明的目的是通过以下技术方案实现的:

一种基于MPI+X的DSMC并行计算方法,包括以下步骤:

步骤1、根据计算的节点数目和节点内可用CPU核数对网格进行分区,将其划分为多个独立的分区文件;

步骤2、初始化MPI即粗粒度多进程,各进程载入网格数据;

步骤3、各进程对载入的所述网格数据分别进行相应的预处理,若为新的计算,各进程初始化子区域流场;若为续算,则各进程根据标识信息读取本进程的流场信息及仿真粒子信息;

步骤4、各进程分别启用多线程并行计算各自分区内的粒子运动;

步骤5、各进程分别对各自分区内的粒子索引进行排序编号;

步骤6、各进程分别对各自分区内的粒子进行碰撞计算;

步骤7、各进程分别对各自的子区域流场性质进行采样;

步骤8、迭代步数如果达到阈值,则各进程按进程号分别向临时文件中输出本进程的所有网格及仿真粒子的相关信息,同时将各自的流场结果以多区非结构网格形式进行结果输出,否则返回步骤4。

进一步地,所述网格数据包括来流参数信息、循环控制信息以及各自的网格分区文件。

进一步地,网格划分的分区数为进程数的整数倍,一个进程能够处理多个网格分区,不同进程对网格分区的处理并行进行。

进一步地,对于粒子运动超出原本分区边界的粒子,通过进程间的MPI通信发送到粒子移动到的分区对应的进程。

进一步地,对于同一分区内粒子的移动和碰撞计算,依据计算平台的体系架构选取不同并行计算方法,若为同构架构,则选取MPI+OpenMP混合并行编程模型;若为异构架构,则选取MPI+OpenACC混合并行编程模型,CPU和GPU的数据传输存在于步骤4和6。

进一步地,若选取MPI+OpenACC混合并行编程模型,则使用OpenACC进行GPU加速时,通过统一内存模型将CPU和GPU的内存空间映射为统一的公共内存空间,自动管理CPU和GPU之间的动态数组的访问。

一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述基于MPI+X的DSMC并行计算方法的步骤。

一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现上述基于MPI+X的DSMC并行计算方法的步骤。

本发明的有益效果在于:

相比于现有技术,本发明将粗粒度多进程(MPI)与细粒度多线程(OpenMP/OpenACC)有效结合,充分利用硬件特性,可以大大减少通信量和通信次数,有效提升并行效率,降低DSMC的计算成本。具体有如下优点:

(1)进程间通信打包:当粒子移动到的目的分区不属于本进程处理的分区范围时,这需要将该粒子信息通过MPI通信同步到穿越后的分区所属的MPI进程,本发明通过将这类粒子的所有信息打包然后仅通过一次通信来完成信息同步,从而避免多次通信带来的额外开销。

(2)MPI和OpenMP混合两级并行:通过OpenMP线程共享内存的特性可明显减少不同进程间的通信开销,同时启用的进程数减少意味着所需最小分区数也会减少,从而有效降低预处理过程的网格分区时间开销。

(3)MPI和OpenACC混合两级并行:通过添加OpenACC相关的编译指导语句将DSMC中的热点函数置于GPU端进行计算,充分利用GPU的超强计算能力来对DSMC进行有效加速,同时采用CUDA统一内存模型管理动态数据,消除了在GPU内核中访问结构体数据时需要深度拷贝的障碍,提高了DSMC应用的易用性。

附图说明

图1是MPI+X混合并行结构图。

图2是本发明实施例1的基于MPI+OpenMP的DSMC并行计算方法流程图。

图3是本发明实施例2的基于MPI+OpenACC的DSMC并行计算方法流程图。

具体实施方式

为了对本发明的技术特征、目的和效果有更加清楚的理解,现说明本发明的具体实施方式。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明,即所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明的实施例将提供两种基于大规模非结构的DSMC并行计算方法,包括MPI+OpenMP同构混合并行,以及MPI+OpenACC异构混合并行。本发明通过基于粗粒度多进程(MPI)和细粒度多线程(OpenMP/OpenACC)的两级混合并行编程模型对现有的DSMC算法进行并行处理,充分发掘多核CPU和众核GPU的计算潜力,提升DSMC方法的计算速度,以满足DSMC应用对求解规模和速度的需求。

实施例1

如图1和图2所示,本实施例提供了一种基于MPI+OpenMP的DSMC并行计算方法,包括以下步骤:

步骤1、对原网格进行分区,即划分为多个相互独立的小网格,并存放到多个分区文件中;

步骤2、初始化各个进程,然后从参数文件以及各自的分区文件中读取网格数据;

步骤3、各进程同时对读入的网格数据进行相应的预处理;

步骤4、各进程分别启用OpenMP多线程并行计算各自分区内的粒子运动和壁面碰撞;多线程并行计算过程中,使用OpenMP规约子句解决存在数据累加的写冲突数据,使用线程互斥区间解决除累加以外的其他数据冲突,对于粒子穿过分区边界面的情况,当这类粒子穿越的目的分区不属于本进程处理的分区范围时,先将该粒子进行标记,待OpenMP多线程并行计算结束后,将标记粒子暂存到一个临时缓存区,待MPI进程同步后,再通过进程间的MPI通信将缓存区中的粒子发送到穿越后的分区所属的MPI进程;

步骤5、待所有进程结束粒子移动的计算后,各进程再对各自分区内运动后的粒子进行重新排序和整理,对网格内的粒子进行重新编码;

步骤6、各进程分别对各自分区内的粒子进行碰撞计算,单个进程对分区内的多个网格单元进行OpenMP多线程并行计算,对于存在的写冲突问题采用和步骤4同样的方法解决;

步骤7、各进程分别对各自的子区域流场性质进行采样;

步骤8、迭代步数如果达到阈值,则各进程按进程号分别向临时文件中输出本进程的所有网格及仿真粒子的相关信息,同时将各自的流场结果以多区非结构网格形式进行结果输出,否则返回步骤4。

下面是粒子移动和碰撞的MPI+OpenMP相应的伪代码,对应上述步骤4和6:

Algorithm 1基于MPI+OpenMP混合并行的DSMC

Input: numThread表示线程数,zone表示分区,data_c表示单元数据,data_m表示粒子数据,data_ad表示含累加操作的数据,data_cache表示缓存区,data_thprivate表示线程私有数组;

1. Function Movemol(data_m,zone);

2. Initialdata_cache;

3. for each zone in MPI process;

4. !$omp parallel;

5. Initial data_thprivate;

6. !$ompdo reduction(+:data_ad);

7. for each moleculei;

8. update->data_m[i];

9. end for;

10. !$omp end do;

11. !$omp critical;

12. merge data_thprivate;

13. !$omp end critical;

14. !$omp end parallel;

15. end for;

16. updatadata_cache;

17. MPI_Barrier;

18. MPI_Communication(data_cache).

(以上对应上述步骤4)

1. Function Collisions(data_c,zone);

2. for each zone in MPI process;

3. !$omp parallel;

4. !$omp do reduction(+:data_ad);

5. for each cell i in zone;

6. update->data_c[i];

7. end for;

8. !$omp end do;

9. !$omp end parallel;

10. end for.

(以上对应上述步骤6)

实施例2

如图1和图3所示,本实施例提供了一种基于MPI+OpenACC的DSMC并行计算方法,包括以下步骤:

步骤1、对原网格进行分区,即划分为多个相互独立的小网格,并存放到多个分区文件中;

步骤2、初始化各个进程,然后从参数文件以及各自的分区文件中读取网格数据;

步骤3、各进程同时对读入的网格数据进行相应的预处理;

步骤4、设备端开辟所需内存空间,将固定常量从主机端通过PCIE同步到设备端;

步骤5、各进程分别将粒子运动和壁面碰撞所需数据传输到对应的GPU,设备端启用多线程并行计算;多线程并行计算过程中,使用OpenACC规约子句和原子操作解决存在数据累加的写冲突数据,对于粒子穿过分区边界面的情况,当这类粒子穿越的目的分区不属于本进程处理的分区范围时,先将该粒子进行标记,待设备端计算结束后,将计算结果同步到主机端,然后主机端将标记粒子暂存到一个临时缓存区,待MPI进程同步后,再通过进程间的MPI通信将缓存区中的粒子发送到穿越后的分区所属的MPI进程;

步骤6、待所有进程结束粒子移动的计算后,各进程再对各自分区内运动后的粒子进行重新排序和整理,对网格内的粒子进行重新编码;

步骤7、各进程分别将各自分区内进行碰撞计算所需的粒子信息传输到对应的GPU,设备端对相应分区内的多个网格单元进行多线程并行计算,碰撞计算结束后将结果同步到主机端;对于存在的写冲突问题采用和步骤5同样的方法解决;

步骤8、各进程分别对各自的子区域流场性质进行采样;

步骤9、迭代步数如果达到阈值,则各进程按进程号分别向临时文件中输出本进程的所有网格及仿真粒子的相关信息,同时将各自的流场结果以多区非结构网格形式进行结果输出,否则返回步骤5。

下面是粒子移动和碰撞的MPI+OpenACC相应的伪代码,对应上述步骤5和步骤7:

Algorithm 2基于MPI+OpenACC混合并行的DSMC

Input: numThread表示线程数,zone表示分区,data_c表示单元数据,data_m表示粒子数据,data_ad表示含累加操作的数据,data_cache表示缓存区;

1. Function Movemol(data_m,zone);

2. Initial data_cache;

3. for each zone in MPI process;

4. !$acc update device(data_m,zone);

5. !$acc parallel;

6. !$acc loop reduction(+:data_ad);

7. for each molecule i;

8. update->data_m[i];

9. end for;

10. !$acc end parallel;

11. !$acc update host(data_m);

12. end for;

13. updatadata_cache;

14. MPI_Barrier;

15. MPI_Communication(data_cache).

(以上对应上述步骤5)

1. Function Collisions(data_c,zone);

2. for each zone in MPI process;

3. !$acc update device(data_c,zone);

4. !$accparallel;

5. !$accloop reduction(+:data_ad);

6. for each cell i in zone;

7. update->data_c[i];

8. end for;

9. !$acc end parallel;

10. !$acc update host(data_c,data_ad);

11. end for.

(以上对应上述步骤7)

需要说明的是,对于前述的方法实施例1和2,为了简便描述,故将其表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。

实施例3

本实施例在实施例1或2的基础上:

本实施例提供了一种计算机设备,包括存储器和处理器,该存储器存储有计算机程序,该处理器执行该计算机程序时实现实施例1或2的DSMC并行计算方法的步骤。其中,计算机程序可以为源代码形式、对象代码形式、可执行文件或者某些中间形式等。

实施例4

本实施例在实施例1或2的基础上:

本实施例提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现实施例1或2的DSMC并行计算方法的步骤。其中,计算机程序可以为源代码形式、对象代码形式、可执行文件或者某些中间形式等。存储介质包括:能够携带计算机程序代码的任何实体或装置、记录介质、计算机存储器、只读存储器(ROM)、随机存取存储器(RAM)、电载波信号、电信信号以及软件分发介质等。需要说明的是,存储介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,存储介质不包括电载波信号和电信信号。

12页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种类脑计算机操作系统的任务迁移方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!