AMGX库中的求解器和预处理器介绍
AMGX是NVIDIA提供的用于大规模并行计算的代数多重网格(AMG)求解器库,主要用于GPU加速的稀疏线性方程组求解。以下是AMGX库中主要的求解器和预处理器:
主要求解器
1. Krylov子空间求解器
- CG (Conjugate Gradient): 共轭梯度法,适用于对称正定矩阵
- PCG (Preconditioned CG): 带预处理的共轭梯度法
- GMRES: 广义最小残差法,适用于非对称矩阵
- FGMRES: 灵活GMRES,允许预处理变化
- BICGSTAB: 双共轭梯度稳定法,适用于非对称矩阵
- PBICGSTAB: 带预处理的BICGSTAB
- LGMRES: 重启GMRES的变体
2. 多重网格求解器
- AMG (Algebraic Multigrid): 代数多重网格法,适用于椭圆型PDE问题
- 经典AMG和聚合AMG两种变体
- 支持多种平滑器(如Jacobi, Gauss-Seidel)和粗网格求解器
3. 块求解器
- Block-Jacobi: 块雅可比迭代法
- Block-Gauss-Seidel: 块高斯-赛德尔迭代法
4. 其他迭代求解器
- JACOBI: 雅可比迭代法
- GAUSS_SEIDEL: 高斯-赛德尔迭代法
- MULTICOLOR_GS: 多色高斯-赛德尔法,适合并行计算
主要预处理器
- AMG预处理器: 作为其他Krylov求解器的预处理器
- Jacobi预处理器: 对角预处理
- Block-Jacobi预处理器: 块对角预处理
- ILU预处理器: 不完全LU分解
- ILU0: 零填充ILU
- ILUT: 基于阈值的ILU
- Polynomial预处理器: 多项式预处理
- Multicolor ILU: 多色排序的ILU,适合并行计算
- Schwarz预处理器: 区域分解方法
配置示例
AMGX使用JSON格式配置求解器和预处理器组合,例如:
{
"solver": {
"preconditioner": {
"print_grid_stats": 1,
"solver": "AMG",
"print_vis_data": 0,
"max_levels": 25,
"cycle": "V",
"smoother": "BLOCK_JACOBI",
"presweeps": 1,
"postsweeps": 1,
"coarse_solver": "DENSE_LU_SOLVER"
},
"solver": "FGMRES",
"print_solve_stats": 1,
"max_iters": 1000,
"monitor_residual": 1,
"convergence": "RELATIVE_INI_CORE",
"tolerance": 1e-10
}
}
AMGX特别适合大规模稀疏线性系统的求解,在CFD、结构分析和其他科学计算领域有广泛应用,能够充分利用GPU的并行计算能力显著提高求解速度。
资料
├── algebraic_multigrid_solver.cu
├── bicgstab_solver.cu
├── block_jacobi_solver.cu
├── cf_jacobi_solver.cu
├── cg_solver.cu
├── cheb_solver.cu
├── chebyshev_poly.cu
├── dense_lu_solver.cu
├── dummy_solver.cu
├── fgmres_solver.cu
├── fixcolor_gauss_seidel_solver.cu
├── gauss_seidel_solver.cu
├── gmres_solver.cu
├── idrmsync_solver.cu
├── idr_solver.cu
├── jacobi_l1_solver.cu
├── kaczmarz_solver.cu
├── kpz_polynomial_solver.cu
├── multicolor_dilu_solver.cu
├── multicolor_gauss_seidel_solver.cu
├── multicolor_ilu_solver.cu
├── pbicgstab_solver.cu
├── pcgf_solver.cu
├── pcg_solver.cu
├── polynomial_solver.cu
├── solver.cu
└── user_solver.cu