Skip to content


Repository files navigation


Documentation Status

SyLVER is a sparse direct solver for symmetric systems which may be either positive-definite or indefinite.

The implementation uses DAG-based algorithms that enable an efficient exploitation of multicore CPU architectures and GPU-accelerated systems. The parallel implementation relies on the StarPU runtime system developed and maintained by the STORM team at Inria Bordeaux Sud-Ouest.

The code has been developed in the context of the EU H2020 NLAFET project.


The compilation of the code is handled by the CMake tools. For example, the compilation can be achieved as follow:

mkdir build # create build directory
cd build 
cmake <path-to-source> -D SYLVER_RUNTIME=StarPU -D SYLVER_ENABLE_CUDA=ON # configure compilation
make # run compilation 

Third-party libraries


SPRAL is an open-source library for sparse linear algebra and associated algorithm and has several important features used in SyLVER. The latest release of SPRAL can be found on its GitHub repository.

SPRAL is automatically built during the compilation of SyLVER. See documentation if you wish to use your own version of SPRAL for building SyLVER.


The MeTiS partitioning library is needed by the SPRAL library and therefore, needed when linking the SyLVER package for building examples and test drivers.

When compiling SyLVER you can provide the path to the MeTiS library using either -D METIS_DIR CMake option or the METIS_DIR environment variable.


The hwloc library is topology discovery library which is necessary for linking the examples and test drivers if SPRAL was compiled with it. In this case, the library path can be given to CMake using either the -D HWLOC_DIR CMake option or the HWLOC_DIR environment variable.

Runtime system

The -DSYLVER_RUNTIME=StarPU enables the compilation of the parallel version of SyLVER using StarPU runtime system. In this case the StarPU version needs to be at least 1.3.0. The StarPU library is found with the FindSTARPU.cmake script located in the cmake/Modules directory. Note that, for this script to be able to find the StarPU library, you need to set the environment variable STARPU_DIR to the path of you StarPU install base directory.

By default, CMake will configure the compilation for a parallel version of SyLVER using StarPU. The sequential version can be compiled using the option -D SYLVER_RUNTIME=STF.


The BLAS and LAPACK libraries play an important role in the performance of the solver. We recommend using the MKL library for best performance on Intel machines and the ESSL library when running on IBM machines. Alternative BLAS and LAPACK libraries include OpenBLAS. Note that SyLVER should be linked against the sequential BLAS and LAPACK libraries.

These libraries are found via the CMake scripts FindBLAS and FindLAPACK and therefore it is possible to use the options -D BLA_VENDOR to indicate which libraries to use. For example:

cmake <path-to-source> -D BLA_VENDOR=Intel10_64lp_seq # configure compilation

selects and locates the sequential BLAS and LAPACK implementation for the compilation and when linking test drivers, example and tests.

If CMake is unable to locate the requested libraries via the -D BLA_VENDOR, it is still possible to give them explicitly using the -D LLBAS and -D LLAPACK options. For example:

cmake <path-to-source> -D LBLAS="-L/path/to/blas -lblas" -D LLAPACK="-L/path/to/lapack -llapack" # configure compilation