可移植可扩展科学计算工具箱 PETSc简介

2019-08-29 18:51

可移植可扩展科学计算工具箱PETSc

可移植可扩展科学计算工具箱PETSc (Portable, Extensible Toolkit for Scientific Computation)是美国能源部ODE2000支持开发的20多个ACTS(Advanced Computational Testing and Simulation)工具箱之一,由Argonne国家实验室承担开发并获得成功,主要用于在分布式存储环境高效求解偏微分方程组及相关问题。PETSc在软件实现上采用ANSI C和消息传递标准接口MPI,遵循面向对象设计的基本特征,同时也为使用者提供基于FORTRAN语言的调用接口。

PETSc工具箱概况

PETSc是系列数据结构和功能子程序的集合,三个基本组件KSP、SNES和TS本身基于BLAS、LAPACK、MPI 等库实现,同时为TAO、ADIC/ADIFOR、Matlab等工具提供数据接口和互操作功能,并具有极好的可扩展性能。PETSc为用户提供了丰富的Krylov子空间迭代方法和预条件子,并提供错误检测、性能统计和图形打印等功能。

目前PETSc不支持网格生成与精细技术、图形的划分与负载平衡方法、完整的科学计算可视化等,因为这些问题不是PETSc考虑的重点。PETSc对这类解题需求的主要应对办法是,针对不同的功能要求,找到其它若干合适、出色的数值软件,通过实现PETSc对这些专门软件的访问操作接口,使得用户能够在PETSc的解题环境下也能方便的调用相关软件的特定功能,从而避免无谓的重复性劳动。

作为一个不断发展更新的工具箱,PETSc的最初的开发工作始于1991年,期间随着对软件包设计理解的深入而经历了较大的发展,开发人员仍一直致力于软件包的局部内容改进与功能完善工作,保持着平均每年做两次版本更新的发展速度,迄今为止己有二十多个历史版本。目前最新的免费版本为2010年3月发布的3.1版,源代码公开(不包含用户自己加入的核心计算子程序)。如今PETSc己成为国际流行的成熟并行数值软件包,受到大量工程计算人员的青睐。

体系结构

不同于其它微分/代数方程解法器,PETSc为用户提供了一个通用的高层应用程序开发平台。基于PETSc提供的大量对象和解法库,用户可以灵活地开发自己的应用程序,还可随意添加和完善某些功能,如为线性方程求解提供预条件子、为非线性问题的牛顿迭代求解提供雅可比矩阵、为许多数值应用软件和数学库提供接口等。图1表示了PETSc在实现层次上的抽象,图2具体列举了PETSc的基本数值部件。这里做简要说明:

应用程序:用户在PETSc环境下基于PETSc对象和算法库编写的串行或并行应用程序,PETSc程序具有固定的框架结构,即有初始化、空间释放和运行结束等环境运行语句。

PDE解法器:用户基于PETSc的三个基本算法库(TS、SNES和KSP)构建的偏微方程求解器。

TS:时间步进积分器,用于求解依赖时间或时间演化的ODE方程,或依赖时间的离散化后的PDE方程。TS积分器最终依赖线性解法器SLES和非线性解法器SNES来实现。PETSc还为PVODE库提供了接口。

SNES:非线性解法器,为大规模的非线性问题提供高效的非精确或拟牛顿迭代解法。

1

SNES依赖于线性解法器,Newton型方法是软件包的核心,并采用线性搜索和信赖域方法实现。

KSP:线性解法器,它是PETSc的核心部分。PETSc几乎提供了各种高效求解线性方程的解法器,包括直接解法和各种迭代解法。对于大规模的线性方程,PETSc提供了大量基于Krylov子空间方法和预条件子的各种成熟而有效的迭代方法,以及其它通用程序和用户程序的接口。线性解法器由Krylov子空间方法对象KSP和预条件对象PC组成,统一由KSP库实现。

层次应用程序SNES (非线性方程解法器)TS (时间步进积分器)KSP (Krylov子空间方法)PC (预条件子)Mat(矩阵)Vec(向量)IS(索引集)BLASLAPACKMPI

