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 |