monolish switches between MKL
, NVIDIA
and OSS
at build time (see here).
This chapter explains what libraries are called by matrix and vector operations.
Implementation of Linear Solvers
LAPACK is a complete direct solver for dense matrices. monolish calls LAPACK for direct solver for dense matrices.
The direct solver for sparse matrices is implemented in paradiso/mumps/cuSOLVER. monolish calls these libraries. Currently, only MKL and cuSOLVER is implemented.
Iterative solver for sparse matrix is implemented in MKL and CUDA libraries. However, the sparse matrix storage formats implemented by these libraries are different. monolish does not use these libraries. monolish has and provides an iterative solver implementation for sparse matrices.
In the future, we plan to implement a switch to call these libraries.
Implementation status (solving / preconditioning)
- *) SOR is not parallelization.
What libraries are called by solvers
Direct Solvers for for Dense matrix
func | MKL | NVIDIA | OSS |
LU | MKL | cuSOLVER | OpenBLAS+LAPACK |
Cholesky | MKL | not impl.* | OpenBLAS+LAPACK |
QR | todo) not impl.->MKL | todo) not impl.->cuSOLVER | todo) not impl. -> OpenBLAS+LAPACK |
- *) Cholesky is not impl. in cuSOLVER 11.1
Direct Solvers for sparse matrix
func | MKL | NVIDIA | OSS |
LU | todo) not impl.->MKL | not impl.* | todo) not impl. -> MUMPS |
ILU | todo) not impl.->monolish | cuSPARSE | todo) not impl. -> ???? |
IC | todo) not impl.->monolish | cuSPARSE | todo) not impl. -> ???? |
Cholesky | todo) not impl.->MKL | cuSOLVER | todo) not impl. -> ???? |
QR | todo) not impl.->MKL | cuSOLVER | todo) not impl. -> ???? |
- *) sparse LU is not impl. in cuSOLVER 11.1
Iterative solvers (for Dense, Sparse)
func | MKL | NVIDIA | OSS |
CG | monolish | monolish | monolish |
BiCGSTAB | monolish | monolish | monolish |
Jacobi | monolish | monolish | monolish |
SOR | monolish | monolish | monolish |
Preconditioners (for Dense)
func | MKL | NVIDIA | OSS |
Jacobi | monolish | monolish | monolish |
SOR | monolish | monolish | monolish |
Preconditioners (for Sparse)
func | MKL | NVIDIA | OSS |
Jacobi | monolish | monolish | monolish |
SOR | monolish | monolish | monolish |
ILU | not impl. | cuSPARSE | not impl. |
IC | not impl. | cuSPARSE | not impl. |
Standard Eigen Solvers
For dense matrix
func | MKL | NVIDIA | OSS |
Devide and Conquer | MKL | cuSOLVER | OpenBLAS+LAPACK |
For sparse matrix
func | MKL | NVIDIA | OSS |
LOBPCG | monolish | monolish | monolish |
Generalized Eigen Solvers
For dense matrix
func | MKL | NVIDIA | OSS |
Devide and Conquer | MKL | cuSOLVER | OpenBLAS+LAPACK |
For sparse matrix
func | MKL | NVIDIA | OSS |
LOBPCG | monolish | monolish | monolish |