PETSc介绍

PETSc架构介绍和解释


PETSc软件架构

PETSc核心是为学科领域内的ODE方程和PDE方程提供数值计算工具Toolkit, 同时配备有完整程序开发需要的日志、调试、优化等功能。
PETSc介绍_第1张图片

说明 备注
工具 运行选项、调试和性能工具、可视化工具等
数学计算 矩阵、向量、线性/非线性求解器、优化算法求解器等
底层依赖库 BLAS、LAPACK、MPI、CUDA、CL等

PETSc数值计算库架构

PETSc介绍_第2张图片

说明 备注
基础数学对象 Mat,Vec,Index
几何拓扑对象管理 DMDA、DMPlex
稀疏矩阵迭代求解器 KSP、PC
非线性方程求解器 SNES
优化求解器 TAO
时间域求解器 TS

另一张架构截图
PETSc介绍_第3张图片


PETSc底层核心数学对象(Mat&Vec)

  • 完全面向对象设计,支持多态
  • 对上层应用(e.g.,KSP)提供统一抽象通用接口(e.g., Add,Sub,Mul等)
  • 支持运行时配置(options)
  • 支持串行(SEQ)和并行分布式(MPI)数据布局
  • 提供第三方扩展插件集成(e.g., CUSPARSE)

细节

8个进程的Vec和Mat存储示意图: 矩阵向量乘法
PETSc介绍_第4张图片

  • 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形式

你可能感兴趣的:(PETSc,矩阵,算法,线性代数,HPC,PETSc)