图1:PETSc实现的层次结构

矩阵:PETSc的基本数据对象,支持稠密存储和压缩稀疏行存储(串行和并行两种形式)格式,并通过多台为这些方式提供了统一的外部访问。

向量:PETSc的基本数据对象。还包括索引与排序,结构化网格的分布列阵,支持分段存于不同的内存中。

索引集:它是一系列数据操作对象的集合,专门用来管理无结构网格向量的分发、聚集、局部和全局之间的映像、边界点的通信等基本操作。

2

SLES 非线性求解器TS 时间步进求解器牛顿迭代法其它线搜索信赖域Euler法 向后Euler法拟时间步其它Krylov子空间法GMRESCGCGSBi-CG-StabTFQMRRichardsonChebyshev其它PC预条件子 加法Schwarz 块JacobiJabobiILUICC LU其它(串行)Mat矩阵压缩行存储 (AIJ)块压缩稀疏 (BAIJ) 块对角(BDiag)稠密存储(Dense)其它索引集IS向量索引块索引跨度其它

图2:PETSc的数值组件

基本特色

作为一个求解偏微分方程的高效工具箱,PETSc具有很多独有的优点: 计算能力:PETSc为用户提供了丰富的算法和库资源。三个求解器(KSP、SNES和TS)构成了PETSc的核心组件。PETSc不仅为中小规模线性方程组的求解提供了高效的直接方法,还为大规模(稀疏)线性方程组的迭代求解提供了多种Krylov子空间方法和多种预条件子。

可兼容性:一方面,PETSc具有很强的兼容能力,可在不同体系结构和不同操作系统环境高效运行。另一方面,PETSc本身基于高性能的线性代数库(BLAS和LAPACK)和MPI消息传递环境实现,同时又充分吸收和融入了其它优秀软件的优点,如无结构网格区域分解和雅可比矩阵求解等方面的功能。

可扩展性:PETSc的可扩展性功能主要包括三个方面:计算性能的并行可扩展性、功能的可扩展性和计算能力的可扩展性。无论是在计算时间还是在浮点性能方面,PETSc提供的范例程序都有良好的线性加速比性能。面向对象的良好设计风格使得PETSc具有良好的功能扩展能力。作为一个高级应用程序开发平台,PETSc特别适合于用来开发大型应用程序。

抽象数据类型:PETSc基于面向对象技术实现,具有所有面向对象软件的可移植性、可

3

继承性和可扩展性等基本程序特征。PETSc 的向量、矩阵等基本数据对象完全采用抽象数据类型实现,尽量对用户屏蔽数据对象的区域分解和存储等细节。所有PETSc格点数据对象的划分、初始化和存取等基本操作都由DA对象来管理和相应PETSc库函数实现。用户基于PETSc对象可以灵活开发其应用程序。

输出能力:PETSc具有良好的性能分析功能。同时,PETSc还具有高可用性,并具有很强的错误诊断能力。

消息传递:PETSc所有对象和库都是在MP工消息传递环境下开发。一个标准的PETSC程序本身就是一个标准MPI并行程序。唯一不同的是初始化和结束一个程序的运行需要PETSc来管理。

求解步骤:PETSc三个核心解法器的使用都包括创建、初始化、执行和空间释放几个阶段,思路清晰明确。以KSP解法器为例,PETSC程序一般分四个必要阶段:1.创建解算子、解向量和右端向量,并填充解算子(矩阵)、设置初始解和右端向量;2.创建KSP环境,设置Krylov子空间方法和预条件子;3.启动KSP解法器;4.释放所有存储空间。

但PETSC同时也具有不少缺点。尽管PETSC不需要用户懂得面向对象技术,但要求用户必须基于它所提供的数据结构来组织并行程序的开发。而最重要的是PETSC由于兼顾串行和并行应用程序,许多线性解法器都没有针对并行计算做相应的优化,这对程序的并行求解性能有着很大的影响。

PETSc数据结构组件

