Various backends:

  • Host OpenMP (MKL if available)
  • 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: