基于mpi的网格并行预处理方法

文档序号:8445388阅读:1862来源:国知局
基于mpi的网格并行预处理方法
【技术领域】
[0001]本发明涉及一种并行预处理技术,具体地说,涉及一种网格并行预处理方法。
【背景技术】
[0002]在科学与工程计算领域中,网格对各类微分方程的数值求解具有重要意义,网格分布是求解计算的基础环境。微分方程的求解主要包括数值离散和代数方程组求解两步,在离散方法确定的情况下,网格分布信息能直接反映代数方程组解向量和系数矩阵的逻辑结构。随着并行计算的广泛应用,网格在微分方程的并行求解中扮演着十分重要的角色。对分布式并行计算而言,基于区域分解的网格划分和网格数据分布存储的并行执行是微分方程主要的并行求解途径。
[0003]网格划分通过建立网格单元与并行计算机多处理器的对应关系,将一个大规模复杂的网格划分成多个子网格。网格划分的好坏直接影响着并行计算的效率和求解算法的精确度,网格划分策略的关键在于如何将大网格进行划分,使得子网格较容易并行求解,并且能够达到各处理器上计算负载平衡和处理器间通信开销最小的目标。
[0004]数据分割和网格信息管理是网格并行预处理主要的耗时阶段,现有技术在网格预处理的数据分割和网格信息管理阶段,耗时长,效率低。对于网格的划分,现有的多层递归对分、行列划分等技术速度慢,划分质量不理想。现有网格预处理方案多为串行执行的方式,只能在单个CPU核上执行,同时多采用串行遍历网格文件,速度较慢。而且,现有网格预处理方案多将网格数据文件集中存储在一个或少数几个文件里,当数据规模较大时,会产生I/o文件读写堵塞,影响网格处理数据的规模和速度。

【发明内容】

