Preconditioners
KrylovPreconditioners.kp_ic0
— FunctionP = kp_ic0(A)
Construct an incomplete Cholesky preconditioner with zero fill-in – IC(0), to accelerate Krylov solvers on GPU architectures.
The preconditioner is compatible with sparse matrices in CSR or CSC format stored on NVIDIA and AMD GPUs.
Input argument
A
: The sparse Hermitian and positive definite matrix on the GPU to factorize incompletely.
Output argument
P
: preconditioner of typeAbstractKrylovPreconditioner
.
KrylovPreconditioners.kp_ilu0
— FunctionP = kp_ic0(A)
Construct an incomplete LU preconditioner with zero fill-in – ILU(0), to accelerate Krylov solvers on GPU architectures.
The preconditioner is compatible with sparse matrices in CSR or CSC format stored on NVIDIA and AMD GPUs.
Input argument
A
: The square sparse matrix on the GPU to factorize incompletely.
Output argument
P
: preconditioner of typeAbstractKrylovPreconditioner
.
KrylovPreconditioners.kp_block_jacobi
— FunctionP = kp_block_jacobi(A)
Construct a block-Jacobi preconditioner to accelerate Krylov solvers on GPU architectures.
The preconditioner is compatible with sparse matrices in CSR or CSC format stored on NVIDIA, AMD, and Intel GPUs. It also works on CPU with the CSC format.
Input argument
A
: The square sparse matrix on the CPU or GPU from which diagonal blocks are extracted.
Output argument
P
: preconditioner of typeAbstractKrylovPreconditioner
.
Nvidia GPUs
using CUDA, CUDA.CUSPARSE
using SparseArrays
using KrylovPreconditioners
if CUDA.functional()
# CPU Arrays
A_cpu = sprand(100, 100, 0.3) + I
# GPU Arrays
A_csc_gpu = CuSparseMatrixCSC(A_cpu)
A_csr_gpu = CuSparseMatrixCSR(A_cpu)
# Krylov operators
P_csc = kp_ilu0(A_csc_gpu)
P_csr = kp_ilu0(A_csr_gpu)
end
AMD GPUs
using AMDGPU, AMDGPU.rocSPARSE
using SparseArrays
using KrylovPreconditioners
if AMDGPU.functional()
# CPU Arrays
A_cpu = sprand(200, 200, 0.05)
A_cpu = A_cpu' * A_cpu + I
# GPU Arrays
A_csc_gpu = ROCSparseMatrixCSC(A_cpu)
A_csr_gpu = ROCSparseMatrixCSR(A_cpu)
# Krylov operators
P_csc = kp_ic0(A_csc_gpu)
P_csr = kp_ic0(A_csr_gpu)
end