小动物petct

PETSc架构介绍和解释 PETSc软件架构 PETSc核心是为学科领域内的ODE方程和PDE方程提供数值计算工具Toolkit, 同时配备有完整程序开发需要的日志、调试、优化等功能。 说明 备注 工具 运行选项、调试和性能工具、可视化工具等 数学计算 矩阵、向量、线性/非线性求解器、优化算法求解器等 底层依赖库 BLAS、LAPACK、MPI、CUDA、CL等 PETSc数值计算库架构 说明

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形式
知秋君
上一篇 2024-08-09 21:48
下一篇 2024-08-09 21:12

相关推荐