|
ezp
lightweight C++ wrapper for selected distributed solvers for linear systems
|
ezp is a lightweight C++ wrapper for selected distributed solvers for linear systems.
Solving a linear system shall be as easy as calling a method solver.solve(A, B).
The following solvers are implemented.
| availability | type of matrix | operation | solver | package |
|---|---|---|---|---|
| ✅ | general (partial pivoting) | simple | PxGESV | ScaLAPACK |
| ✅ | general (partial pivoting) | expert | PxGESVX | ScaLAPACK |
| ✅ | symmetric/Hermitian positive definite | simple | PxPOSV | ScaLAPACK |
| ✅ | symmetric/Hermitian positive definite | expert | PxPOSVX | ScaLAPACK |
| ✅ | general band (partial pivoting) | simple | PxGBSV | ScaLAPACK |
| ✅ | general band (no pivoting) | simple | PxDBSV | ScaLAPACK |
| ✅ | symmetric/Hermitian positive definite band | simple | PxPBSV | ScaLAPACK |
| ✅ | sparse (one- or zero-indexing CSR format) | direct | PARDISO | MKL |
| ✅ | sparse (one-indexing COO format) | direct | MUMPS | MUMPS |
| ✅ | sparse (zero-indexing CSR format) | iterative | Lis | Lis |
[!IMPORTANT]
The ezp library requires C++ 20 compatible compiler. The following drivers are needed.
LAPACK and BLAS, such as OpenBLAS, MKL, etc.ScaLAPACKMPI, such as OpenMPI, MPICH, etc.It is assumed that the root node (rank 0) prepares the left hand side $$A$$ and right hand side $$B$$. The solvers distribute the matrices to available processes and solve the system, return the solution back to the master node.
The solvers are designed in such a way that all BLACS and ScaLAPACK details are hidden. One shall prepare the matrices (on the root node) and call the solver. The following is a typical example. It highly resembles the sequential version of how one would typically solve a linear system.
The following is a working example.