PETSc架构介绍和解释
PETSc软件架构
PETSc核心是为学科领域内的ODE方程和PDE方程提供数值计算工具Toolkit, 同时配备有完整程序开发需要的日志、调试、优化等功能。
说明 | 备注 | |
---|---|---|
工具 | 运行选项、调试和性能工具、可视化工具等 | |
数学计算 | 矩阵、向量、线性/非线性求解器、优化算法求解器等 | |
底层依赖库 | BLAS、LAPACK、MPI、CUDA、CL等 |
PETSc数值计算库架构
说明 | 备注 | |
---|---|---|
基础数学对象 | Mat,Vec,Index | |
几何拓扑对象管理 | DMDA、DMPlex | |
稀疏矩阵迭代求解器 | KSP、PC | |
非线性方程求解器 | SNES | |
优化求解器 | TAO | |
时间域求解器 | TS |
另一张架构截图
PETSc底层核心数学对象(Mat&Vec)
- 完全面向对象设计,支持多态
- 对上层应用(e.g.,KSP)提供统一抽象通用接口(e.g., Add,Sub,Mul等)
- 支持运行时配置(options)
- 支持串行(SEQ)和并行分布式(MPI)数据布局
- 提供第三方扩展插件集成(e.g., CUSPARSE)
细节
8个进程的Vec和Mat存储示意图: 矩阵向量乘法
- Vec以分布式方式存储在多个MPI进程上
- 稀疏矩阵以AIJ(CSR)格式存储。对MPI多进程,稀疏矩阵在ROW方向上进行划分,每个进程内会将对角部分(diagonal block)和非对角部分(off-diagonal block)分开存储
- 通过IS(Index Sets)提供复杂索引操作(e.g.,gather/scatter)
PETSc并行、GPU异构计算支持(MPI&Thread&GPU)
- 以"shared nothing"原则设计
- 分布式计算主要基于MPI进程间显示通信设计。有基于MPI和NVSHMEM的通信组件PetscSF
- 对多线程(OpenMP/Threads)提供有限支持
- 以扩展插件形式支持GPU异构计算(3.17版本已经集成CUSPARSE和ViennaCL)
PETSc并行分布式通信组件:PetscSF
- 聚焦全局Array&Vec复杂数据交换场景
- 基于Star Forest Graph图拓扑设计进程间通信模式
- 基于MPI one-sided RMA和two-sided P2P通信原语
- 基于NVSHMEM,支持多GPU卡硬件环境
PETSc和第三方库接口(interfaces)
- PETSc采用插件(plugin)设计方式,可以和多种第三方软件进行集成。集成的工作主要在核心对象Mat&Vec进行格式转换对接,PETSc无需知道对方源码细节.
- 有非常多的第三方集成案例. 常见第三方集成:Hypre、Mumps、SuperLU、AMGCL、AMGX、OpenFOAM等
官方资料
- API Doc
- 所有支持的Vector形式
- 所有支持的Matrix形式