针对于求解PDE方程的几个关键的数学对象,PETSc设计了相应的数据结构,并为其定义了抽象数据类型。此外,PETSc还在充分考虑这些数据结构类型的使用需求及相互关联性的基础上,给出并实现了各种类型运算和处理的功能操作接口,包括单类型的自身操作和跨类型的协同操作,既供用户编程时做自由的选择调用,也为上层的软件模块(方程求解器)实现提供足够的基础支持。这些复杂、高级数据结构类型的设计与实现,是PETSc优于许多简单数值库的一个直接原因。

PETSc的数据结构包括向量Vec,矩阵Mat以及网格管理对象:索引与排序,结构网格DA以及无结构网格的IS对象。

向量Vec

向量(由Vec表示)是一种最简单的PETSc对象,用于存储离散PDE的解、线性方程组的右端项等。PETSc向量的内涵要比我们编程常用的数组丰富得多,它可以分段存储在不同的内存空间中以适应并行计算的需求,同时抽象与封装的特性又使得它可以包含更全面的数据信息。

用户在编写数值程序时,往往需要用到各种不同的向量操作,如信息获取、赋值、数据通信等访问操作,以及内积、求模、取最值等运算操作。PETSc在充分考虑各类应用需求的基础上,为用户提供了大量直观方便、串并行使用几乎完全一致的功能调用接口,使得用户在编程过程中可以更多的关注于向量对象的宏观调度,而抛开过多的具体实现细节。

在PETSc向量的使用中,一个具体向量对象的应用要经过创建、赋值、使用(访问、运算等)、注销等一系列操作过程,一个基本的应用示范如下

Vec x; 申明x的类型为向量

VecCreate(comm, *x) ; 创建向量x

4

VecSetType(vec,VecType) ; 设置向量类型,有串行与并行两种。

VecSetSizes(v, n, N) ; 设置向量的分量个数(n为局部个数,N全体为个数) VecSetFromOptions(x); 预置置运行时选项,应用程序运行时能修改参数。 VecSetValues(x, row, value,InsertMode) ; 赋值 VecDestroy(x) ; 释放内存空间。 对于向量的创建,在comm中的所有处理机都必须调用创建程序,因为这些程序在通讯器中的所有处理机上是集体性的。对于赋值语句VecSetValues() 完成后必须调用VecAssemblyBegin(x)和VecAssemblyEnd(x)来执行任意非局部分量所需的消息传递。

PETSc向量所提供的的基本运算有下表所示: 函数名 VecAXPY(Vec y,PetscScalar a, Vec x); VecAYPX(Vec y,PetscScalar a, Vec x); VecWAXPY(Vec w,PetscScalar a, Vec x, Vec y); VecAXPBY(Vec y,PetscScalar a,PetscScalar b,Vec x,); VecScale(Vec x,PetscScalar a); VecDot(Vec x, Vec y, PetscScalar *r); VecTDot(Vec x, Vec y, PetscScalar *r); VecNorm(Vec x, NormType type, double *r); VecSum(Vec x, PetscScalar *r); VecCopy(Vec x, Vec y); VecSwap(Vec x, Vec y); VecPointwiseMult(Vec w, Vec x, Vec y); VecPointwiseDivide(Vec w, Vec x, Vec y); VecMDot(Vec x, int n, Vec y[],PetscScalar *r); VecMTDot(Vec x, int n, Vec y[],PetscScalar *r); VecMAXPY(Vec y,int n, PetscScalar *a, Vec x[]); VecMax(Vec x, int *idx, double *r); VecMin(Vec x, int *idx, double *r); VecAbs(Vec x); VecReciprocal(Vec x); VecShift(Vec x ,PetscScalar s); 表1 PETSc向量运算

运算 y = y + a * x y = x + a * y w = a * x + y y = a * x + b * y x = a * x r = x? * y r = x? * y r =||x||type r = ∑xi y = x y = x while x = y wi = xi * yi wi = xi /yi r[i] = x? * y[i] r[i] = x? * y[i] y = y + ∑iai * x[i] r = max xi r = min xi xi = |xi| xi = 1/xi xi = s + xi 5


可移植可扩展科学计算工具箱 PETSc简介.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:一般能力倾向测验-72-A

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: