Features
Various backends:
- Host OpenMP (MKL if available)
- CUDA – NVIDIA GPU
- OpenCL – CPU, NVIDIA GPU, AMD GPU, Xeon Phi (MIC)
- OpenMP(MIC) – Xeon Phi
Operating systems:
- Linux/Unix-like OS, compilation with Make/Cmake files
- Mac OS, compilation with Make/Cmake files
- Windows, compilation with Visual Studio
No special hardware or library requirements: You do not need GPU or muti/many-core CPU to run this library – you can run it completely sequential.
Support of many matrix formats: CSR, MCSR, COO, ELL, DIA, HYB (CPU and GPU)
Various solvers:
- Simple iterations: Jacobi, Gauss-Seidel, Symmetric-Gauss Seidel, SOR and SSOR (via Fixed-point iteration scheme)
- Chebyshev Iteration
- Mixed-precision defect-correction scheme
- Krylov subspace methods — CR, CG, BiCGStab, GMRES, IDR, Flexible CG/GMRES
- Deflated PCG
- Multigrid – Geometric and Algebraic
- Iterative eigenvalue solvers
Various preconditioners:
- Splitting: Jacobi; (Multi-colored) Gauss-Seidel, Symmetric Gauss-Seidel, SOR, SSOR
- Factorization: ILU(p), (based on levels), ILU(p,q) (power(q)-pattern method), Multi-elimination ILU (nested/recursive) and ILUT
- Approximate Inverse (Chebyshev matrix-valued polynomial, SPAI, FSAI and TNS)
- (Restricted) Additive Schwarz
- Variable preconditioner
Generic and flexible solver/preconditioner design:
- With the help of the object-oriented methodology of abstraction, we have implemented our library to provide full flexibility of usage of solvers and preconditioners. You can easily define a CG solver with a Multi-elimination preconditioner, which is preconditioned with another Chebyshev iteration method which is preconditioned with multi-colored SSOR.
- Another feature is that all solvers and preconditioners in the library are based on a single source code (we do not have different solvers for the different platforms)
Portable results across all hardware: Same results on CPU and GPU
Seamless integration and easy usage: No knowledge in OpenMP or GPU is required
Plug-ins: FORTRAN, Deal II, OpenFOAM, Elmer, Hermes, MATLAB/Octave
Extendable: Due to its design the library can be extended to support different types of accelerators
The library is based on inheritance techniques and not on templates:
- All routines are based on run time identification, this provides you the freedom to select at run time which sections should be off-loaded to your accelerator.
- This means faster/partial compilation and simple/readable error messages
Dual license: This project is released under open source/GPLv3 and under commercial license.
Easy start: We provide several examples and user manual where you can easily understand the design of the library.
See also: