PaStiX

Jul 12, 2024 · 5 min read
projects

PaStiX: A sparse direct solver

pipeline status
coverage report
coverity report

PaStiX (Parallel Sparse matriX package) is a scientific library that provides a high-performance parallel solver for very large sparse linear systems based on direct methods. Numerical algorithms are implemented in single or double precision (real or complex) using LLt, LDLt and LU with static pivoting (for non-symmetric matrices having a symmetric pattern). This solver also provides low-rank compression methods (BLR and HODLR) to reduce the memory footprint and/or the time-to-solution, as well as mixed-precision arithmetic.

Get PaStiX

The latest official release is v6.4.0 (July 2024). All releases, source tarballs, and changelogs are available on GitLab Releases.

To use the latest development version of PaStiX, please clone the master branch. Note that PaStiX contains git submodules (spm and morse_cmake):

# Clone with submodules
git clone --recursive https://gitlab.inria.fr/solverstack/pastix.git
cd pastix

Available Features

  • Features available in shared memory with POSIX threads on multicore architectures:
Seq Static Dyn StarPU PaRSEC
POTRF (Cholesky) FR/LR FR/LR FR/LR FR/LR/GPU FR/LR/GPU
PXTRF (LL^t for complex) FR/LR FR/LR FR/LR FR/LR/GPU FR/LR/GPU
HETRF (LDL^h) FR/LR FR/LR FR/LR FR/LR/GPU FR/LR/GPU
SYTRF (LDL^t) FR/LR FR/LR FR/LR FR/LR/GPU FR/LR/GPU
GETRF (LU) FR/LR FR/LR FR/LR FR/LR/GPU FR/LR/GPU
TRSM FR/LR FR/LR FR/LR FR/LR -
DIAG FR/LR FR/LR FR/LR FR/LR -
  • Features available in hybrid shared/distributed memory with MPI between processes and POSIX threads within a process:
Seq Static Dyn StarPU PaRSEC
POTRF (Cholesky) FR FR FR FR/GPU FR/GPU
PXTRF (LL^t for complex) FR FR FR FR/GPU FR/GPU
HETRF (LDL^h) FR FR FR FR/GPU FR/GPU
SYTRF (LDL^t) FR FR FR FR/GPU FR/GPU
GETRF (LU) FR FR FR FR/GPU FR/GPU
TRSM FR FR FR FR -
DIAG FR FR FR FR -
  • FR means Full-Rank computations without compression techniques.
  • LR means Low-Rank compression technique to reduce the memory footprint and/or the time-to-solution.
  • WARNING: GPU kernels are not available on compressed supernodes.
  • WARNING: Low-rank compression and Schur complement are not yet available with MPI.

Documentation

The latest Doxygen documentation is available here.

The main steps and parameters of the solver are described. Some examples are also provided.

Installation

Build and install with CMake

PaStiX can be built using CMake. The build requires several library dependencies to be installed on the system:

  • BLAS (MKL, OpenBLAS, …) and CBLAS (sequential version required)
  • LAPACK and LAPACKE (sequential version required, with TMG enabled for testing)
  • HWLOC (highly recommended)
  • SCOTCH (optional)
  • METIS (optional)
  • STARPU runtime support (optional)
  • PARSEC runtime support (optional)
  • CUDA/CuBLAS to enable GPU functionality with runtime support (optional)
  • EZTRACE to enable tracing support (optional)
  • Python and Fortran compiler for wrappers and examples (optional)

For instance, on Debian-like systems, dependencies can be installed with the following command:

  sudo apt-get install cmake gcc gfortran libhwloc-dev libscotch-dev libopenblas-dev liblapacke-dev python-numpy

