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
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 make
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
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
Sequential version of BLAS and LAPACK should be used. We recommend
using the MKL library for best
performance on Intel machines and
on IBM machines. The MKL link line
can be useful to fill the
The MeTiS partitioning library is needed by the SPRAL library and therefore, needed when linking the SyLVER package for building examples and test drivers.
By default, CMake will confirgure the compilation for a serial version
of SyLVER that can be explicitly requested using the option
-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
FindSTARPU.cmake script located in the
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.
BLAS and LAPACK
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.
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
-DLLAPACK options. For example:
cmake <path-to-source> -DLBLAS="/path/to/blas -lblas" -DLBLAS="/path/to/lapack -llapack" # configure compilation