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
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.
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