CN110633149B - 均衡非结构网格单元计算量的并行负载均衡方法 - Google Patents
均衡非结构网格单元计算量的并行负载均衡方法 Download PDFInfo
- Publication number
- CN110633149B CN110633149B CN201910853409.0A CN201910853409A CN110633149B CN 110633149 B CN110633149 B CN 110633149B CN 201910853409 A CN201910853409 A CN 201910853409A CN 110633149 B CN110633149 B CN 110633149B
- Authority
- CN
- China
- Prior art keywords
- grid
- array
- edge
- template
- tmp
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/505—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5072—Grid computing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Complex Calculations (AREA)
- Image Generation (AREA)
Abstract
本发明公开了一种均衡非结构网格单元计算量的并行负载均衡方法,目的是提高非结构网格应用的并行计算负载均衡性能和并行计算速度。技术方案是先生成二维非结构网格,然后使用非结构网格结构化处理方法对非结构网格相关文件进行局部化,生成非结构网格局部方向数组和关键元素数组,接着基于非结构网格局部方向数组,采用递归选择模板的方式进行网格单元之间计算量层面的负载均衡,最后采用网格剖分方法进行处理器之间网格量层面的负载均衡,采用子网格区域分配的方式将计算量分配给处理器。本发明在处理器之间网格量负载均衡的基础上实现了网格单元之间计算量的均衡,使处理器的计算量与其计算能力相匹配,提高了负载均衡性能和并行计算速度。
Description
技术领域
本发明属于高性能计算领域负载均衡方法,具体涉及一种均衡非结构网格单元计算量的并行负载均衡方法。
背景技术
工程计算可解决无法进行实验研究或无法进行复杂理论分析的问题,现已广泛应用于航空航天、汽车船舶制造、桥梁建筑设计、气象预报分析、环境工程等众多工程应用领域。一般来说,工程计算的主要过程是对网格上的物理量进行迭代计算。研究对象的复杂度增加时,网格量与计算量越来越大,为了减少研发的时间成本,常使用高性能计算机进行大规模并行计算。
负载均衡是影响并行计算效率的关键因素之一。负载均衡是指将计算量按计算能力分配到各个处理器上并行执行,使得所有处理器的计算能力得以充分发挥。计算量均衡时,所有处理器同时结束计算,整体计算时间最短,并行效率和计算效率最优。计算量若不均衡,部分处理器将空闲等待,造成计算资源浪费,同时整体计算时间也将延长,导致工程应用的研发成本增加。因此,采用负载均衡方法为各处理器分配均衡的计算量是大规模并行计算中不可或缺的环节。
负载均衡的方法与采用的网格类型有关。工程应用中,网格主要分为结构网格和非结构网格两类。结构网格沿着笛卡尔坐标系的坐标轴方向规则排列,网格单元的形状为四边形或六面体,易获得高阶精度和高计算效率,但其网格生成等处理困难且耗时,需要大量人工干预。非结构网格没有排列和形状的限制,可采用商业软件自动实现网格生成、网格变形、网格剖分等处理,更适用于外形复杂的工程应用。
目前,非结构网格工程的负载均衡方法(称为背景技术1)是通过网格剖分实现处理器之间网格量层面的负载均衡,即根据处理器信息将非结构网格进行区域分解与分配,使得处理器获得与之计算能力相匹配的网格量。背景技术1的流程图如图1所示,包括以下步骤:
第一步,生成二维非结构网格。
使用专业软件将非结构网格工程应用需要计算的二维空间进行网格化处理,生成二维非结构网格并输出二维非结构网格相关文件。常用的专业软件包括ANSYS公司的Fluent软件[http://www.ansys.com,版本18.0以上]等商业软件、美国国家航空航天局的FUN3D软件[Biedron R等,FUN3D Manual:13.2,2017,版本13.0以上]等In-house软件、以及OpenFOAM[https://www.openfoam.com.版本3.0以上]、SU2[https://su2code.github.io,版本5.0以上]等开源软件。非结构网格相关文件包括网格单元文件、网格点文件、网格边文件、网格单元的邻接单元文件、网格点的邻接单元文件、网格边的邻接单元文件等。
第二步,根据处理器信息和非结构网格相关文件,采用网格剖分方法进行处理器之间网格量层面的负载均衡。
2.2根据第一步生成的非结构网格相关文件初始化网格相关数据结构。具体步骤如下:
2.2.1令网格单元文件为网格单元数组cs,其中Nc为网格单元总数,Ckc为第kc个网格单元。网格单元采用网格点编号数组表示,Ckc={kp1,...,kpw,...,kpW}表示第kc个网格单元由第kp1,...,kpw,...,kpW个网格点构成,是一个W边形网格单元,W为正整数。如C1={1,4,6}表示第1个网格单元由第1、4、6个网格点构成,是一个三角形网格单元;
2.2.2令网格点文件为网格点数组pts,其中Npt为网格点总数,Ptkp为第kp个网格点。网格点采用笛卡尔坐标数组表示,Ptkp=(x,y)表示第kp个网格点的坐标为(x,y),x,y为实数,如Pt1={1.0,2.0}表示二维网格中第1个网格点的坐标为(1.0,2.0);
2.2.3令网格边文件为网格边数组eds,其中Ne为网格边总数,Eke为第ke条网格边。网格边采用顶点(即网格边两端的网格点)编号数组表示,Eke={kp1,kp2}表示第ke条网格边的两个顶点分别为第kp1,kp2个网格点,如E1={1,4}表示第1条网格边的两个顶点分别为第1、4个网格点;
2.3根据第一步生成的非结构网格相关文件初始化网格邻接关系数据结构。
具体步骤如下:
2.3.1令网格单元的邻接单元文件为数组cCells,其中CCkc表示网格单元Ckc的邻接网格单元数组。如CC1={2,3,5,7,11}表示与网格单元C1相邻接的网格单元为C2,C3,C5,C7,C11;
2.3.2令网格点的邻接单元文件为数组pCells,其中PCkp表示网格点Ptkp的邻接网格单元数组。如PC1={1,2,4,5,7,8}表示与网格点Pt1相邻接的单元为C1,C2,C4,C5,C7,C8;
2.5使用商业软件(如Fluent、OpenFOAM等)剖分非结构网格。在商业软件中选定剖分算法,按照第2.4步计算得到的最优网格量Mi进行剖分,将非结构网格单元剖分成Np个子网格区域,第i个子网格区域的网格量等于最优网格量Mi,其中1≤i≤Np。剖分后生成子网格区域的非结构网格相关文件,包含相邻子网格区域的边界信息;
2.6采用子网格区域分配的方式,将计算量分配给处理器。将第i个子网格区域的网格量分配给第i个处理器,其中1≤i≤Np,并生成子网格区域对应的非结构网格相关文件。网格量分配后,第i个处理器将获得Mi个网格单元,即Mi个网格单元上的计算量分配给了第i个处理器。
上述方法实现了网格量在处理器间的分配与均衡,但其并不一定能获得较好的负载均衡性能。因为单个非结构网格单元的计算量不一定相同,背景技术1为处理器分配了均衡的网格单元个数,并不等价于为处理器分配了均衡的计算量。非结构网格工程应用中,网格单元Ckc的计算量正比于Ckc模板单元的个数,Ckc更新及计算时所需使用的网格单元称为Ckc的模板单元。一般情况下,为保证非结构网格应用的计算精度和鲁棒性,常采用共点单元作为模板单元,即采用Ckc的邻接网格单元数组CCkc中的网格单元作为Ckc的模板单元。由于非结构网格排列无序且不规则,各网格单元的共点单元个数常不相等,导致各网格单元的计算量不均衡。尤其对于复杂的工程应用,网格单元之间计算量的差异更大。此时背景技术1采用网格量分配的方式,不能实现计算量在处理器间的均衡分配,影响了并行负载均衡性能。
因此在处理器之间网格量均衡的基础上,进一步研究网格单元计算量均衡的负载分配方法,对提高非结构网格工程的并行计算负载均衡性能具有重要意义。
发明内容
本发明要解决的技术问题是:针对二维工程应用中使用最广泛的三角形、四边形及三角形-四边形混合非结构网格,在现有网格量均衡分配的基础上,提出一种均衡非结构网格单元计算量的并行负载均衡方法。通过为非结构网格单元重新选择模板单元,使得每一个非结构网格单元的计算量均相等,进而使得处理器在获得均衡网格量的同时,也获得均衡的计算量,真正提高非结构网格应用的并行计算负载均衡性能和并行计算速度。
本发明技术方案如下:
第一步,生成二维非结构网格并初始化非结构网格相关数据结构。
1.1使用专业软件将非结构网格工程应用需要计算的二维空间进行网格化处理,生成非结构网格并输出非结构网格相关文件。此步与技术背景1第一步相同。
1.2根据非结构网格相关文件初始化相关数据结构,方法是:
1.2.1令网格单元文件为网格单元数组cs,其中Nc为网格单元总数,Ckc为第kc个网格单元;网格单元采用网格点编号数组表示,Ckc={kp1,...,kpw,...,kpW}表示第kc个网格单元由第kp1,...,kpw,...,kpW个网格点构成,是一个W边形网格单元,W为正整数;
第二步,使用非结构网格结构化处理方法对非结构网格相关文件进行局部化,生成非结构网格局部方向数组和关键元素数组,方法是:
2.1根据非结构网格相关数据结构,定义并初始化非结构网格单元的关键元素数组和非结构网格局部方向数组,方法是:
2.1.1定义关键元素数组其中Elkc为Ckc的关键元素编号组成的数组。本发明中Ckc的关键元素是用于确定局部方向的Ckc的网格边或网格点。具体而言,三角形网格单元的关键元素为3条网格边和1个网格点,如当C1为三角形网格且El1={2,4,7,9}时,表示C1的4个关键元素分别为C1的网格边E2、E4、E7以及C1的网格点Pt9;四边形网格单元的关键元素为4条网格边,如当C1为四边形网格且El1={2,4,7,9}时,表示C1的4个关键元素分别为构成C1的网格边E2、E4、E7、E9。初始化均为{0,0,0,0},从而与有意义的单元编号区别以避免歧义;
·LDkc[1]为Elkc[3]边中点指向Elkc[1]边中点构成的向量;
·若Ckc为四边形,LDkc[2]为Elkc[4]边中点指向Elkc[2]边中点构成的向量;若Ckc为三角形,LDkc[2]为Elkc[4]网格点指向Elkc[2]边中点构成的向量;
·LDkc[3]为Elkc[1]边中点指向Elkc[3]边中点构成的向量;
·若Ckc为四边形,LDkc[4]为Elkc[2]边中点指向Elkc[4]边中点构成的向量;若Ckc为三角形,LDkc[4]为Elkc[2]边中点指向Elkc[4]网格点构成的向量。
2.2采用阵面推进确定非结构网格的关键元素和局部方向,即进行非结构网格结构化处理,方法是:
2.2.1定义并初始化阵面推进相关数据结构,方法是:
2.2.1.1定义并初始化阵面数组fronts。fronts为动态数组,数据项个数记为Nf,每一项表示已进行访问的网格点的编号。fronts初始化为位于壁面边界(壁面边界指物体表面,如火箭表面等)的网格点的编号数组,Nf初始化为位于壁面边界的网格点的总数;
2.2.1.2定义并初始化下一阵面数组nextFronts。nextFronts为动态数组,表示需要加入fronts的网格点的编号,nextFronts的数据项个数记为Nnf。nextFronts初始化为空集,Nnf初始化为0;
2.2.1.4定义阵面层变量n,表示frontsLevel中所有数据项的最大值,n初始化为0;
2.2.1.5初始化fronts的三个索引:令头索引head=0、令尾索引tail=Nf、令最终尾索引finalTail=Nf;
2.2.2以head为fronts索引,获取网格点的编号front[head],为方便表述,记front[head]=j,1≤j≤Npt;
2.2.4初始化网格单元索引i=1;
2.2.5以i为PCj的索引,获取第i个与Ptj相邻的网格单元编号PCj[i],为方便表述,令o=PCj[i],1≤o≤Nc。若Elo[1]=0,则Co的关键元素和局部方向还没有确定,转2.2.6;若Elo[1]≠0,转2.2.9;
2.2.7确定三角形网格单元Co的关键元素,得到Elo,根据Elo计算得到局部向量LDo,并更新nextFronts,具体流程如下:
2.2.7.1根据网格单元数组cs获得Co三个顶点的编号Co[1]、Co[2]、Co[3];
2.2.7.5更新Elo[4]=kp3,Elo[2]为kp1、kp2组成的网格边的编号,Elo[1]为kp1、kp3组成的网格边的编号,Elo[3]为kp2、kp3组成的网格边的编号,转2.2.7.7;
2.2.7.6更新Elo[4]=kp1,Elo[2]为kp2、kp3组成的网格边的编号,Elo[1]为kp1、kp2组成的网格边的编号,Elo[3]为kp1、kp3组成的网格边的编号,转2.2.7.7;
2.2.7.7根据Elo,按照第2.1.2步中局部方向的定义,计算得到LDo,即:
·LDo[1]为Elo[3]边中点指向Elo[1]边中点构成的向量;
·LDo[2]为Elo[4]网格点指向Elo[2]边中点构成的向量;
·LDo[3]为Elo[1]边中点指向Elo[3]边中点构成的向量;
·LDo[4]为Elo[2]边中点指向Elo[4]网格点构成的向量。
2.2.7.8更新nextFronts,具体步骤为:
2.2.8确定四边形网格单元Co的关键元素,得到Elo,根据Elo计算得到局部向量LDo,并更新nextFronts,具体流程如下:
2.2.8.1根据网格单元数组cs获得Co四个顶点的编号Co[1]、Co[2]、Co[3]、Co[4];
2.2.8.4更新Elo[1]为kp1、kp2组成的网格边的编号,Elo[3]为kp3、kp4组成的网格边的编号。若kp1、kp3构成Co的网格边,Elo[2]更新为kp1、kp3组成的网格边的编号,Elo[4]更新为kp2、kp4组成的网格边的编号;否则若kp1、kp4构成Co的网格边,Elo[2]更新为kp1、kp4组成的网格边的编号,Elo[4]更新为kp2、kp3组成的网格边的编号;
2.2.8.5根据Elo,按照第2.1.2步中局部方向的定义,计算得到LDo,即
·LDo[1]为Elo[3]边中点指向Elo[1]边中点构成的向量;
·LDo[2]为Elo[4]边中点指向Elo[2]边中点构成的向量;
·LDo[3]为Elo[1]边中点指向Elo[3]边中点构成的向量;
·LDo[4]为Elo[2]边中点指向Elo[4]边中点构成的向量。
2.2.8.6更新nextFronts,具体步骤为:
2.2.9令i=i+1,若i<PCnum+1,转2.2.5;否则转2.2.10。
2.2.10令head=head+1,若head<tail+1,转2.2.2;否则转2.2.11;
2.2.11根据nextFronts更新fronts、frontsLevel、n、tail及finalTail,具体步骤为:
2.2.11.1将nextFronts的数据项加入到fronts中,更新Nf=Nf+Nnf;
2.2.11.2更新frontsLevel中数据项Flkp=n+1,其中kp为nextFronts的数据项;
2.2.11.3更新n=n+1;
2.2.11.4更新nextFronts为空集,令Nnf=0;
2.2.11.5更新tail=finalTail=Nf;
2.2.12若head<finalTail+1,转2.2.2;否则所有网格单元的关键元素和局部方向都已确定,得到关键元素数组keyEl和局部方向数组locDir,转第三步;
第三步,基于非结构网格局部方向数组,采用递归选择模板的方式进行网格单元之间计算量层面的负载均衡。
3.1根据第一步生成的非结构网格相关文件初始化网格边数组。令网格边文件为网格边数组eds,其中Ne为网格边总数,Eke为第ke条网格边。网格边采用顶点(即网格边两端的网格点)编号数组表示,Eke={kp1,kp2}表示第ke条网格边的两个顶点分别为第kp1,kp2个网格点,如E1={1,4}表示第1条网格边的两个顶点分别为第1、4个网格点;
3.2根据第一步生成的非结构网格相关文件初始化网格边的邻接单元数组。令网格边的邻接单元文件为数组eCells,其中ECke表示网格边Eke的邻接网格单元数组。如EC1={1,2}表示与边E1相邻接的网格单元为C1,C2;
3.3定义并初始化模板单元个数N。N为常数,表示需要为每个网格单元选择的模板单元个数,也为4个方向的总模板单元个数,N与网格单元的计算量成正比。N的取值与具体应用相关,N为正整数,一般为4的倍数;
3.4定义并初始化模板单元数组stencil,其中Skc是Ckc的模板单元编号组成的数组。由于本发明将为每个网格单元选择N个模板单元,故Skc有N个数据项,Skc的每个数据项为Ckc的模板单元编号。Skc的每个数据项都初始化为0,以避免与有意义的单元编号重复而引起歧义。
3.5初始化网格单元递归的单元索引kc=1;
3.6以kc为局部方向数组locDir和关键元素数组keyEl的索引,分别获取Ckc的4个局部方向向量:LDkc[1]、LDkc[2]、LDkc[3]、LDkc[4],以及4个局部方向对应的4个关键元素:Elkc[1]、Elkc[2]、Elkc[3]、Elkc[4];
3.7初始化局部方向索引j=1;
3.8若Ckc为三角形网格且j=4,LDkc[j]对应的关键元素Elkc[4]为网格点,转3.9进行按点模板选择;若Ckc不为三角形网格或j≠4,LDkc[j]对应的关键元素Elkc[j]为网格边,转3.10进入按边模板选择;
3.9沿局部方向LDkc[j]进行按点模板选择。具体步骤为:
3.9.1初始化递归次数n=N/4。沿4个方向的总模板单元个数为N,则每个局部方向需要选择的模板个数为n=N/4;
3.9.2定义并初始化递归相关参数。递归过程和模板单元选择过程需要记录和更新一些参数,称为递归相关参数。对按点选择的递归参数进行初始化:令方向向量参数dirA=LDkc[j],单元参数cellA=kc,点参数poiA=Elkc[j];
3.9.3根据递归相关参数dirA,cellA,poiA以及网格点的邻接单元数组pCells进行模板单元选择。具体步骤如下:
3.9.3.1以poiA为pCells的索引,获取与网格点PtpoiA邻接的单元的编号数组pCells[poiA];
3.9.3.2从数组pCells[poiA]的网格单元中,选出Ckc的模板单元Ctmp(其中tmp是pCells[poiA]的数据项),使得向量与dirA的夹角最小,指以CcellA中心为起点,Ctmp中心为终点的向量,如图3所示;
3.9.4令n=n-1,若n>0,表示还需递归n次,转3.9.5;若n≤0,沿LDkc[j]方向的递归结束,转3.11;
3.9.5根据递归相关参数dirA,cellA,poiA和选出的模板单元Ctmp更新下一次递归的相关参数,并确定下一次递归的模板选择方式。三个递归相关参数更新具体如下:
3.9.5.1令cellA=tmp,即将CcellA更新为Ctmp以保证递归沿局部方向LDkc[j]进行;
3.9.5.2若poiA=Eltmp[4],转3.9.5.3;若poiA≠Eltmp[4],转3.9.5.4;
3.9.5.3优先按Ctmp的局部方向更新dirA,并确定下一次递归的模板选择方式。令dirA=LDtmp[2]。更新后的dirA指向的关键元素是Ctmp的网格边,故下一次递归为按边选择,需要初始化新的递归相关参数:令边参数edgA=Eltmp[2],转3.10.3按边选择;
3.9.5.4按网格拓扑信息更新dirA,并确定下一次递归的模板选择方式。以tmp为网格单元数组cs的索引,获取Ctmp的三个顶点,三个顶点分别为PtpoiA、Ptkp1和Ptkp2,其中1≤kp1≤Npt,1≤kp2≤Npt。从Ptkp1、Ptkp2以及它们构成的网格边Eke(1≤ke≤Ne)的中点midPt这三个点中选出点selPt(其中selPt=Ptkp1或Ptkp2或midPt),使得向量与dirA的夹角最小,是以PtpoiA为起点,以selPt为终点的向量,如图4和图5所示。基于这样的网格拓扑信息,令若selPt=Ptkp1或Ptkp2,则令poiA=kp1或kp2(如图4中selPt=Ptkp2,令poiA=kp2),转3.9.3按点选择;否则selPt=midPt,如图5所示,指向的关键元素为网格边Eke的中点,则初始化新的递归相关参数:令边参数edgA=ke,转3.10.3按边选择;
3.10沿局部方向LDkc[j]进行按边模板选择。具体步骤为:
3.10.1初始化递归次数n=N/4;
3.10.2定义并初始化递归相关参数。对按边选择的递归参数进行初始化:令方向向量参数dirA=LDkc[j],单元参数cellA=kc,边参数edgA=Elkc[j];
3.10.3根据递归相关参数dirA,cellA,edgA以及网格边的邻接单元数组eCells进行模板单元选择。具体步骤如下:
3.10.3.1以edgA为eCells的索引,获取网格边EedgA的邻接单元数组eCells[edgA];
3.10.3.2根据eCells[edgA]选择按边选择的模板单元。数组eCells[edgA]包含两个网格单元,CcellA和Ctmp,其中1≤tmp≤Nc。对于三角形和四边形网格而言,网格边的邻接单元只有两个,即CcellA和Ctmp。选择Ctmp为本次按边选择的Ckc的模板;
3.10.4令n=n-1,若n>0,则还需递归n次,转3.10.5;若n≤0,沿LDkc[j]方向的递归结束,转3.11;
3.10.5根据递归相关参数dirA,cellA,poiA和选出的模板单元Ctmp更新下一次递归的相关参数并确定其模板选择方式。三个递归相关参数更新方法如下:
3.10.5.1令cellA=tmp;
3.10.5.2按Ctmp的局部方向更新dirA,并确定下一次递归的模板选择方式。根据第2.3步可知,edgA一定是Ctmp的关键元素,即edgA=Eltmp[1]或Eltmp[2]或Eltmp[3]。根据第2.3步局部方向与关键元素的对应关系对递归参数进行更新,具体而言:
若edgA=Eltmp[1]则更新dirA=LDtmp[3],更新边参数edgA=Eltmp[3],转3.10.3按边选择;
若edgA=Eltmp[3]则更新dirA=LDtmp[1],更新边参数edgA=Eltmp[1],转3.10.3按边选择;
若edgA=Eltmp[2]则更新dirA=LDtmp[4],需要初始化新的递归相关参数:点参数poiA=Eltmp[4],转3.9.3按点选择;
3.11令j=j+1,若j>4,则Ckc的4个局部方向都已进行模板选择,转3.12;若j≤4,转3.8执行下一个局部方向的模板选择;
3.12令kc=kc+1,若kc>Nc,则所有网格单元都已选择N个模板单元,即模板单元数组stencil中每个数据项都已生成完毕,转3.13;若kc≤Nc,转3.6执行下一个网格单元的模板选择;
3.13将模板单元数组stencil输出到模板单元文件,通过为每个非结构网格单元分配相同个数模板单元的方式,为每个非结构网格单元分配相同的计算量。模板单元数组其中数组Skc中包含N个数据项,即每个网格单元都具有N个模板单元。模板单元个数与计算量成正比,因此每个非结构网格单元分配到了相同的计算量。
第四步,根据处理器信息、模板单元文件、网格相关数据结构以及网格邻接关系数据结构,采用网格剖分方法进行处理器之间网格量层面的负载均衡,生成子网格区域的非结构网格相关文件和子网格区域的模板单元文件,采用子网格区域分配的方式将计算量分配给处理器,方法是:
4.3使用商业软件(如版本18.0以上的Fluent、版本3.0以上的OpenFOAM等)剖分非结构网格。采用商业软件按照第4.2步计算得到的最优网格量Mi将第一步生成的非结构网格剖分成Np个子网格区域,第i个子网格区域的网格量等于最优网格量Mi,其中1≤i≤Np。剖分后生成子网格区域的非结构网格相关文件,与背景技术1的第2.5步方法相同。剖分后生成子网格区域的模板单元文件,子网格区域的模板单元文件是第3.13步生成的模板单元文件的子集。具体而言,子网格区域的模板单元文件只包含子网格区域网格单元对应的模板单元信息,而第3.13步生成的模板单元文件包含所有网格单元的模板单元信息。因此子网格区域的模板单元文件中每个网格单元的计算量仍然相等,记为Ncom;
4.4采用子网格区域分配的方式将计算量分配给处理器:将第i个子网格区域的网格量及模板单元文件分配给第i个处理器,其中1≤i≤Np,第i个处理器获得与之计算能力匹配的计算量。第4.2步和第4.3步保证了第i个子网格区域的网格量等于最优网格量Mi,与第i个处理器的计算能力成正比。同时第i个子网格区域的模板单元文件保证了第i个子网格区域中每个网格单元的计算量均为常数Ncom。因此将第i个子网格区域的网格量及模板单元文件分配给第i个处理器后,第i个处理器可获得Mi个网格单元,即获得的计算量为Ncom·Mi,与第i个处理器的计算能力成正比。
采用本发明可以达到以下技术效果:
与现有技术相比,本发明在处理器之间网格量负载均衡的基础上,进一步实现了网格单元之间计算量的均衡,使得非结构网格并行应用中,处理器的计算量与其计算能力相匹配,从而提高负载均衡性能和并行计算速度。具体原因为:
1)本发明中每个处理器具有与之计算能力匹配的网格单元量。在第4.3步中结合了网格剖分算法,保证了第i个子网格区域的网格量等于第i个处理器的最优网格量Mi,故每个处理器可以分配与之计算能力相匹配的网格单元量;
2)本发明中每个网格单元具有相同的计算量。本发明在第三步为每个网格单元选择了相同个数的模板单元,模板单元个数与计算量成正比,因此相比于背景技术1,本发明可实现每个网格单元都具有相同的计算量。
综合上述两个层面可知,本发明通过两个层面的负载均衡,使得每个处理器分配到与之计算能力匹配的计算量,提高了整体的负载均衡性能和并行计算速度。
附图说明
图1是背景技术公布的背景技术1的总体流程图。
图2是本发明的总体流程图。
图3是本发明第3.9.3.2步按点选择递归中模板单元选择过程示意图。
图4是本发明第3.9.5.4步按点选择递归中下一次递归方向向量参数更新示意图。
图5是本发明第3.9.5.4步按点选择递归中下一次递归方向向量参数更新示意图。
图6是本发明第三步的流程图。
具体实施方式
图2是本发明的总体流程图。如图2所示,本发明包括以下步骤:
第一步,生成二维非结构网格并初始化非结构网格相关数据结构。
1.1使用专业软件将非结构网格工程应用需要计算的二维空间进行网格化处理,生成非结构网格并输出非结构网格相关文件。
1.2根据非结构网格相关文件初始化相关数据结构,方法是:
1.2.1令网格单元文件为网格单元数组cs,其中Nc为网格单元总数,Ckc为第kc个网格单元;网格单元采用网格点编号数组表示,Ckc={kp1,...,kpw,...,kpW}表示第kc个网格单元由第kp1,...,kpw,...,kpW个网格点构成,是一个W边形网格单元,W为正整数;
第二步,使用非结构网格结构化处理方法对非结构网格相关文件进行局部化,生成非结构网格局部方向数组和关键元素数组,方法是:
2.1根据非结构网格相关数据结构,定义并初始化非结构网格单元的关键元素数组和非结构网格局部方向数组,方法是:
·LDkc[1]为Elkc[3]边中点指向Elkc[1]边中点构成的向量;
·若Ckc为四边形,LDkc[2]为Elkc[4]边中点指向Elkc[2]边中点构成的向量;若Ckc为三角形,LDkc[2]为Elkc[4]网格点指向Elkc[2]边中点构成的向量;
·LDkc[3]为Elkc[1]边中点指向Elkc[3]边中点构成的向量;
·若Ckc为四边形,LDkc[4]为Elkc[2]边中点指向Elkc[4]边中点构成的向量;若Ckc为三角形,LDkc[4]为Elkc[2]边中点指向Elkc[4]网格点构成的向量。的每一项都初始化为零向量;
2.2采用阵面推进确定非结构网格的关键元素和局部方向,即进行非结构网格结构化处理,方法是:
2.2.1定义并初始化阵面推进相关数据结构,方法是:
2.2.1.1定义并初始化阵面数组fronts。fronts为动态数组,数据项个数记为Nf,每一项表示已进行访问的网格点的编号。fronts初始化为位于壁面边界的网格点的编号数组,Nf初始化为位于壁面边界的网格点的总数;
2.2.1.2定义并初始化下一阵面数组nextFronts。nextFronts为动态数组,表示需要加入fronts的网格点的编号,nextFronts的数据项个数记为Nnf。nextFronts初始化为空集,Nnf初始化为0;
2.2.1.4定义阵面层变量n,表示frontsLevel中所有数据项的最大值,n初始化为0;
2.2.1.5初始化fronts的三个索引:令头索引head=0、令尾索引tail=Nf、令最终尾索引finalTail=Nf;
2.2.2以head为fronts索引,获取网格点的编号front[head],为方便表述,记front[head]=j,1≤j≤Npt;
2.2.4初始化网格单元索引i=1;
2.2.5以i为PCj的索引,获取第i个与Ptj相邻的网格单元编号PCj[i],为方便表述,令o=PCj[i],1≤o≤Nc。若Elo[1]=0,则Co的关键元素和局部方向还没有确定,转2.2.6;若Elo[1]≠0,转2.2.9;
2.2.7确定三角形网格单元Co的关键元素,得到Elo,根据Elo计算得到局部向量LDo,并更新nextFronts,具体流程如下:
2.2.7.1根据网格单元数组cs获得Co三个顶点的编号Co[1]、Co[2]、Co[3];
2.2.7.5更新Elo[4]=kp3,Elo[2]为kp1、kp2组成的网格边的编号,Elo[1]为kp1、kp3组成的网格边的编号,Elo[3]为kp2、kp3组成的网格边的编号,转2.2.7.7;
2.2.7.6更新Elo[4]=kp1,Elo[2]为kp2、kp3组成的网格边的编号,Elo[1]为kp1、kp2组成的网格边的编号,Elo[3]为kp1、kp3组成的网格边的编号,转2.2.7.7;
2.2.7.7根据Elo,按照第2.1.2步中局部方向的定义,计算得到LDo,即:
·LDo[1]为Elo[3]边中点指向Elo[1]边中点构成的向量;
·LDo[2]为Elo[4]网格点指向Elo[2]边中点构成的向量;
·LDo[3]为Elo[1]边中点指向Elo[3]边中点构成的向量;
·LDo[4]为Elo[2]边中点指向Elo[4]网格点构成的向量。
2.2.7.8更新nextFronts,具体步骤为:
2.2.8确定四边形网格单元Co的关键元素,得到Elo,根据Elo计算得到局部向量LDo,并更新nextFronts,具体流程如下:
2.2.8.1根据网格单元数组cs获得Co四个顶点的编号Co[1]、Co[2]、Co[3]、Co[4];
2.2.8.4更新Elo[1]为kp1、kp2组成的网格边的编号,Elo[3]为kp3、kp4组成的网格边的编号。若kp1、kp3构成Co的网格边,Elo[2]更新为kp1、kp3组成的网格边的编号,Elo[4]更新为kp2、kp4组成的网格边的编号;否则若kp1、kp4构成Co的网格边,Elo[2]更新为kp1、kp4组成的网格边的编号,Elo[4]更新为kp2、kp3组成的网格边的编号;
2.2.8.5根据Elo,按照第2.1.2步中局部方向的定义,计算得到LDo,即
·LDo[1]为Elo[3]边中点指向Elo[1]边中点构成的向量;
·LDo[2]为Elo[4]边中点指向Elo[2]边中点构成的向量;
·LDo[3]为Elo[1]边中点指向Elo[3]边中点构成的向量;
·LDo[4]为Elo[2]边中点指向Elo[4]边中点构成的向量。
2.2.8.6更新nextFronts,具体步骤为:
2.2.9令i=i+1,若i<PCnum+1,转2.2.5;否则转2.2.10。
2.2.10令head=head+1,若head<tail+1,转2.2.2;否则转2.2.11;
2.2.11根据nextFronts更新fronts、frontsLevel、n、tail及finalTail,具体步骤为:
2.2.11.1将nextFronts的数据项加入到fronts中,更新Nf=Nf+Nnf;
2.2.11.2更新frontsLevel中数据项Flkp=n+1,其中kp为nextFronts的数据项;
2.2.11.3更新n=n+1;
2.2.11.4更新nextFronts为空集,令Nnf=0;
2.2.11.5更新tail=finalTail=Nf;
2.2.12若head<finalTail+1,转2.2.2;否则所有网格单元的关键元素和局部方向都已确定,得到关键元素数组keyEl和局部方向数组locDir,转第三步;
第三步,基于非结构网格局部方向数组,采用递归选择模板的方式进行网格单元之间计算量层面的负载均衡。如图6所示,包括以下步骤:
3.1根据第一步生成的非结构网格相关文件初始化网格边数组。令网格边文件为网格边数组eds,其中Ne为网格边总数,Eke为第ke条网格边。网格边采用顶点(即网格边两端的网格点)编号数组表示,Eke={kp1,kp2}表示第ke条网格边的两个顶点分别为第kp1,kp2个网格点;
3.2根据第一步生成的非结构网格相关文件初始化网格边的邻接单元数组。令网格边的邻接单元文件为数组eCells,其中ECke表示网格边Eke的邻接网格单元数组。如EC1={1,2}表示与边E1相邻接的网格单元为C1,C2;
3.3定义并初始化模板单元个数N。N为常数,表示需要为每个网格单元选择的模板单元个数,也为4个方向的总模板单元个数,N与网格单元的计算量成正比。N的取值与具体应用相关,N为正整数,一般为4的倍数;
3.4定义并初始化模板单元数组stencil,其中Skc是Ckc的模板单元编号组成的数组。由于本发明将为每个网格单元选择N个模板单元,故Skc有N个数据项,Skc的每个数据项为Ckc的模板单元编号。Skc的每个数据项都初始化为0。
3.5初始化网格单元递归的单元索引kc=1;
3.6以kc为局部方向数组locDir和关键元素数组keyEl的索引,分别获取Ckc的4个局部方向向量:LDkc[1]、LDkc[2]、LDkc[3]、LDkc[4],以及4个局部方向对应的4个关键元素:Elkc[1]、Elkc[2]、Elkc[3]、Elkc[4];
3.7初始化局部方向索引j=1;
3.8若Ckc为三角形网格且j=4,LDkc[j]对应的关键元素Elkc[4]为网格点,转3.9进行按点模板选择;若Ckc不为三角形网格或j≠4,LDkc[j]对应的关键元素Elkc[j]为网格边,转3.10进入按边模板选择;
3.9沿局部方向LDkc[j]进行按点模板选择。具体步骤为:
3.9.1初始化递归次数n=N/4。沿4个方向的总模板单元个数为N,则每个局部方向需要选择的模板个数为n=N/4;
3.9.2定义并初始化递归相关参数。递归过程和模板单元选择过程需要记录和更新一些参数,称为递归相关参数。对按点选择的递归参数进行初始化:令方向向量参数dirA=LDkc[j],单元参数cellA=kc,点参数poiA=Elkc[j];
3.9.3根据递归相关参数dirA,cellA,poiA以及网格点的邻接单元数组pCells进行模板单元选择。具体步骤如下:
3.9.3.1以poiA为pCells的索引,获取与网格点PtpoiA邻接的单元的编号数组pCells[poiA];
3.9.3.2从数组pCells[poiA]的网格单元中,选出Ckc的模板单元Ctmp(其中tmp是pCells[poiA]的数据项),使得向量与dirA的夹角最小,指以CcellA中心为起点,Ctmp中心为终点的向量,如图3所示;图3是本发明第3.9.3.2步按点选择递归中模板单元选择过程示意图。图3中CcellA、Ctmp为网格单元,箭头所示dirA表示方向向量,虚线箭头为单元中心连线构成的向量,PtpoiA表示网格点。图3描述从网格单元CcellA出发,沿着方向向量dirA进行按点(PtpoiA)选择模板单元的过程,其中PtpoiA为dirA与CcellA的交点。除CcellA外,与点PtpoiA相邻的网格单元共有5个(C1,C2,C3,C4,C5)。以CcellA中心为起点,分别以C1,C2,C3,C4,C5中心为终点,可以构成5个向量,即由图可看出,与方向向量dirA夹角最小,故将选出C3作为此次按点选择的模板单元Ctmp。
3.9.4令n=n-1,若n>0,表示还需递归n次,转3.9.5;若n≤0,沿LDkc[j]方向的递归结束,转3.11;
3.9.5根据递归相关参数dirA,cellA,poiA和选出的模板单元Ctmp更新下一次递归的相关参数,并确定下一次递归的模板选择方式。三个递归相关参数更新具体如下:
3.9.5.1令cellA=tmp,即将CcellA更新为Ctmp以保证递归沿局部方向LDkc[j]进行;
3.9.5.2若poiA=Eltmp[4],转3.9.5.3;若poiA≠Eltmp[4],转3.9.5.4;
3.9.5.3优先按Ctmp的局部方向更新dirA,并确定下一次递归的模板选择方式。令dirA=LDtmp[2]。更新后的dirA指向的关键元素是Ctmp的网格边,故下一次递归为按边选择,需要初始化新的递归相关参数:令边参数edgA=Eltmp[2],转3.10.3按边选择;
3.9.5.4按网格拓扑信息更新dirA,并确定下一次递归的模板选择方式。以tmp为网格单元数组cs的索引,获取Ctmp的三个顶点,三个顶点分别为PtpoiA、Ptkp1和Ptkp2,其中1≤kp1≤Npt,1≤kp2≤Npt。从Ptkp1、Ptkp2以及它们构成的网格边Eke(1≤ke≤Ne)的中点midPt这三个点中选出点selPt(其中selPt=Ptkp1或Ptkp2或midPt),使得向量与dirA的夹角最小,是以PtpoiA为起点,以selPt为终点的向量,如图4和图5所示。
图4是本发明第3.9.5.4步按点选择递归中下一次递归方向向量参数更新示意图。图4中点Ptkp1、Ptkp2、PtpoiA为网格单元Ctmp的网格点,Eke为Ptkp1与Ptkp2构成的边,midPt为Eke的中点,箭头所示dirA表示方向向量,虚线箭头为PtpoiA与Ptkp1、Ptkp2、midPt构成的向量。图4描述沿dirA按点(PtpoiA)选择出模板单元Ctmp后,确定下一次递归为按点(Ptkp2)选择的过程。以PtpoiA为起点,分别以点Ptkp1、点Ptkp2、边中点midPt为终点可以构成3个向量,即由图可看出,向量与方向向量dirA夹角最小,选择Ptkp2作为selPt,下一次递归为按点(Ptkp2)选择。
图5是本发明第3.9.5.4步按点选择递归中下一次递归方向向量参数更新示意图。图5中点Ptkp1、Ptkp2、PtpoiA为网格单元Ctmp的网格点,Eke为Ptkp1与Ptkp2构成的边,midPt为Eke的中点,箭头所示dirA表示方向向量,虚线箭头为PtpoiA与Ptkp1、Ptkp2、midPt构成的向量。图5描述沿dirA按点(PtpoiA)选择出模板单元Ctmp后,确定下一次递归为按边(Eke)选择。以PtpoiA为起点,分别以点Ptkp1、点Ptkp2、边中点midPt为终点可以构成3个向量,即由图可看出,向量与方向向量dirA夹角最小,选择midPt作为selPt,下一次递归为按点(Eke)选择。
基于这样的网格拓扑信息,令若selPt=Ptkp1或Ptkp2,则令poiA=kp1或kp2(如图4中selPt=Ptkp2,令poiA=kp2),转3.9.3按点选择;否则selPt=midPt,如图5所示,指向的关键元素为网格边Eke的中点,则初始化新的递归相关参数:令边参数edgA=ke,转3.10.3按边选择;
3.10沿局部方向LDkc[j]进行按边模板选择。具体步骤为:
3.10.1初始化递归次数n=N/4;
3.10.2定义并初始化递归相关参数。对按边选择的递归参数进行初始化:令方向向量参数dirA=LDkc[j],单元参数cellA=kc,边参数edgA=Elkc[j];
3.10.3根据递归相关参数dirA,cellA,edgA以及网格边的邻接单元数组eCells进行模板单元选择。具体步骤如下:
3.10.3.1以edgA为eCells的索引,获取网格边EedgA的邻接单元数组eCells[edgA];
3.10.3.2根据eCells[edgA]选择按边选择的模板单元。数组eCells[edgA]包含两个网格单元,CcellA和Ctmp,其中1≤tmp≤Nc。对于三角形和四边形网格而言,网格边的邻接单元只有两个,即CcellA和Ctmp。选择Ctmp为本次按边选择的Ckc的模板;
3.10.4令n=n-1,若n>0,则还需递归n次,转3.10.5;若n≤0,沿LDkc[j]方向的递归结束,转3.11;
3.10.5根据递归相关参数dirA,cellA,poiA和选出的模板单元Ctmp更新下一次递归的相关参数并确定其模板选择方式。三个递归相关参数更新方法如下:
3.10.5.1令cellA=tmp;
3.10.5.2按Ctmp的局部方向更新dirA,并确定下一次递归的模板选择方式。根据第2.3步可知,edgA一定是Ctmp的关键元素,即edgA=Eltmp[1]或Eltmp[2]或Eltmp[3]。根据第2.3步局部方向与关键元素的对应关系对递归参数进行更新,具体而言:
若edgA=Eltmp[1]则更新dirA=LDtmp[3],更新边参数edgA=Eltmp[3],转3.10.3按边选择;
若edgA=Eltmp[3]则更新dirA=LDtmp[1],更新边参数edgA=Eltmp[1],转3.10.3按边选择;
若edgA=Eltmp[2]则更新dirA=LDtmp[4],需要初始化新的递归相关参数:点参数poiA=Eltmp[4],转3.9.3按点选择;
3.11令j=j+1,若j>4,则Ckc的4个局部方向都已进行模板选择,转3.12;若j≤4,转3.8执行下一个局部方向的模板选择;
3.12令kc=kc+1,若kc>Nc,则所有网格单元都已选择N个模板单元,即模板单元数组stencil中每个数据项都已生成完毕,转3.13;若kc≤Nc,转3.6执行下一个网格单元的模板选择;
3.13将模板单元数组stencil输出到模板单元文件,通过为每个非结构网格单元分配相同个数模板单元的方式,为每个非结构网格单元分配相同的计算量。模板单元数组其中数组Skc中包含N个数据项,即每个网格单元都具有N个模板单元。模板单元个数与计算量成正比,因此每个非结构网格单元分配到了相同的计算量。
第四步,根据处理器信息、模板单元文件、网格相关数据结构以及网格邻接关系数据结构,采用网格剖分方法进行处理器之间网格量层面的负载均衡,生成子网格区域的非结构网格相关文件和子网格区域的模板单元文件,采用子网格区域分配的方式将计算量分配给处理器,方法是:
4.3使用商业软件(如版本18.0以上的Fluent、版本3.0以上的OpenFOAM等)剖分非结构网格。采用商业软件按照第4.2步计算得到的最优网格量Mi将第一步生成的非结构网格剖分成Np个子网格区域,第i个子网格区域的网格量等于最优网格量Mi,其中1≤i≤Np。剖分后生成子网格区域的非结构网格相关文件,与背景技术1的第2.5步方法相同。剖分后生成子网格区域的模板单元文件,子网格区域的模板单元文件是第3.13步生成的模板单元文件的子集。具体而言,子网格区域的模板单元文件只包含子网格区域网格单元对应的模板单元信息,而第3.13步生成的模板单元文件包含所有网格单元的模板单元信息。因此子网格区域的模板单元文件中每个网格单元的计算量仍然相等,记为Ncom;
4.4采用子网格区域分配的方式将计算量分配给处理器:将第i个子网格区域的网格量及模板单元文件分配给第i个处理器,其中1≤i≤Np,第i个处理器获得与之计算能力匹配的计算量。第4.2步和第4.3步保证了第i个子网格区域的网格量等于最优网格量Mi,与第i个处理器的计算能力成正比。同时第i个子网格区域的模板单元文件保证了第i个子网格区域中每个网格单元的计算量均为常数Ncom。因此将第i个子网格区域的网格量及模板单元文件分配给第i个处理器后,第i个处理器可获得Mi个网格单元,即获得的计算量为Ncom·Mi,与第i个处理器的计算能力成正比。
Claims (9)
1.一种均衡非结构网格单元计算量的并行负载均衡方法,其特征在于包括以下步骤:
第一步,生成二维非结构网格,方法是:
1.1将非结构网格工程应用需要计算的二维空间进行网格化处理,生成非结构网格并输出二维非结构网格相关文件;二维非结构网格相关文件包括网格单元文件、网格点文件、网格边文件、网格单元的邻接单元文件、网格点的邻接单元文件、网格边的邻接单元文件;
1.2根据非结构网格相关文件初始化相关数据结构,方法是:
1.2.1令网格单元文件为网格单元数组cs,其中Nc为网格单元总数,Ckc为第kc个网格单元;网格单元采用网格点编号数组表示,Ckc={kp1,...,kpw,...,kpW}表示第kc个网格单元由第kp1,...,kpw,...,kpW个网格点构成,是一个W边形网格单元,W为正整数,1≤w≤W;
第二步,使用非结构网格结构化处理方法对非结构网格相关文件进行局部化,生成非结构网格局部方向数组和关键元素数组,方法是:
2.1根据非结构网格相关数据结构,定义并初始化非结构网格单元的关键元素数组和非结构网格局部方向数组,方法是:
LDkc[1]为Elkc[3]边中点指向Elkc[1]边中点构成的向量;
若Ckc为四边形,LDkc[2]为Elkc[4]边中点指向Elkc[2]边中点构成的向量;若Ckc为三角形,LDkc[2]为Elkc[4]网格点指向Elkc[2]边中点构成的向量;
LDkc[3]为Elkc[1]边中点指向Elkc[3]边中点构成的向量;
若Ckc为四边形,LDkc[4]为Elkc[2]边中点指向Elkc[4]边中点构成的向量;若Ckc为三角形,LDkc[4]为Elkc[2]边中点指向Elkc[4]网格点构成的向量;
2.2采用阵面推进确定非结构网格的关键元素和局部方向,即进行非结构网格结构化处理,方法是:
2.2.1定义并初始化阵面推进相关数据结构,方法是:
2.2.1.1定义并初始化阵面数组fronts,fronts为动态数组,数据项个数记为Nf,每一项表示已进行访问的网格点的编号;fronts初始化为位于壁面边界即物体表面的网格点的编号数组,Nf初始化为位于壁面边界的网格点的总数;
2.2.1.2定义并初始化下一阵面数组nextFronts,nextFronts为动态数组,表示需要加入fronts的网格点的编号,nextFronts的数据项个数记为Nnf;nextFronts初始化为空集,Nnf初始化为0;
2.2.1.4定义阵面层变量n,表示frontsLevel中所有数据项的最大值,n初始化为0;
2.2.1.5初始化fronts的三个索引:令头索引head=0、令尾索引tail=Nf、令最终尾索引finalTail=Nf;
2.2.2以head为fronts索引,获取网格点的编号front[head],记front[head]=j,1≤j≤Npt;
2.2.4初始化网格单元索引i=1;
2.2.5以i为PCj的索引,获取第i个与Ptj相邻的网格单元编号PCj[i],令o=PCj[i],1≤o≤Nc;若Elo[1]=0,则Co的关键元素和局部方向还没有确定,转2.2.6;若Elo[1]≠0,转2.2.9;
2.2.7确定三角形网格单元Co的关键元素,得到Elo,根据Elo计算得到局部向量LDo,并更新nextFronts,转2.2.9;
2.2.8确定四边形网格单元Co的关键元素,得到Elo,根据Elo计算得到局部向量LDo,并更新nextFronts,转2.2.9;
2.2.9令i=i+1,若i<PCnum+1,转2.2.5;否则转2.2.10;
2.2.10令head=head+1,若head<tail+1,转2.2.2;否则转2.2.11;
2.2.11根据nextFronts更新fronts、frontsLevel、n、tail及finalTail,具体步骤为:
2.2.11.1将nextFronts的数据项加入到fronts中,更新Nf=Nf+Nnf;
2.2.11.2更新frontsLevel中数据项Flkp=n+1,其中kp为nextFronts的数据项;
2.2.11.3更新n=n+1;
2.2.11.4更新nextFronts为空集,令Nnf=0;
2.2.11.5更新tail=finalTail=Nf;
2.2.12若head<finalTail+1,转2.2.2;否则所有网格单元的关键元素和局部方向都已确定,得到关键元素数组keyEl和局部方向数组locDir,转第三步;
第三步,基于非结构网格局部方向数组,采用递归选择模板的方式进行网格单元之间计算量层面的负载均衡,方法是:
3.1根据第一步生成的非结构网格相关文件初始化网格边数组,令网格边文件为网格边数组eds,其中Ne为网格边总数,Eke为第ke条网格边;网格边采用顶点即网格边两端的网格点编号数组表示,Eke={kp1,kp2}表示第ke条网格边的两个顶点分别为第kp1,kp2个网格点;
3.3定义并初始化模板单元个数N,N为正整数,表示需要为每个网格单元选择的模板单元个数,也为4个方向的总模板单元个数,N与网格单元的计算量成正比;
3.5初始化网格单元递归的单元索引kc=1;
3.6以kc为局部方向数组locDir和关键元素数组keyEl的索引,分别获取Ckc的4个局部方向向量:LDkc[1]、LDkc[2]、LDkc[3]、LDkc[4],以及4个局部方向对应的4个关键元素:Elkc[1]、Elkc[2]、Elkc[3]、Elkc[4];
3.7初始化局部方向索引j=1;
3.8若Ckc为三角形网格且j=4,LDkc[j]对应的关键元素Elkc[4]为网格点,转3.9进行按点模板选择;若Ckc不为三角形网格或j≠4,LDkc[j]对应的关键元素Elkc[j]为网格边,转3.10进入按边模板选择;
3.9沿局部方向LDkc[j]进行按点模板选择,具体步骤为:
3.9.1初始化递归次数n=N/4;
3.9.2定义并初始化递归相关参数,对按点选择的递归参数进行初始化:令方向向量参数dirA=LDkc[j],单元参数cellA=kc,点参数poiA=Elkc[j];
3.9.3根据递归相关参数dirA,cellA,poiA以及网格点的邻接单元数组pCells进行模板单元选择,具体步骤如下:
3.9.3.1以poiA为pCells的索引,获取与网格点PtpoiA邻接的单元的编号数组pCells[poiA];
3.9.3.2从数组pCells[poiA]的网格单元中,选出Ckc的模板单元Ctmp,其中tmp是pCells[poiA]的数据项,使得向量与dirA的夹角最小,指以CcellA中心为起点,Ctmp中心为终点的向量;
3.9.4令n=n-1,若n>0,转3.9.5;若n≤0,转3.11;
3.9.5根据递归相关参数dirA,cellA,poiA和选出的模板单元Ctmp更新下一次递归的相关参数,并确定下一次递归的模板选择方式,dirA,cellA,poiA更新方法是:
3.9.5.1令cellA=tmp,即将CcellA更新为Ctmp以保证递归沿局部方向LDkc[j]进行;
3.9.5.2若poiA=Eltmp[4],转3.9.5.3;若poiA≠Eltmp[4],转3.9.5.4;
3.9.5.3优先按Ctmp的局部方向更新dirA,并确定下一次递归的模板选择方式,方法是令dirA=LDtmp[2];令边参数edgA=Eltmp[2],转3.10.3;
3.9.5.4按网格拓扑信息更新dirA,并确定下一次递归的模板选择方式:以tmp为网格单元数组cs的索引,获取Ctmp的三个顶点,三个顶点分别为PtpoiA、Ptkp1和Ptkp2,其中1≤kp1≤Npt,1≤kp2≤Npt;从Ptkp1、Ptkp2以及它们构成的网格边Eke的中点midPt这三个点中选出点selPt,使得向量与dirA的夹角最小,是以PtpoiA为起点,以selPt为终点的向量;基于这样的网格拓扑信息,令若selPt=Ptkp1或Ptkp2,则令poiA=kp1或kp2,转3.9.3按点选择;否则selPt=midPt,指向的关键元素为网格边Eke的中点,则初始化新的递归相关参数:令边参数edgA=ke,转3.10.3按边选择;
3.10沿局部方向LDkc[j]进行按边模板选择,方法为:
3.10.1初始化递归次数n=N/4;
3.10.2定义并初始化递归相关参数,对按边选择的递归参数进行初始化:令方向向量参数dirA=LDkc[j],单元参数cellA=kc,边参数edgA=Elkc[j];
3.10.3根据递归相关参数dirA,cellA,edgA以及网格边的邻接单元数组eCells进行模板单元选择,具体方法为:
3.10.3.1以edgA为eCells的索引,获取网格边EedgA的邻接单元数组eCells[edgA];
3.10.3.2根据eCells[edgA]选择按边选择的模板单元:选择Ctmp为本次按边选择的Ckc的模板;
3.10.4令n=n-1,若n>0,转3.10.5;若n≤0,转3.11;
3.10.5根据递归相关参数dirA,cellA,poiA和选出的模板单元Ctmp更新下一次递归的相关参数并确定其模板选择方式,dirA,cellA,poiA更新方法如下:
3.10.5.1令cellA=tmp;
3.10.5.2按Ctmp的局部方向更新dirA,并确定下一次递归的模板选择方式:
若edgA=Eltmp[1]则更新dirA=LDtmp[3],更新边参数edgA=Eltmp[3],转3.10.3按边选择;
若edgA=Eltmp[3]则更新dirA=LDtmp[1],更新边参数edgA=Eltmp[1],转3.10.3按边选择;
若edgA=Eltmp[2]则更新dirA=LDtmp[4],点参数poiA=Eltmp[4],转3.9.3按点选择;
3.11令j=j+1,若j>4,则Ckc的4个局部方向都已进行模板选择,转3.12;若j≤4,转3.8;
3.12令kc=kc+1,若kc>Nc,则所有网格单元都已选择N个模板单元,即模板单元数组stencil中每个数据项都已生成完毕,转3.13;若kc≤Nc,转3.6;
3.13将模板单元数组stencil输出到模板单元文件,通过为每个非结构网格单元分配相同个数模板单元的方式,为每个非结构网格单元分配相同的计算量;模板单元数组其中数组Skc中包含N个数据项,即每个网格单元都具有N个模板单元;
第四步,根据处理器信息、模板单元文件、网格相关数据结构以及网格邻接关系数据结构,采用网格剖分方法进行处理器之间网格量层面的负载均衡,生成子网格区域的非结构网格相关文件和子网格区域的模板单元文件,采用子网格区域分配的方式将计算量分配给处理器,方法是:
4.3剖分非结构网格:按照Mi将第一步生成的非结构网格剖分成Np个子网格区域,第i个子网格区域的网格量等于最优网格量Mi,其中1≤i≤Np;剖分后生成子网格区域的非结构网格相关文件,剖分后还生成子网格区域的模板单元文件,子网格区域的模板单元文件是第3.13步生成的模板单元文件的子集;子网格区域的模板单元文件中每个网格单元的计算量仍然相等,记为Ncom;
4.4采用子网格区域分配的方式将计算量分配给处理器:将第i个子网格区域的网格量及模板单元文件分配给第i个处理器,其中1≤i≤Np,第i个处理器获得Mi个网格单元,即获得的计算量为Ncom·Mi。
2.如权利要求1所述的均衡非结构网格单元计算量的并行负载均衡方法,其特征在于1.1步所述将工程应用需要计算的二维空间进行网格化处理的方法是使用专业软件,专业软件指版本18.0以上的Fluent软件、版本13.0以上的FUN3D软件、版本3.0以上的OpenFOAM、版本5.0以上的SU2。
3.如权利要求1所述的均衡非结构网格单元计算量的并行负载均衡方法,其特征在于2.2.7步所述确定三角形网格单元Co的关键元素Elo和局部方向LDo,并更新nextFronts的流程为:
2.2.7.1根据网格单元数组cs获得Co三个顶点的编号Co[1]、Co[2]、Co[3];
2.2.7.5更新Elo[4]=kp3,Elo[2]为kp1、kp2组成的网格边的编号,Elo[1]为kp1、kp3组成的网格边的编号,Elo[3]为kp2、kp3组成的网格边的编号,转2.2.7.7;
2.2.7.6更新Elo[4]=kp1,Elo[2]为kp2、kp3组成的网格边的编号,Elo[1]为kp1、kp2组成的网格边的编号,Elo[3]为kp1、kp3组成的网格边的编号,转2.2.7.7;
2.2.7.7根据Elo,按照第2.1.2步中局部方向的定义计算得到LDo;
2.2.7.8更新nextFronts,具体步骤为:
4.如权利要求3所述的均衡非结构网格单元计算量的并行负载均衡方法,其特征在于2.2.7.7步所述根据Elo计算得到LDo的方法是:
LDo[1]为Elo[3]边中点指向Elo[1]边中点构成的向量;
LDo[2]为Elo[4]网格点指向Elo[2]边中点构成的向量;
LDo[3]为Elo[1]边中点指向Elo[3]边中点构成的向量;
LDo[4]为Elo[2]边中点指向Elo[4]网格点构成的向量。
5.如权利要求1所述的均衡非结构网格单元计算量的并行负载均衡方法,其特征在于2.2.8步所述确定四边形网格单元Co的关键元素Elo和局部方向LDo,并更新nextFronts的流程如下:
2.2.8.1根据网格单元数组cs获得Co四个顶点的编号Co[1]、Co[2]、Co[3]、Co[4];
2.2.8.4更新Elo[1]为kp1、kp2组成的网格边的编号,Elo[3]为kp3、kp4组成的网格边的编号;若kp1、kp3构成Co的网格边,Elo[2]更新为kp1、kp3组成的网格边的编号,Elo[4]更新为kp2、kp4组成的网格边的编号;否则若kp1、kp4构成Co的网格边,Elo[2]更新为kp1、kp4组成的网格边的编号,Elo[4]更新为kp2、kp3组成的网格边的编号;
2.2.8.5根据Elo,按照第2.1.2步中局部方向的定义,计算得到LDo;
2.2.8.6更新nextFronts,具体步骤为:
6.如权利要求5所述的均衡非结构网格单元计算量的并行负载均衡方法,其特征在于2.2.8.5步所述根据Elo计算得到LDo的方法是:
LDo[1]为Elo[3]边中点指向Elo[1]边中点构成的向量;
LDo[2]为Elo[4]边中点指向Elo[2]边中点构成的向量;
LDo[3]为Elo[1]边中点指向Elo[3]边中点构成的向量;
LDo[4]为Elo[2]边中点指向Elo[4]边中点构成的向量。
7.如权利要求1所述的均衡非结构网格单元计算量的并行负载均衡方法,其特征在于3.3步所述N的取值为4的倍数。
8.如权利要求1所述的均衡非结构网格单元计算量的并行负载均衡方法,其特征在于4.3步剖分非结构网格的方法是采用含剖分算法的软件。
9.如权利要求8所述的均衡非结构网格单元计算量的并行负载均衡方法,其特征在于所述含剖分算法的软件指版本18.0以上的Fluent软件、版本3.0以上的OpenFOAM。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910853409.0A CN110633149B (zh) | 2019-09-10 | 2019-09-10 | 均衡非结构网格单元计算量的并行负载均衡方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910853409.0A CN110633149B (zh) | 2019-09-10 | 2019-09-10 | 均衡非结构网格单元计算量的并行负载均衡方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110633149A CN110633149A (zh) | 2019-12-31 |
CN110633149B true CN110633149B (zh) | 2021-06-04 |
Family
ID=68971079
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910853409.0A Active CN110633149B (zh) | 2019-09-10 | 2019-09-10 | 均衡非结构网格单元计算量的并行负载均衡方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110633149B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112329321B (zh) * | 2020-12-17 | 2022-03-01 | 中国空气动力研究与发展中心计算空气动力研究所 | 一种空间离散网格点重归整化方法 |
CN112632870B (zh) * | 2020-12-28 | 2021-09-24 | 中国人民解放军国防科技大学 | 一种基于rbf动网格的仿生机器鱼驱动优化方法 |
CN116579269B (zh) * | 2023-07-12 | 2023-09-26 | 北京凌云智擎软件有限公司 | 多面体网格原位分布式并行边界层物理量获取方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104375882A (zh) * | 2014-11-21 | 2015-02-25 | 北京应用物理与计算数学研究所 | 匹配于高性能计算机结构的多级嵌套数据驱动计算方法 |
CN105160706A (zh) * | 2015-06-03 | 2015-12-16 | 江西理工大学 | 一种单机多核环境下约束地形并行构建方法 |
CN109684061A (zh) * | 2018-12-24 | 2019-04-26 | 无锡江南计算技术研究所 | 一种非结构网格众核粗粒度并行计算方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8015207B2 (en) * | 2009-02-26 | 2011-09-06 | Hitachi, Ltd. | Method and apparatus for unstructured data mining and distributed processing |
US9858195B2 (en) * | 2014-12-10 | 2018-01-02 | International Business Machines Corporation | Near-cache distribution of manifest among peer applications in in-memory data grid (IMDG) non structured query language (NO-SQL) environments |
-
2019
- 2019-09-10 CN CN201910853409.0A patent/CN110633149B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104375882A (zh) * | 2014-11-21 | 2015-02-25 | 北京应用物理与计算数学研究所 | 匹配于高性能计算机结构的多级嵌套数据驱动计算方法 |
CN105160706A (zh) * | 2015-06-03 | 2015-12-16 | 江西理工大学 | 一种单机多核环境下约束地形并行构建方法 |
CN109684061A (zh) * | 2018-12-24 | 2019-04-26 | 无锡江南计算技术研究所 | 一种非结构网格众核粗粒度并行计算方法 |
Non-Patent Citations (2)
Title |
---|
Design and implementation of a novel dynamic load balancing library for cluster computing;Ioana Banicescu;《Parallel Computing》;20050731;全文 * |
基于非结构网格的三维Navier-Stokes方程并行求解技术研究;林大楷等;《第十九届中国空气动力学物理气体动力学学术交流会摘要集》;20190725;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110633149A (zh) | 2019-12-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110633149B (zh) | 均衡非结构网格单元计算量的并行负载均衡方法 | |
CN102306396B (zh) | 一种三维实体模型表面有限元网格自动生成方法 | |
Dai et al. | Efficient map/reduce-based dbscan algorithm with optimized data partition | |
CN107480694B (zh) | 基于Spark平台采用两次评价的加权选择集成三支聚类方法 | |
CN110610042A (zh) | 基于阵面推进的非结构网格结构化处理方法 | |
CN112862972B (zh) | 一种表面结构网格生成方法 | |
Keyes | Aerodynamic applications of Newton-Krylov-Schwarz solvers | |
Hussain et al. | Novel dynamic partial reconfiguration implementation of k-means clustering on FPGAs: Comparative results with GPPs and GPUs | |
Pandey et al. | A survey of bioinformatics applications on parallel architectures | |
CN116258042B (zh) | 一种基于ddm的大规模传热异构并行仿真方法 | |
Ansari et al. | Mesh partitioning and efficient equation solving techniques by distributed finite element methods: A survey | |
CN111489447A (zh) | 一种适用于格子Boltzmann方法的直角网格自适应建模方法 | |
Fu et al. | Auto-NBA: Efficient and effective search over the joint space of networks, bitwidths, and accelerators | |
Carr et al. | Scalable contour tree computation by data parallel peak pruning | |
Densham et al. | Spatial analysis | |
CN110764824A (zh) | 一种gpu上的图计算数据划分方法 | |
Li et al. | Research and implementation of parallel artificial fish swarm algorithm based on ternary optical computer | |
Bandyopadhyay et al. | HdK-means: Hadoop based parallel K-means clustering for big data | |
Devine et al. | Partitioning and load balancing for emerging parallel applications and architectures | |
WO2023216915A1 (zh) | 一种基于图形处理器的直升机流场数值模拟系统及方法 | |
CN114119882B (zh) | 飞行器动态流场分析中高效的嵌套网格宿主单元搜索方法 | |
Yoshida et al. | CONeP: A cost-effective online nesting procedure for regional atmospheric models | |
Rivara et al. | Multithread parallelization of lepp-bisection algorithms | |
González García et al. | Load balancing for parallel computations with the finite element method | |
Rouigueb et al. | Integration of polynomials over n-dimensional simplices |
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 |