--(课件)-PETSc并行程序设计方法(ppt133)-流程管理
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
引集排序的映射 AOApplicationToPetscIS:从应用索引集排序得到PETSc索
引集排序的映射
21
3.1.4 规则网格的DA实现
分布式数组(DA)是PETSc的一个重要特色。 DA自动管理 数据在局部进程之间的划分、消息传递和读写。用户只需提 供数组的全局数值,并通过全局和局部之间的逻辑排序来引 用数组元素。在PETSc学习过程中,用户要特别注意向量( Vector)和数组(Array)两个概念,前者着重强调独立于数 组数值和存储之外的逻辑结构或排序上的抽象,而后者着重 强调数组元素的访问和数值改写。
PETSc并行程序设计方法
中科院计算机网络信息中心超级计算中心
/sce,Email:walls@
程强 迟学斌 冯仰德 王建 赵永华
2004年11月,北京
1
报告基本目标
• 全面介绍 PETSc 体系结构、基本特色和功能 • 促进PETSc应用程序开发方面的合作与交流 • 寻求 PETSc 软件开发方面的广泛建议和帮助
19
3.1.3 向量对象的排序
PETSc排序与应用排序之间的差异主要来源于两个原因:局 部序号和全局序号的不同;不同区域分解方法之间的差异。
AOCreatBasic:定义一个新的排序映射 AOCreatBasic( MPI_Comm comm, int n, int apordering, int petscordering, AO ao)
22
DACreat2d:创建一个2维的DA数组 DACreat2d:( MPI_Comm comm, DAPeriodicType wrap, DAStencilType st, int M, int N, int m, int n, int dof, int s, int lx, int ly, DA da)
14
VecAssemblyBegin:启动一个向量的创建 VecAssemblyEnd:完成一个向量的创建 VecDuplicate/VecDuplicateVecs :复制一个/组向量 VecDestroy/VecDestroyVecs:释放一个/组向量
15
3.1.2 向量对象的基本运算操作
VecGetOwnershipRang:返回向量在划分区域(进程)中 的下界和上界
4
1.概述
PETSc(Portable, Extensible Toolkit for Scientific Computation) 是美国能源部 ODE 2000 支持开发20多个ACTS工具箱之一, 由Argonne国家实验室Satish Balay等人开发的可移植可扩展 科学计算工具箱, 主要用于高性能求解偏微分方程组及相关 问题。PETSc所有消息传递均采用MPI标准实现。
此外,还涉及向量的算术运算,如点积(VecDot)、范数( VecNorm)、最小值(VecMin) 、绝对值(VecAbs) 、倒 数(VecReciprocal)、各种乘积(VecAXPY, VecAYPX, Vec WAXPY, VecAXPBY, VecScale)等。
17
例一:如何通过DA存取向量元素
18
DAVecGetArray(DA da, Vec global, (void **)f); …. f[i]j] =u[i][j] - …. …. DAVecRestoreArray(DA da, Vec local, (void **)u); DAVecRestoreArray(DA da, Vec global, (void **)f); DARestoreLocalVecor(DA da, Vec local);
7
图1 PETSc实现的抽象层次
PDE解法器
应用程序
TS (时间步进)
SNES (非线性方程解法器) SLES (线性方程解法器) KSP (Krylov子空间方法) PC (预条件子) Draw
矩阵
向量
索引集
BLAS
LAPACK
MPI
核心组件 数值方法 基本对象 运行环境
性能分析
8
应用程序:用户在PETSc环境下基于PETSc对象和算法库编 写的串行或并行应用程序。尽管 PETSc程序完全在MPI上实 现,但PETSc程序具有固定的框架结构,即有初始化、空间 释放和运行结束等环境运行语句。
PETSc用C语言开发,遵循面向对象设计的基本特征, 用户 可以基于PETSc对象灵活开发应用程序。目前,PETSc支持 Fortran 77/90、C和C++编写的串行和并行代码。
5
PETSc是系列软件和库的集合,三个基本组件SLES、SNES 和TS本身基于BLAS、LAPACK、MPI 等库实现,同时又为 TAO、ADIC/ADIFOR、Matlab、ESI 等工具展性能。 PETSc为用户提供 了丰富的Krylov子空间迭代方法和预条件子,并提供错误检 测、性能统计和图形打印等功能。 PETSc最新版本为petsc-2.2.1,2003年8月发布。PETSc网站 http://www.mcs /petsc。
DRAW:应用程序的性能分析和结果显示。
11
3.PETSc的基本对象
• 向量(Vectors) • 矩阵(Matrices) • 索引集(Index Sets)
12
3.1 向量(Vectors)
PETSc的基本数据对象。 PETSc向量对象主要用于存储线性 方程组的解和右端向量。对于规则的正交网格,PETSc自动 对向量进行划分, 并通过分布式存储向量(即 DA对象)来 管理。通过 DA对象, 用户可以简单地实现向量的分发、聚 集、局部和全局之间的相互映像、边界点的通信等基本操作 。DA 对象隐藏了进程之间的通信, 用户只需提供全局的向 量结构和数值。但对于无结构网格,用户则需通过索引集( 即IS对象)来实现向量的分发、聚集、映像、边界点的通信 等基本操作。
DACreatGlobalVector:创建一个全局的DA向量 DACreatLocalVector:创建一个局部的DA向量
DAGlobalToLocalBegin:启动一个DA向量的分发 DAGlobalToLocalBegin:( DA da, Vec global, InsertMode iora, Vec local ) DAGlobalToLocalEnd:完成一个DA向量的分发
AOPetscToApplication:从PETSc排序得到应用排序的映射 AOApplicationToPetsc:从应用排序得到PETSc排序的映射 AOPetscToApplication(AO ao, int n, int indices)
20
AODestroy:释放一个排序映射 AOCreatBasicIS:定义一个新的索引集排序映射 AOPetscToApplicationIS:从PETSc索引集排序得到应用索
2
报告内容提要
一. PETSc的基本概况 二. PETSc 的基本特色 三. PETSc 的实例分析
四. PETSc 的范例简介 五. PETSc 的其它功能 六. PETSc 的简单总结
3
一.PETSc的基本概况
• PETSc简单概述 • PETSc体系结构 • PETSc基本对象 • PETSc核心组件 • PETSc下载安装
6
2.PETSc的体系结构
不同于其它微分/代数方程解法器,PETSc为用户提供了一个 通用的高层应用程序开发平台。基于 PETSc 提供的大量对象 和解法库,用户可以灵活地开发自己的应用程序,还可随意 添加和完善某些功能,如为线性方程求解提供预条件子、为 非线性问题的牛顿迭代求解提供雅可比矩阵、为许多数值应 用软件和数学库提供接口等。图1 表示了PETSc 在实现层次 上的抽象。
VecGetArray:获得向量在局部区域内的访存指针 VecGetArray(Vec v, PetscScalar array) VecRestoreArray:关闭在局部区域内的对向量的访存 VecGetLocalSize:返回向量在局部区域内的维数 VecGetSize:返回全局向量的维数
16
13
3.1.1 向量对象的创建、赋值、聚集和释放
VecCreateSeq: 创建一个串行的PETSc向量 VecCreateMPI:创建一个并行的PETSc向量 VecCreate: 创建一个PETSc向量对象 VecSetSize:设置向量维数 VecSetFromOptions:通过运行参数设置向量类型 VecSet:将一个数值赋给向量的每个元素 VecSetValues:分别给向量的每个元素插入或累加数值
DA首先获得局部向量的控制权,然后将局部向量的访存权 交给局部数组, 进行相应的读写等操作之后, 再逐步释放 对局部数组和局部向量的访存权和控制权。
PetscScalar **f, **u; Vec local, global …. DAGetLocalVecor(DA da, Vec local); DAVecGetArray(DA da, Vec local, (void **)u);
23
DALocalToGlobal:完成一个DA向量的聚集 DALocalToGlobal ( DA da, Vec l, InsertMode model, Vec g)
DALocalToLocalBegin:启动一个DA向量的局部分发 DALocalToLocalBegin (DA da, Vec local1, InsertMode iora, Vec local2),其中InsertMode有ADD_VALUES和INSERT_ VALUES两种类型 DALocalToLocalEnd:完成一个DA向量的局部分发
PDE解法器:用户基于 PETSc 三个基本算法库(TS、SNES 和 SLES)构建的偏微方程求解器。但它却不是 PETSc的基 本组件之一。
TS:时间步进积分器,用于求解依赖时间或时间演化ODE 方程,或依赖时间的离散化 PDE 方程。对于非时间演化或 稳态方程,PETSc 提供了伪时间步进积分器。TS积分器最
9
后依赖线性解法器SLES和非线性解法器SNES实现。PETSc 为PVODE提供了接口。另外,TS用法简单方便。
SNES:非线性解法器,为大规模非线性问题提供高效的非 精确或拟牛顿迭代解法。SNES依赖于线性解法器SLES,并 采用线性搜索和信赖域方法实现。 SNES依赖于雅可比矩阵 求解,PETSc既支持用户提供有限差分程序,同时又为用户 提供了依赖ADIC等自动微分软件生成的微分程序接口。
KSP:Krylov子空间方法,广泛涉及 Richardson 方法, 共扼 梯度法(CG和BiCG), 广义最小残差法(GMRES), 最 小二乘QR分解(LSQR)等。
PC:预条件子,包括雅可比矩阵,分块雅可比矩阵,SOR/ SSOR方法,不完全Cholesky分解,不完全LU分解,可加性 Schwartz方法,多重网格预条件子等。
DAGetScatter:获得一个DA在全局与局部、局部与局部之 间的分发权(极少使用)
24
DAGetLocalVector:获得一个局部DA向量的访问权 DARestoreLocalVector:释放一个局部DA向量的访问权 DAVecGetArray:获得一个局部DA数组的访存权 DAVecRestoreArray:释放一个局部DA数组的访存权 DAGetCorners:获得数组左边界的初始位置 DAGetGhostCorners:获得数组伪边界的初始位置 DAGetGlobalIndices:获得全局格点数(含伪边界)
SLES:线性解法器,它是 PETSc 的核心部分。PETSc 几乎 提供了各种高效求解线性方程的解法器, 既有串行求解也有 并行求解, 既有直接法求解也有迭代法求解。 对于大规模
10
线性方程组,PETSc提供了大量基于Krylov子空间方法和预 条件子 的各种成熟而有效的迭代方法, 以及其它通用程序 和用户程序的接口。
引集排序的映射
21
3.1.4 规则网格的DA实现
分布式数组(DA)是PETSc的一个重要特色。 DA自动管理 数据在局部进程之间的划分、消息传递和读写。用户只需提 供数组的全局数值,并通过全局和局部之间的逻辑排序来引 用数组元素。在PETSc学习过程中,用户要特别注意向量( Vector)和数组(Array)两个概念,前者着重强调独立于数 组数值和存储之外的逻辑结构或排序上的抽象,而后者着重 强调数组元素的访问和数值改写。
PETSc并行程序设计方法
中科院计算机网络信息中心超级计算中心
/sce,Email:walls@
程强 迟学斌 冯仰德 王建 赵永华
2004年11月,北京
1
报告基本目标
• 全面介绍 PETSc 体系结构、基本特色和功能 • 促进PETSc应用程序开发方面的合作与交流 • 寻求 PETSc 软件开发方面的广泛建议和帮助
19
3.1.3 向量对象的排序
PETSc排序与应用排序之间的差异主要来源于两个原因:局 部序号和全局序号的不同;不同区域分解方法之间的差异。
AOCreatBasic:定义一个新的排序映射 AOCreatBasic( MPI_Comm comm, int n, int apordering, int petscordering, AO ao)
22
DACreat2d:创建一个2维的DA数组 DACreat2d:( MPI_Comm comm, DAPeriodicType wrap, DAStencilType st, int M, int N, int m, int n, int dof, int s, int lx, int ly, DA da)
14
VecAssemblyBegin:启动一个向量的创建 VecAssemblyEnd:完成一个向量的创建 VecDuplicate/VecDuplicateVecs :复制一个/组向量 VecDestroy/VecDestroyVecs:释放一个/组向量
15
3.1.2 向量对象的基本运算操作
VecGetOwnershipRang:返回向量在划分区域(进程)中 的下界和上界
4
1.概述
PETSc(Portable, Extensible Toolkit for Scientific Computation) 是美国能源部 ODE 2000 支持开发20多个ACTS工具箱之一, 由Argonne国家实验室Satish Balay等人开发的可移植可扩展 科学计算工具箱, 主要用于高性能求解偏微分方程组及相关 问题。PETSc所有消息传递均采用MPI标准实现。
此外,还涉及向量的算术运算,如点积(VecDot)、范数( VecNorm)、最小值(VecMin) 、绝对值(VecAbs) 、倒 数(VecReciprocal)、各种乘积(VecAXPY, VecAYPX, Vec WAXPY, VecAXPBY, VecScale)等。
17
例一:如何通过DA存取向量元素
18
DAVecGetArray(DA da, Vec global, (void **)f); …. f[i]j] =u[i][j] - …. …. DAVecRestoreArray(DA da, Vec local, (void **)u); DAVecRestoreArray(DA da, Vec global, (void **)f); DARestoreLocalVecor(DA da, Vec local);
7
图1 PETSc实现的抽象层次
PDE解法器
应用程序
TS (时间步进)
SNES (非线性方程解法器) SLES (线性方程解法器) KSP (Krylov子空间方法) PC (预条件子) Draw
矩阵
向量
索引集
BLAS
LAPACK
MPI
核心组件 数值方法 基本对象 运行环境
性能分析
8
应用程序:用户在PETSc环境下基于PETSc对象和算法库编 写的串行或并行应用程序。尽管 PETSc程序完全在MPI上实 现,但PETSc程序具有固定的框架结构,即有初始化、空间 释放和运行结束等环境运行语句。
PETSc用C语言开发,遵循面向对象设计的基本特征, 用户 可以基于PETSc对象灵活开发应用程序。目前,PETSc支持 Fortran 77/90、C和C++编写的串行和并行代码。
5
PETSc是系列软件和库的集合,三个基本组件SLES、SNES 和TS本身基于BLAS、LAPACK、MPI 等库实现,同时又为 TAO、ADIC/ADIFOR、Matlab、ESI 等工具展性能。 PETSc为用户提供 了丰富的Krylov子空间迭代方法和预条件子,并提供错误检 测、性能统计和图形打印等功能。 PETSc最新版本为petsc-2.2.1,2003年8月发布。PETSc网站 http://www.mcs /petsc。
DRAW:应用程序的性能分析和结果显示。
11
3.PETSc的基本对象
• 向量(Vectors) • 矩阵(Matrices) • 索引集(Index Sets)
12
3.1 向量(Vectors)
PETSc的基本数据对象。 PETSc向量对象主要用于存储线性 方程组的解和右端向量。对于规则的正交网格,PETSc自动 对向量进行划分, 并通过分布式存储向量(即 DA对象)来 管理。通过 DA对象, 用户可以简单地实现向量的分发、聚 集、局部和全局之间的相互映像、边界点的通信等基本操作 。DA 对象隐藏了进程之间的通信, 用户只需提供全局的向 量结构和数值。但对于无结构网格,用户则需通过索引集( 即IS对象)来实现向量的分发、聚集、映像、边界点的通信 等基本操作。
DACreatGlobalVector:创建一个全局的DA向量 DACreatLocalVector:创建一个局部的DA向量
DAGlobalToLocalBegin:启动一个DA向量的分发 DAGlobalToLocalBegin:( DA da, Vec global, InsertMode iora, Vec local ) DAGlobalToLocalEnd:完成一个DA向量的分发
AOPetscToApplication:从PETSc排序得到应用排序的映射 AOApplicationToPetsc:从应用排序得到PETSc排序的映射 AOPetscToApplication(AO ao, int n, int indices)
20
AODestroy:释放一个排序映射 AOCreatBasicIS:定义一个新的索引集排序映射 AOPetscToApplicationIS:从PETSc索引集排序得到应用索
2
报告内容提要
一. PETSc的基本概况 二. PETSc 的基本特色 三. PETSc 的实例分析
四. PETSc 的范例简介 五. PETSc 的其它功能 六. PETSc 的简单总结
3
一.PETSc的基本概况
• PETSc简单概述 • PETSc体系结构 • PETSc基本对象 • PETSc核心组件 • PETSc下载安装
6
2.PETSc的体系结构
不同于其它微分/代数方程解法器,PETSc为用户提供了一个 通用的高层应用程序开发平台。基于 PETSc 提供的大量对象 和解法库,用户可以灵活地开发自己的应用程序,还可随意 添加和完善某些功能,如为线性方程求解提供预条件子、为 非线性问题的牛顿迭代求解提供雅可比矩阵、为许多数值应 用软件和数学库提供接口等。图1 表示了PETSc 在实现层次 上的抽象。
VecGetArray:获得向量在局部区域内的访存指针 VecGetArray(Vec v, PetscScalar array) VecRestoreArray:关闭在局部区域内的对向量的访存 VecGetLocalSize:返回向量在局部区域内的维数 VecGetSize:返回全局向量的维数
16
13
3.1.1 向量对象的创建、赋值、聚集和释放
VecCreateSeq: 创建一个串行的PETSc向量 VecCreateMPI:创建一个并行的PETSc向量 VecCreate: 创建一个PETSc向量对象 VecSetSize:设置向量维数 VecSetFromOptions:通过运行参数设置向量类型 VecSet:将一个数值赋给向量的每个元素 VecSetValues:分别给向量的每个元素插入或累加数值
DA首先获得局部向量的控制权,然后将局部向量的访存权 交给局部数组, 进行相应的读写等操作之后, 再逐步释放 对局部数组和局部向量的访存权和控制权。
PetscScalar **f, **u; Vec local, global …. DAGetLocalVecor(DA da, Vec local); DAVecGetArray(DA da, Vec local, (void **)u);
23
DALocalToGlobal:完成一个DA向量的聚集 DALocalToGlobal ( DA da, Vec l, InsertMode model, Vec g)
DALocalToLocalBegin:启动一个DA向量的局部分发 DALocalToLocalBegin (DA da, Vec local1, InsertMode iora, Vec local2),其中InsertMode有ADD_VALUES和INSERT_ VALUES两种类型 DALocalToLocalEnd:完成一个DA向量的局部分发
PDE解法器:用户基于 PETSc 三个基本算法库(TS、SNES 和 SLES)构建的偏微方程求解器。但它却不是 PETSc的基 本组件之一。
TS:时间步进积分器,用于求解依赖时间或时间演化ODE 方程,或依赖时间的离散化 PDE 方程。对于非时间演化或 稳态方程,PETSc 提供了伪时间步进积分器。TS积分器最
9
后依赖线性解法器SLES和非线性解法器SNES实现。PETSc 为PVODE提供了接口。另外,TS用法简单方便。
SNES:非线性解法器,为大规模非线性问题提供高效的非 精确或拟牛顿迭代解法。SNES依赖于线性解法器SLES,并 采用线性搜索和信赖域方法实现。 SNES依赖于雅可比矩阵 求解,PETSc既支持用户提供有限差分程序,同时又为用户 提供了依赖ADIC等自动微分软件生成的微分程序接口。
KSP:Krylov子空间方法,广泛涉及 Richardson 方法, 共扼 梯度法(CG和BiCG), 广义最小残差法(GMRES), 最 小二乘QR分解(LSQR)等。
PC:预条件子,包括雅可比矩阵,分块雅可比矩阵,SOR/ SSOR方法,不完全Cholesky分解,不完全LU分解,可加性 Schwartz方法,多重网格预条件子等。
DAGetScatter:获得一个DA在全局与局部、局部与局部之 间的分发权(极少使用)
24
DAGetLocalVector:获得一个局部DA向量的访问权 DARestoreLocalVector:释放一个局部DA向量的访问权 DAVecGetArray:获得一个局部DA数组的访存权 DAVecRestoreArray:释放一个局部DA数组的访存权 DAGetCorners:获得数组左边界的初始位置 DAGetGhostCorners:获得数组伪边界的初始位置 DAGetGlobalIndices:获得全局格点数(含伪边界)
SLES:线性解法器,它是 PETSc 的核心部分。PETSc 几乎 提供了各种高效求解线性方程的解法器, 既有串行求解也有 并行求解, 既有直接法求解也有迭代法求解。 对于大规模
10
线性方程组,PETSc提供了大量基于Krylov子空间方法和预 条件子 的各种成熟而有效的迭代方法, 以及其它通用程序 和用户程序的接口。