The main options to configure the PaStiX build are:

  • Standard CMake options:
    • CMAKE_BUILD_TYPE: Debug, RelWithDebInfo, Release, MinSizeRel; we recommend using Release or RelWithDebInfo for best performance.
    • CMAKE_INSTALL_PREFIX: Specify the prefix directory to install the library.
    • BUILD_SHARED_LIBS=[OFF]: Enable building shared libraries (required for the Python wrapper).
  • Integer type:
    • PASTIX_INT64[=ON]: Enable/disable int64_t for integer arrays.
  • Ordering libraries:
    • Ordering libraries must match the integer type chosen for integer arrays in PaStiX.
    • PASTIX_ORDERING_SCOTCH[=ON]: Enable/disable Scotch library support for ordering.
    • PASTIX_ORDERING_METIS[=OFF]: Enable/disable Metis library support for ordering (Metis 5.1 required).
  • External schedulers:
    • PASTIX_WITH_PARSEC[=OFF]: Enable/disable PaRSEC runtime support. Requires installing PaRSEC tag pastix-<releasenumber> (mymaster for master branch) from the repository https://bitbucket.org/mfaverge/parsec that includes patches on top of the original PaRSEC runtime system. PaRSEC needs to be compiled with option -DPARSEC_WITH_DEVEL_HEADERS=ON.
    • PASTIX_WITH_STARPU[=OFF]: Enable/disable StarPU runtime support (requires StarPU 1.3).
  • Distributed memory:
    • PASTIX_WITH_MPI=[OFF]: Enable/disable distributed memory support (see above for details). If used with the PaRSEC library, MPI should be enabled or disabled consistently in both libraries.
  • External SpM library:
    • PASTIX_WITH_EXTERNAL_SPM=[OFF]: Enable/disable the use of an external SpM library in favor of the internal one.
  • Documentation:
    • BUILD_DOCUMENTATION[=OFF]: Enable Doxygen documentation generation.

Get involved

Reporting an issue

We strongly recommend all users to use the issue tracker to report any problems with the software, or to submit feature requests. We will do our best to answer them in a timely manner.

Contributions

https://gitlab.inria.fr/solverstack/pastix/blob/master/CONTRIBUTING.md

Authors

The following people contribute or contributed to the development of PaStiX:

  • Mathieu Faverge, PI
  • Pierre Ramet, PI
  • David Goudin
  • Mathias Hastaran
  • Pascal Henon
  • Xavier Lacoste
  • François Pellegrini
  • Grégoire Pichon, Low-rank solver
  • Florent Pruvost, CMake and Spack
  • Theophile Terraz
  • Tony Delarue, MPI implementation
  • Brieuc Nicolas, Mixed precision
  • Alycia Lisito
  • Clément Richefort, Algebraic multigrid and mixed precision

If we missed your name, please let us know so we can update the list.

Citing PaStiX

Feel free to use the following publications to reference PaStiX:

  • Original paper that initiated PaStiX:
    • Pascal Hénon, Pierre Ramet, Jean Roman. PaStiX: A High-Performance Parallel Direct Solver for Sparse Symmetric Definite Systems. Parallel Computing, Elsevier, 2002, 28 (2), pp.301–321. INRIA HAL
  • Parallel incomplete factorization implemented in PaStiX:
    • Pascal Hénon, Pierre Ramet, Jean Roman. On finding approximate supernodes for an efficient ILU(k) factorization. Parallel Computing, Elsevier, 2008, 34, pp.345–362. INRIA HAL
  • Reordering strategy for blocking optimization in PaStiX:
    • Grégoire Pichon, Mathieu Faverge, Pierre Ramet, Jean Roman. Reordering Strategy for Blocking Optimization in Sparse Linear Solvers. SIAM Journal on Matrix Analysis and Applications, Society for Industrial and Applied Mathematics, 2017, SIAM Journal on Matrix Analysis and Applications, 38 (1), pp.226 - 248. INRIA HAL
  • On the use of low rank approximations in PaStiX:
    • Grégoire Pichon, Eric Darve, Mathieu Faverge, Pierre Ramet, Jean Roman. Sparse supernodal solver using block low-rank compression: Design, performance and analysis. International Journal of Computational Science and Engineering, Inderscience, 2018, 27, pp.255 - 270. 10.1016/J.JOCS.2018.06.007 Inria HAL

License

https://gitlab.inria.fr/solverstack/pastix/blob/master/LICENSE

Pierre Ramet
Authors
Full Professor of Computer Science
Pierre Ramet is a Full Professor of Computer Science at Bordeaux University and a researcher at Inria. His research interests span high-performance computing, focusing on sparse linear algebra and parallel algorithms. He leads the team in charge of developing PaStiX, a high-performance sparse direct solver.