Summary

ginkgo is a modern C++ library for high performance numerical linear algebra computations. It separates the algorithms from the architecture specific kernels, thereby allowing high performant implementations while not sacrificing software sustainability and maintainability. Currently the following architectures are supported:

  1. OpenMP for multi-core CPUs.
  2. CUDA for NVIDIA GPUs.
  3. HIP for AMD and NVIDIA GPUs.
  4. DPC++ for Intel GPUs.
  5. A reference implementation for correctness checks and testing.

See the Installation instructions for more details on how to install it.

Examples are available to experiment with.

Main features

  1. SpMV, Sparse Matrix Vector product [Reference]:

    1. CSR: Compressed sparse row with multiple strategies
    2. COO: Coordinate format with a state of the art, load balancing strategy.
    3. ELL: ELL format.
    4. Sell-P: Sliced ELL-pack format.
    5. Dense: Dense matrices, also used as vectors.
  2. Solvers:

    1. CG: Conjugate gradient: A solver for Symmetric positive definite (SPD) systems. [Reference]
    2. Bi-CG: A solver for general systems.
    3. CGS: An extension of the CG method for non-symmetric systems, faster than Bi-CG and without the need for transpose of the system matrix. [Reference]
    4. Bi-CGSTAB: A stabilized and cheaper version of the Bi-CG solver. [Reference]
    5. FCG: A flexible version of the CG solver allowing flexible preconditioning.
    6. IDR(s): Induced Dimension Reduction. It is one of the most efficient solvers for non-symmetric linear systems and is a short-recurrence solver. [Reference]
    7. GMRES: The well known generalized minimal residual method for solving generic linear systems. [Reference]
    8. IR: The iterative refinement method. A base form of the relaxation method.
  3. Preconditioners:

    1. Block-Jacobi preconditioner: A block Jacobi preconditioner with an additional adaptive version that allows storage of the different blocks in different precisions. [Reference]
    2. Factorization based preconditioners: ILU based preconditioners with different factorization methods, ParILU and ParILUT.
    3. Approximate inverse based preconditioners: Incomplete sparse approximate inverse preconditioners, ISAI. [Reference]
  4. Loggers: Detailed logger facilities to monitor the application. See documentation