Skip to content
Sparse symmetric indefinite solver implemented with a runtime system
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


SyLVER is a sparse direct solver for symmetric systems which may be either positive-definite or indefinite. It implements DAG-based algorithms that enable an efficient exploitation of multicore architectures and heterogeneous GPU-accelerated systems. The code has been developed in the context of the EU H2020 NLAFET project. The parallel implementation relies on the StarPU runtime system developed and maintained by the STORM team at Inria Bordeaux Sud-Ouest.


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

mkdir build # create build directory
cd build 
cmake <path-to-source> -DRUNTIME=StarPU # 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. The compilation of SPRAL is handled by autotools and for example can be done as follow when using the GCC compilers:

cd spral
mkdir build
cd build
../configure CXX=g++ FC=gfortran CC=gcc CFLAGS="-g -O2 -march=native" CXXFLAGS="-g -O2 -march=native" FCFLAGS="-g -O2 -march=native" --with-metis="-L/path/to/metis -lmetis" --with-blas="-L/path/to/blas -lblas" --with-lapack="-L/path/to/lapack -llapack" --disable-openmp --disable-gpu

Note that the compilation flags used for SPRAL must match the flags used in the compilation of SyLVER. Here we use the flags -g -O2 -march=native that correspond to the RelWithDebInfo build type in SyLVER.

Here we use the --disable-openmp option because SyLVER works with the serial version of SPRAL. Additionally, in this example we disabled the compilation of the SPRAL GPU kernels using the --disable-gpu option.

Sequential version of BLAS and LAPACK should be used. We recommend using the MKL library for best performance on Intel machines and ESSL on IBM machines. The MKL link line advisor can be useful to fill the --with-blas and --with-lapack options.


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

Runtime system

By default, CMake will confirgure the compilation for a serial version of SyLVER that can be explicitly requested using the option -DRUNTIME=STF.

The -DRUNTIME=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.


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 -DBLA_VENDOR to indicate which libraries to use. For example:

cmake <path-to-source> -DBLA_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 -DBLA_VENDOR, it is still possible to give them explicitly using the -DLLBAS and -DLLAPACK options. For example:

cmake <path-to-source> -DLBLAS="/path/to/blas -lblas" -DLBLAS="/path/to/lapack -llapack" # configure compilation
You can’t perform that action at this time.