710 likes | 1.26k Views
并行软件库介绍 赵永华 中国科学院计算机网络信息中心 超级计算中心 yhzhao@sccas.cn. 主要内容. 自主并行软件包 HPSEPS 介绍 MUMPS 并行软件包介绍 hypre 并行软件包介绍 Parmetis 并行软件包介绍 PETSc 并行软件包介绍. 自主并行软件包 HPSEPS 开发者:赵永华 迟学斌等 中国科学院计算机网络信息中心 超级计算中心. 概述.
E N D
并行软件库介绍 赵永华 • 中国科学院计算机网络信息中心 超级计算中心 yhzhao@sccas.cn
主要内容 • 自主并行软件包HPSEPS介绍 • MUMPS并行软件包介绍 • hypre并行软件包介绍 • Parmetis并行软件包介绍 • PETSc并行软件包介绍
自主并行软件包HPSEPS 开发者:赵永华 迟学斌等 中国科学院计算机网络信息中心 超级计算中心
概述 HPSEPS(High Performance Symmetric Eigenproblem Software,高性能对称特征问题软件)是由中科院计算机网络信息中心/超级计算中心自主开发。主要用于高性能并行求解实对称/厄密矩阵特征问题、SVD奇异值分解、LSQR分解及其相关问题。 • 是目前国际上唯一提供了稠密和稀疏特征问题等多个并行求解器 的并行软件包 : • 稠密问题并行求解器优于国际通用软件包ScaLAPACK,并被鉴定专家评为国际领先水平(十五信息化建设专项鉴定专家); • 稀疏问题并行求解器在可扩展性优于国际通用软件包PARPACK; • 形成了在千核以上对大规模问题的可扩展并行计算; • 已用于多个具体应用问题的并行求解 • 用户应用程序可以直接调用所需的并行求解器 • 可将软件包的并行模块作为黑匣子嵌入应用程序
应用领域 大规模特征值问题是许多科学和工程应用:结构动力分析、量子化学、电子结构和材料科学等计算核心,成为国外许多超级计算机极力求解的计算问题之一。 随着计算模型变得越来越复杂,导致的稀疏矩阵规模达到千万阶甚至上亿。 • 量子计算中电子结构遇到的特征问题达到了千万阶以上规模,有时需要得到几百个特征对; • 离子加速器产生的大规模稀疏特征问题可达到上亿阶; • 日本地球模拟器上费米-Hubbard模型中遇到的大规模稀疏特征问题规模达到了几百亿阶。 • 应用范围广 • 是国外许多超级计算机极力求解的计算问题之一。需要扩展到几千处理器规模;具有求解上亿个自由度的计算能力;
HPSEPS功能 • HPSEPS软件包主要包括下列一些求 解器: • 稠密对称特征问题并行求解器(基于不同的块算法) • 稀疏对称特征问题并行求解器 • 显示重开始+ deflate技术+Lanczos 方法 • LOPBCG方法 • SVD奇异值分解和LQSR并行求解器 • 并已用于: • 中科院化学所的二百万规模“有机共轭体系分子”的求解。 • 量子点(Quantum Dots)中较大规模稀疏本征问题的并行求解,形成了2048核的可扩展性并行计算; • HPSEPS已被安装到中山大学光电材料与技术国家重点实验室的并行计算机系统上。求解了光子晶体中大规模问题,得到了非常好的效果。
User selects a parallel solver 厄密/对称稠密矩阵特征问题并行求解器 厄密/对称稀疏矩阵 特征问题并行求解器 SVD和PLSQR 分解并行器 求解器 稠密矩阵处理 LANCZOS迭代处理 LOBPCG迭代处理 不同的谱转换:(A-δI)-1、 M-1A、(A-δM)M-1等 不同的并行正交化、重正交 以及 B-正交化等 并行QR、LU、LLT分解 HouseHolder并行转化 特征求解器有关的线性代数子程序,预条件:ILU AMG 块-Jacobi等 块-Jacobi等 稠密和稀疏矩阵存储分布方式:2D块循环 AIJ BAIJ BDIAG matrix-free 其它 管理通信、错误核查和一些辅助子程序 BLAS LAPACK Sparse Matrix-vector MPI OpenMP Multi-core 软件包架构 HPSEPS的设计采用了自底向上的层次设计方法,每个子程序建立在一些基本例程之上。整个软件包由多层结构构成,其层次结构如下图。
软件包涉及到的主要算法 • 提出了各类大规模数值计算和对称特征问题有效并行算法和实现技术。 • 求解稠密特征问题的不同并行块算法; • 求解稀疏特征问题的deflate Lanczos 并行算法; • 基于最优化的各类预处理并行算法; • 多级混合并行实现技术。
软件包功能模块接口 下面给出了HPSEPS提供的子程序的简要说明,其中在子程序名中出现的符号*代表z(复双精度)、c(复单精度)、d(双精度)或s(单精度)。 • 稠密对称矩阵特征问题的子程序主要模块和接口: • 第一层是计算对称特征系统问题的一些驱动程序。包括: (1) p *gseps:广义对称/厄密特征问题并行求解(选定的特 征值和特征向量) (2) p*sseps: 标准对称/厄密特征问题并行求解(选定的特征 值和特征向量) • 第二层包含特征问题并行求解器所需要的矩阵转换子程序、分解子程序和线性代数子程序等,主要包括: (1) p*syg2st:广义实对称特征问题转化为标准特征问题 (2) p*heg2st:广义Hermitian特征问题转化为标准特征问题 (3) p*trsm:并行计算含有多个右端项的实三角矩阵方程组 (4) p*htrsm:并行计算含有多个右端项的复三角矩阵方程组 (5) p*sytrd:Householder并行转换对称矩阵为三对角形式
(6) p*hetrd:Householder并行转换Hermitian矩阵为三对角形式。 (7) p*stebz:分而治之并行求解实对称三对角矩阵的特征值。 (8) p*steiz:逆迭代并行求解实对称三对角矩阵的特征向量 (9) p*t2s:回代转化并行求解标准特征问题的特征向量 (10) p*st2g:回代转化并行求解广义特征问题的特征向量 • 最后一层包含HPSEPS内部子程序、通信有关的子程序和一些数据处理、错误检测等管理工具。下面列出了其中部分主要子程序。 • 与通信有关的子程序: (1) mpi_init:MPI初始化子程序 (2) mpi_creat_cart:创建二维处理器网格通信器 (3) mpi_sub_col:创建一维行通信器 (4) mpi_sub_row:创建一维列通信器 • 与矩阵分布有关的子程序: (1) mat_2d:矩阵的二维-块循环分布子程序,得到矩阵的数据 结构和在二维处理器网格上的分布信息
(2) indxg2l:得到存储全局矩阵元素(i, j)的处理器在二 维处理器网格中的逻辑坐标(row_i, col_j) (3) indxg2p:得到全局矩阵元素(i, j)在处理器器上的局 部子矩阵中对应的元素坐标(loc_i, loc_j) (4) mat _ div:三对角矩阵秩-2划分。 (5) *get_sub_mat:得到三对角矩阵秩-2后的子矩阵。 (6) pdist_A: 将矩阵按2D-块方式分布到二维处理器网格中 • 其它子程序 (1) p*gnrm:广义特征问题特征向量余范数求解 (2) p*nrm:标准特征问题特征向量余范数求解 (3) *lag_app_eigen:Laguerre迭代求解函数近似值 (4) *sort:数据排序子程序 (5) Mem_free:释放内存空间 (6) Comm_free:释放通信器
稀疏对称特征问题 • 在HPSEPS中,提供了基于显式重启-再正交和deflate技术的Lanczos算法的稀疏对称矩阵特征问题并行求解模块。 • HPSEPS为标准稀疏对称特征问题和广义稀疏对称标准特征问题求解提供了不同的方法和接口: • 对于标准稀疏对称特征问题: Ax=λ x HPSEPS提供了两种求解方式: 标准求解方式 OP=A 位移逆求解方式OP=(A-δI )-1
对于广义稀疏对称特征问题: Ax=λMx 首先将此问题转换为标准特征问题,HPSEPS提 供了四种求解方式: (1) 标准逆方式 OP=M-1A (2) 位移逆方式 OP=(A-δM) -1M 为此,HPSEPS提供了不同的用户求解接口,为了给 用户使用该软件包提供更好的灵活性,软件包允许用户 提供不同的OP操作: 为了保持操作的有效性,矩阵-向量应保持输入向量和输出向量在处理器上分布的一致性。输入向量的第j个元素在处理器P上,输出向量的第j个元素也必须在处理器P上
主要模块和接口: (1) p*lancs:Lanczos框架接口。其通过调用不同的模块,完成矩阵的三对角分解、正交化处理,得到收敛的Ritz对等。 (2) p*getv:产生分布在不同处理器上的初始向量。 (3) p*sletr:m-步Lanczos并行化处理和分解。 (4) p*orth:向量并行正交化过程 (5) p*norm2:并行计算向量的2-范数。 另外,针对一般性稀疏矩阵结构,HPSEPS提供了稀疏矩阵-向量积的并行求解模块。
使用HPSEPS编程的方法 HPSEPS为求解不同模式的矩阵特征问题提供了相应的模板。用户通过适当的修改这些模板,可以得到求解具体特征问题的程序。下面是使用HPSEPS软件包应遵循的一些步骤: • 选择一个合适的驱动程序。 • 确定处理器的二维网格结构,分布矩阵到各处理器(稠密问题)。 • 修改问题依赖的变量。 • 核查计算结果的精度。
稠密特征问题:在深腾7000超级计算机,使用128,256,512,1024核并行求解 30000×30000和60000×60000 规模问题的全部本征对。 • 稀疏特征问题:求解问题规模大约为190万,得到5个最小本征值。2048个核上性能达到了较高的可扩展性能
Hypre软件包 美国加州大学(UC) 劳伦斯-利弗莫尔国家实验室(LLNL)/ 应用科学计算中心(CASC)
软件包概述 Hypre (High Performance Preconditioners, 高性能预条件子)源于美国能源部和LLNL等在研究国防、环境、能源和生物科学中的物理现象时,开发的一些模拟代码 。主要用于大规模并行计算机上求解大型稀疏线性方程组,目的是为用户提供高级并行预条件子 ,Hypre具有强壮性、易用性、适应性和互动性,其主要特性为: • 可扩展的预条件子:包括诸如结构化多重网格(SMG)和代数多重网格(AMG)等几类可扩展求解超大规模稀疏线性方程组的预条件子算法。 • 常用的迭代法实现: Hypre提供一些最常用的基于Krylov子空间迭代法。比如求解非对称矩阵的GMRES和求解对称矩阵的CG(包括PCG, CGNR, BiCGStab)。 • 直观的以网格为中心的界面: Hypre通过各种网格界面表示和处理稀疏矩阵,每个界面提供对一些求解器的访问,因此不需要用户去学习和创建复杂的数据结构
Hypre:数据结构、求解器和网格接口关系 第一层表示各种线性系统的网格界面, 第二层表示各种线性求解器(迭代法和预条件子) 第三层表示各种数据划分和矩阵向量存储策略。
网格接口 HYPRE为不同的应用提供了不同的接口, 该接口目前仅支持标量偏微分方程。 • 结构化(Struct)接口 : 面向结构网格离散的应用.每个网格点的离散格式具有相同的模式。如有限差分(FDM) • 半结构化(Sstruct)接口 面向半结构(semi-struct)网格离散的应用,如局部加密AMG、块结构网格上的应用, 如有限差分方法(FDM), 有限体积方法(FVM) • 基于有限元的无结构界面(FEI) 应用于有限元(FEM)得到的线性方程组 • 基于线性代数的非结构矩阵界面(IJ) 该接口以矩阵方式显式地表示线性代数方程组,是适用范围最广泛的接口。应用于稀疏线性方程组, 为网格界面的补充
迭代法与预条件子 • 迭代方法 Krylov解法器(CG,GMRES(缺省情形),TFQMR,BiCGSTAB); BoomerAMG(一个并行代数多重网格解法器); 具有迭代加细(refinement)的SuperLU直接解法器(串行)。 • 预条件子 Diagonal:对角,块Jacobi预条件子(缺省情形); PILUT:具有阈值(threshold)的并行不完全LU分解(PILU); Euclid:并行ILU预条件子的扩展; SMG:半粗化(semi-coarsening)多重网格预条件子;二维和三维情形的光滑子(smoother)分别采用线松弛和面松弛 PFMG:半粗化多重网格预条件子,使用简单点松弛作为光滑子; BoomerAMG:并行代数多重网格(AMG)预条件子;用户可选择不同的并行粗化策略及松驰格式光滑子. ParaSails:并行稀疏近似逆预条件子
ParaSails用于计算优化问题: , 因此M为Frobenius范数下A的近似逆。如果A对称, 且有Cholesky分解:A=LLT, 求解 得到三角近似逆G, ; • PILUT并行求解A的一个近似分解。矩阵A支持HYPRE 的ParCSR格式、PETSc 的矩阵形式和ISIS++ Row的矩阵形式。由于M是非对称的(即使A 是对称的),因此不适合作为对称矩阵的迭代法(如CG)的预条件子; • Euclid是一种扩展性能较好的并行不完全LU分解(ILU)预条件子,它支持各种ILU(k)和 ILUT, 包括块Jacobi ILU(k),并行ILU(k),它比块Jacobi预条件子更有效
网格接口与求解器的关系 HYPRE为不同的接口定义了不同的数据结构,并配以适合该接口的解法器 Hypre的网格界面与求解器的关系 X表示支持
多重网格MG • 多重网格解法器是HYPRE的重要特色. • 多重网格方法包含三个要素:光滑算子、限制算子和延拓算子 • 分片线性插值作为延拓 • 相邻点的加权平均作为限制 • 松弛迭代(如Gauss-Seidel、SSOR)等简单迭代作为光滑 • HYPRE提供多个多重网格解法器 如AMS,SMG,PFMG,MLI, BoomerAMG. 这些可满足各种应用的需求。其中SMG和BoomerAMG是目前实际应用中使用最广泛的两个解法器.
SMG求解矩形网格下对流扩散方程的FDM, FEM或FVM离散得到的方程组。二维时SMG只在x方向半粗化, 在y方向用的是线光滑, 三维时则采用面光滑。而PFMG仅使用简单的点光滑,因此PFMG的健壮性不如SMG,但是它在作V-循环迭代时效率更高. • BoomerAMG既可作为迭代法, 也可作为预条件子。用户可以根据情况选择不同的并行粗化技巧(比如CLJP粗化、经典RS粗化)和松弛策略(比如Gauss-Seidel松弛、Jacobi或加权Jacobi松弛).
Hypre 使用方法 下面的例子是采用并行半粗化多重网格迭代法求解结构网格界面下的线性系统 /* Set up the grid and stencil */ HYPRE_StructGridCreate(MPI_COMM_WORLD, dim, &grid); HYPRE_StructGridSetExtents(grid, ilower, iupper); HYPRE_StructGridAssemble(grid); % 构造结构网格和模板 HYPRE_StructStencilCreate(dim, stencil_size, &stencil); HYPRE_StructStencilSetElement(stencil, 0, offset0); /* Set up the matrix, right-hand side, and initial guess*/ HYPRE_StructMatrixCreate(MPI_COMM_WORLD, grid, stencil, &A); HYPRE_StructMatrixInitialize(A); % 构造结构化矩阵 HYPRE_StructMatrixSetBoxValues(A, ilower, iupper, nelts, elts, Avalues); HYPRE_StructMatrixAssemble(A); HYPRE_StructVectorCreate(MPI_COMM_WORLD, grid, &b); HYPRE_StructVectorInitialize(b); % 右端向量的初始化 HYPRE_StructVectorSetBoxValues(b, ilower, iupper, bvalues); ... HYPRE_StructVectorAssemble(b); HYPRE_StructVectorCreate(MPI_COMM_WORLD, grid, &x); HYPRE_StructVectorInitialize(x); % 解向量的初始化
HYPRE_StructVectorSetBoxValues(x, ilower, iupper, xvalues); ... HYPRE_StructVectorAssemble(x); /* Set up the solver */ HYPRE_StructPFMGCreate(MPI_COMM_WORLD, &solver); HYPRE_StructPFMGSetMaxIter(solver, 50); /* optional */ HYPRE_StructPFMGSetTol(solver, 1.0e-06); /* optional */ HYPRE_StructPFMGSetup(solver, A, b, x); %创建求解器(PFMG) /* Solve the linear system */ HYPRE_StructPFMGSolve(solver, A, b, x); %求解线性方程组 /* Get solution info and free up memory */ %返回结果并释放内存 HYPRE_StructVectorGetBoxValues(x, ilower, iupper, xvalues); HYPRE_StructPFMGDestroy(solver); HYPRE_StructGridDestroy(grid); HYPRE_StructStencilDestroy(stencil); HYPRE_StructMatrixDestroy(A); HYPRE_StructVectorDestroy(b); HYPRE_StructVectorDestroy(x);
算例 • 对流-反应-扩散方程 对流-反应-扩散(Convection-Reaction-Diffusion)方程: div (-K grad u + B u) + C u = F in Ω, 采用五点差分离散, 得到方程组: Au = b, 其中A = [Aii Aib ; Abi Abb], u = [ui ; ub], b = [bi ; u0]。 考虑到边界条件 u= u0 on ∂Ω, 即 ub= u0 . 于是 [Aii 0 ; 0 I] [ui ; ub] = [bi - Aibu0 ; u0] 。 在hypre-1.10.0b/src/examples/ex4.c中, Ω为单位正方形, 处理机网格为N ×N,每个处理机上的网格为n ×n, h=1/(Nn+1), 采用结构网格界面和5点差分离散, 并考虑边界条件。 相关系数: 扩散系数K=x2+exp(y); 对流系数B=1.0; 反应系数 C=10.0; 边界条件: u0 =(sin(5πx)+sin(5πy))/1000; 右端项: F= 2π2 sin(πx)sin(πy) 。 ex4.c提供4种迭代法:SMG、PFMG、PCG、GMRES, 后两种迭代法可以增加SMG、PFMG, 对角或块Jacobi等4种预条件子。
Struct和IJ两种界面下, 各求解器的迭代次数和运行时间(256×256,Np=4 ) 注: T(SMG) = T(SMG_setup) + T(SMG_solve), (cpu clock time), Np=4, tol=1.e-6 AMG的并行效率(网格规模为1024×1024)
MUMPS 由 CEC ESPRIT IV长期研究计划项目资助
MUMPS概述 MUMPS:多波前大规模并行稀疏直接解法器(A MUltifrontal Massively Parallel sparse direct Solver) • MUMPS是一个通过直接方法求解线性方程组: Ax=b 的并行软件包,其中A是一个对称或非对称的稀疏方阵。 • MUMPS基于多波前方法的直接求解方法。通过将矩阵A直接分解为A=LU或A=LDLT(对称矩阵)形式完成大规模线性方程的求解。
主要功能 • 求解不同类型的稀疏矩阵方程问题: 对称或非对称矩阵(部分主元法),复和实算术矩阵 • 提供了多种矩阵输入格式: • 组装格式(assembled format) • 分布式组装格式(distributed assembled format) • 单元格式(elemental format) • 迭代加密和向前误差分析; • 部分分解和Schur补矩阵 • 提供了多个排序接口:AMD,AMF,PORD,METIS和SCOTCH
输入矩阵 • 矩阵类型 矩阵类型在初始化阶段(JOB=-1)由所有进程通过参数mumps par%SYM设定: 0: A是非对称型 1:A是对称正定型 3:A是一般对称矩阵 • 矩阵的输入格式 MUMPS提供了多种矩阵输入格式,这些由参数ICNTL(5)和ICNTL(18)控制。 • 单元格式: 矩阵由主进程(host)集中输入, 置 ICNTL(5)=1 ICNTL(18)=0 • 组装格式(assembled format) • 矩阵由主进程(host)集中输入 • 结构由主进程提供 (analysis) • 元素被分布到各处理器上 (numeric factorization)
主要计算步 • MUMPS计算Ax=b通过三步完成: (1)分析(JOB=1) • 主进程执行排序操作 • 主进程执行符号分解 (2) A=LU或A=LDLT分解(JOB=2) • A被分布到各处理器 • 由主进程和一个或多个从进程对每个波前矩阵进行数值分解 (3) 求解(JOB=3) • b由主进程分布到各处理器 • x由分布到各处理器的因子计算得到 • x被聚集到主进程或分布到各处理器
主要特性 • 每个处理阶段可独立调用 • 异步通信 使得计算和通信实现了重叠 • 动态调度 算法是自适应的,在执行时重分布任务和数据到适当的处理器
MUMPS应用 • MUMPS用户包括学术界和工业界,目前用户数已超过1000个。 并且平均每天被下载一次。 • 典型应用包括: • 结构力学和CAD • 流体力学、磁流体和物理化学 • 地震波传播与成像,海洋模式 • 声学和电磁学传播 • 有限元分析,数值优化,仿真 • 航空、地球物理等
OSSAU code of French CEA/CESTA:2D / 3D structural mechanics code • ODYSSEE code of French CEA/CESTA 已成功应用到具有3千万未知量的3D网格问题 • Electro-magnetism code (Finite Element Meth. + Integral Equation) • Complex double precision, Schur Compl. • Fluid mechanics • LU factorization with static pivoting (SuperLU approach like) • Car body • 148770 unknowns and 5396386 nonzeros MSC.Software
MUMPS使用方法及实例 • 组装格式程序 下面是使用MUMPS计算双精度问题的组装格式例子程序。两个文件mpi.h和mumps_struc.h必须被包含在程序中,MPI的初始化和终止通过调用MPI_INIT和MPI_FINALIZE完成。在程序中,首先设定 JOB=1对初始化MUMPS,由主进程读入求解的问题(N, NZ, IRN, JCN, A, 和HS)。通过设定JOB=6,然后调用MUMPS由所有进程完成问题的求解。最后设定JOB=-2,调用MUMPS完成数据结构的释放 PROGRAM MUMPS_EXAMPLE NCLUDE ’mpif.h’ INCLUDE ’dmumps_struc.h’ TYPE (DMUMPS_STRUC) id INTEGER IERR, I CALL MPI_INIT(IERR) C Define a communicator for the package id%COMM = MPI_COMM_WORLD C Ask for unsymmetric code id%SYM = 0 C Host working id%PAR = 1 C Initialize an instance of the package id%JOB = -1 CALL DMUMPS(id)
这样,对一个构造好的矩阵和右端向量: C Define problem on the host (processor 0) IF ( id%MYID .eq. 0 ) THEN READ(5,*) id%N READ(5,*) id%NZ ALLOCATE( id%IRN ( id%NZ ) ) ALLOCATE( id%JCN ( id%NZ ) ) ALLOCATE( id%A( id%NZ ) ) ALLOCATE( id%RHS ( id%N ) ) READ(5,*) ( id%IRN(I) ,I=1, id%NZ ) READ(5,*) ( id%JCN(I) ,I=1, id%NZ ) READ(5,*) ( id%A(I),I=1, id%NZ ) READ(5,*) ( id%RHS(I) ,I=1, id%N ) END IF C Call package for solution id%JOB = 6 CALL DMUMPS(id) C Solution has been assembled on the host IF ( id%MYID .eq. 0 ) THEN WRITE( 6, * ) ’ Solution is ’,(id%RHS(I),I=1,id%N) END IF C Deallocate user data IF ( id%MYID .eq. 0 )THEN DEALLOCATE( id%IRN ) DEALLOCATE( id%JCN ) DEALLOCATE( id%A ) DEALLOCATE( id%RHS ) END IF C Destroy the instance (deallocate internal data structures) id%JOB = -2 CALL DMUMPS(id) CALL MPI_FINALIZE(IERR) STOP END , 我们给出如下输入: 5 :N 12 : NZ 1 2 3.0 2 3 -3.0 4 3 2.0 5 5 1.0 2 1 3.0 1 1 2.0 5 2 4.0 3 4 2.0 2 5 6.0 3 2 -1.0 1 3 4.0 3 3 1.0 : A 20.0 24.0 9.0 6.0 13.0 :RHS 我们将得到解RHS(i) = i, i = 1, . . . , 5.
ParMETIS并行软件 Lawrence Livermore National Laboratory
ParMETIS ParMETIS:并行图划分和填充-约化矩阵排序(Parallel Graph Partitioning and Fill-reducing Matrix Ordering) , 特别适合于大规模无结构网格的并行数值模拟。 • ParMETIS基于MPI并行库,实现了用于无结构图划分、网格划分、计算稀疏矩阵的填充-约化次序等多种算法。 • ParMETIS扩展了METIS所提供的功能并包含了特别适合于并行计算和大规模数值模拟的子程序。 • ParMETIS中实现的算法基于并行多层k-路图划分算法、自适应再划分算法及并行多约束算法。
功能描述 • 图划分 • 快速计算非常大规模图的高质量划分; • 利用几何信息 (当可用时) 降低划分时间而不损失质量; • 可为多相及多物理计算划分图。 • 网格划分 • 直接计算非常大规模网格高质量划分, 无需应用程序创建基本图; • 提供网格对偶图的高效并行程序。 • 图重划分 • 快速计算自适应加密网格的高质量再划分; • 优化移去的顶点个数以及所得划分的边切割。 • 划分加细 • 改进由其它划分算法产生的划分的质量。 • 矩阵重排序 • 计算稀疏矩阵的填充-约化(fill-reducing)次序; • 使用基于节点的嵌套剖分算法,此算法显示比其它流行重排序算法更优越。
ParMetis可以执行下列操作 无结构图划分 是否存在顶点坐标 你有什么时间/质量权衡 ParMETIS_V3_PartKway ParMETISV3_PartGeomKway ParMETIS_V3_PartGeom 网格划分 由网格构造图 自适应加密重划分图 精化划分质量 计算填充-约化次序 ParMETIS_V3_PartMeshKway ParMETIS_V3_Mesh2Dual ParMETIS_V3_AdaptiveRepart ParMETIS_V3_RefineKway ParMETIS_V3_NodeND 子程序调用
无结构图划分 • 图划分的并行子程序ParMETIS_V3_PartKway基于串行多层k-路分区算法。该算法已被证明能够迅速生成高质量的划分。它包括三个阶段: 图的粗化、初步划分、加密。 • 当顶点坐标可用时,PARMETIS也为非结构图划分提供了ParMETIS_PartGeom函数。 ParMETIS _PartGeom仅基于空间填充曲线方法计算一个分区。因此,它非常快(通常比ParMETIS PartGeomKway快5到10倍),但它的计算质量差。此子程序可用于空间填充曲线适合的分区技术中的某些计算(例如,N体计算)。
直接网格划分 PARMETIS3.0提供了一个新的例程ParMETIS_V3_PartMeshKway支持由网格(而不是图)作为输入的划分和重划分计算。 • 在内部,ParMETIS_V3的PartMeshKway使用mesh_to-graph子程 序,然后调用由ParMETIS_V3 PartKway和ParMETIS_V3 PartGeomKway使用的同样核心划分子程序 。 • PARMETIS没有提供直接计算网格自适应重划分这样的例程。然而,它提供了例程ParMETIS_V3_Mesh2Dual,用来快速、并行地为一个给定的网格构造一个偶图(dual graph)。它可以用来为ParMETIS_V3_AdaptiveRepart子程序构建一个输入图形。 • 从本质上讲,ParMETIS_V3_PartMeshKway和ParMETIS_V3_Mesh2Dual承担着用户高效地编写一个网格到图的子程序责任。实验表明,这个例行通常占用了PARMETIS计算划分时约一半的运行时间
自适应加密网格 PARMETIS提供了重划分自适应加密网格的子程序ParMETIS_V3_ AdaptiveRepart。 该子程序假设网格已很好地分布在各处理器,但存在着不好的负载平衡。
划分加密 PARMETIS提供了用来改善已存在划分质量的子程序ParMETIS_V3_ RefineKway。一旦一个图被划分并被重新分布,可以调用ParMETIS_V3_ RefineKway,进一步改善划分的质量。 • 像ParMETIS_V3_AdaptiveRepart,该子程序假设图已很好的被分布在各处理器。 • 同ParMETIS_V3_AdaptiveRepart一样, ParMETIS_V3_RefineKway执行局部粗化。这两个子程序也使用用样加密算法。不同之处在于ParMETIS_V3_RefineKway没用像ParMETIS_V3_AdaptiveRepart一样对最粗的图进行初始平衡化分解。二是假设图已很好地分布,并且初始划分有好的平衡。这样对于已很好分布的图而言,ParMETIS_V3_RefineKway是很快的。
填充-约化(fill-reducing)次序 ParMETIS_V3_NodeND是PARMETIS提供的计算填充-约化次序的子程序。适合于基于Cholesky的直接分解算法。ParMETIS_V3_NodeND对图初始如何分布在各处理器没用要求。它能有效地随机分布图的填充-约化次序。 ParMETIS_V3_NodeND首先使用ParMETIS V3 PartKway计算高质量的划分并相应的进行图的重新分布。接下来计算logp层消去树。当图已经被分成P部分(P是处理器数),图被重新分布在各处理器。这样每个处理器接收唯一的子图,而一个多最小度算法用来对这些更小的子图进行排序。
Parmetis输入输出格式 • 在Parmetis中,所有与图有关的子程序的输入格式包括:图的邻接结构、顶点和边的权重、描述图如何被分布在各处理器上的数组。 • 图得结构采用压缩存储格式(CSR),我们首先为串行图描述CSR存储结构,然后描述图如何被分布到各处理器上。下面为一个结构图的存储例图, 图(a)为一个简单的图,图(b)为串行CSR存储格式,而图(C)是分布式CSR格式。