[0005]本发明的目的在于提供一种基于MPI的网格并行预处理方法,采用ParMETIS实现高效快速的网格划分,采用分布式存储网格数据,提高了处理数据的规模和速度。
[0006]为了实现上述目的,本发明所采用的技术方案如下:
[0007]—种基于MPI的网格并行预处理方法,包括以下步骤:给定计算域的网格的分区数;启动MPI多进程,设定进程数;判断进程数是否等于分区数,若等于则打开网格文件,主进程读取网格单元信息文件,将网格单元平均初始分配到各个进程,每个进程创建网格单元的邻接数组,否则重新启动MPI多进程;每个进程调用ParMETIS对网格单元进行网格划分;每个进程将网格单元信息分块读到数组,设定数组的索引位置;每个进程循环遍历网格单元信息文件,判断数组长度减去数组的索引位置号是否小于网格单元信息长度,若小于则读取网格单元信息文件的数据填充到数组中,否则将数组元素赋值给网格单元,并修改数组的索引位置;判断网格单元的分区号是否等于进程号,若等于则将网格单元信息存储到进程文件中,否则修改数组索引位置,继续循环判断。
[0008]进一步,计算域的网格的分区数小于或等于并行计算机的处理器数。
[0009]进一步,邻接数组的存储格式为CSR。
[0010]进一步,每个进程调用ParMETIS的子程序ParMETIS_V3_Mesh2Dual,将网格单元转化成图。
[0011]进一步,每个进程调用ParMETIS的子程序ParMETIS_V3_AdaptiveRepart,对图进行重划分。
[0012]进一步,每个进程调用ParMETIS的子程序ParMETIS_V3_Ref ineKway,进一步精化网格划分的质量。
[0013]与现有技术相比,本发明采用ParMETIS实现高效快速的网格划分,采用分布式存储网格数据,提高了处理数据的规模和速度。
【附图说明】
[0014]图1为本发明的网格并行预处理的流程示意图;
[0015]图2为本发明的网格分布式存储的流程示意图。
【具体实施方式】
[0016]下面结合附图和具体实施例对本发明基于MPI的网格并行预处理方法作进一步说明。
[0017]本发明采用基于MPI的分布式并行执行方式,通过ParMETIS并行网格分区和重分区功能,利用多层k-路图划分方法对三维网格进行高质量的划分。根据网格划分后的结果,启动多进程循环遍历网格文件,实现大规模网格的快速并行预处理。利用本发明基于MPI的网格并行预处理方法,能显著减少网格并行计算中的通信时间,提高并行计算效率。
[0018]ParMETIS (Parallel Graph Partit1ning and Fill-reducing MatrixOrdering)-并行图划分和填充-约化矩阵排序,特别适合于大规模无结构网格的并行数值模拟。ParMETIS基于MPI并行库,实现了用于无结构图划分、网格划分、计算稀疏矩阵的填充-约化次序等多种算法。ParMETIS扩展了 METIS所提供的功能,并包含了特别适合于并行计算和大规模数值模拟的子程序。ParMETIS中实现的算法有基于并行的多层k_路图划分算法,多层k-路图划分是一种基于图论的划分方法,通常有图的粗化算法、初始划分算法和还原优化算法组成。基于多层k-路图划分方法使各子图的顶点权值基本相同且划分产生的边截权数最小化,划分结果产生的通信时间与行列等其它划分方法相比大大降低,从而使得整个并行程序的执行时间能得到有效减少,并且随着数据规模的不断增大和处理器个数的增加,通信开销降低的效果更加明显。
[0019]网格划分完成之后,可随即获得各网格结点或单元与处理器的分配对应关系,接着需要根据此划分结果为网格信息的分布式存储进行数据分割。数据分割的主要实现过程是对所有处理器按结点或单元编号做遍历循环,对划分给当前处理器的结点或单元,把对应的数组元素与网格单元结点列表迁移到本地存储器中,最终在各个处理机内部生成局部的坐标数组与邻点矩阵,实现网格信息的分布式存储。
[0020]MPI是一种基于消息传递的并行编程模型,现被广泛应用于分布式存储结构的并行计算中。MPI通过MPI_Init函数初始化MPI执行环境,启动多个进程,创建多个MPI进程之间的通信域。基于MPI的分布式并行执行策略,是一种粗粒度的并行算法,通过将有限元网格计算区域划分成与进程数相等的子区域数,然后将这些子区域的网格数据映射到每个进程上并行预处理。由于每个进程只负责各自子区域的预处理,只在网格子区域边界面上产生通信,数据通信量少,因此能获得很好的并行预处理的效果。
[0021]请参阅图1,本发明提供的网格并行预处理的方案,在计算机上启动MPI多进程,设定执行ParMETIS分区任务的进程数,即创建ParMETIS的通信域。利用ParMETIS并行区域分解工具,仓Il建网格单元的邻接数组xadj和adjncy,作为ParMETIS功能函数的输入参数,将网格转化成图,再将图进行重分区。重分区结果能实现并行计算的负载平衡和较少的分区边界数,从而减少并行计算的通信时间,显著提高网格并行计算的效率。ParMETIS网格划分结果建立了网格单元或结点与处理器进程间的一一对应关系,各进程根据该划分结果循环遍历网格信息文件,通过定位文件指针和数组索引的方法分块读网格数据,对划分给当前处理器的结点或单元,把对应的数组元素与网格单元结点列表迁移到本地存储器中,最终在各个处理器内部生成局部的坐标数组与邻接矩阵,快速实现网格信息的分布式存储。本发明定位文件指针和数组索引分块读的方法,大量减少了读文件的操作,而且有效避免了多进程同时读文件产生的竞争等待时间消耗。
[0022]请参阅图1和图2,网格数据分布式存储完成后,各进程采用链表数据结构,将构成本地网格单元的所有网格结点进行插入排序,以索引链表表示本地网格结点的局部索弓丨,创建网格结点的局部索引。各进程对网格单元进行重排序,改善求解线性方程组稀疏矩阵的品质,并对排序后的网格单元设置进程间通信关系索引,最后各进程保存本地稀疏矩阵等数据用作方程的并行求解。本发明中的高质量网格划分结果和高效快速的实现,为微分方程并行求解的精确性提供了保障,同时为大规模网格在数值模拟中的应用提供了方便。
[0023]请参阅图2,本发明公开了一种基于MPI的网格并行预处理方法,包括以下步骤:给定计算域的
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1