Skip to content

Latest commit

 

History

History
156 lines (119 loc) · 5.59 KB

README.md

File metadata and controls

156 lines (119 loc) · 5.59 KB

SpLLT - sparse Cholesky solver

Documentation SpLLT-OpenMP
Documentation Build Status

SpLLT is a sparse direct solver for computing the solution of symmetric positive definite linear systems. The factorization phase, which is the most computationally intensive part, is based on a task-based Cholesky algorithm and the parallel code is implemented using a runtime system. The code supports three different runtime systems: StarPU developed at INRIA Bordeaux Sud-Ouest, PaRSEC from ICL, University of Tennessee and the OpenMP standard Version 4.0 or above.

The compilation is handled by CMake tools and the solver can be built as following instructions:

mkdir build # create build directory
cd build
cmake <path-to-source>

This will build the sequential version of the code by default. In order to build the parallel code you need to select a runtime system using the option -DRUNTIME when running the cmake cmake <path-to-source> command.

Prerequisites

In order to install properly SpLLT, some libraries are required. The analysis of the matrix is performed through SPRAL. This software requires itself a graph partitioner as Metis library.

Metis 5.1

During the analyse, a graph partitioner as Metis needs to be linked to SPRAL. The latest current version supported by SPRAL is Metis-5.1 available here. Download the source code, open Makefile.in, and set the variable CC to gcc. Then,

make config prefix=<path_to_install> shared=1 cc=<compiler_requested>
make
make install

The same installation can be done with Intel compiler (changing CC variable in Makefile.in and adapting the name of the created folder).

SPRAL

To install SPRAL, download the sources here. Then

./autogen.sh
CC=icc CXX=icpc FC=ifort ./configure --prefix=<path_to_install> --disable-openmp --disable-gpu --with-blas="-L$MKL_LIB -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -liomp5 -lm" --with-lapack="-L$MKL_LIB -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -liomp5 -lm" --with-metis="-L$METIS_LIB -lmetis"
CC=gcc CXX=g++ FC=gfortran ./configure --prefix=<path_to_install> --disable-openmp --disable-gpu --with-blas="-L$MKL_LIB -lmkl_gf_lp64 -lmkl_core -lmkl_gnu_thread -lgomp -lm" --with-lapack="-L$MKL_LIB -lmkl_gf_lp64 -lmkl_core -lmkl_gnu_thread -lgomp -lm" --with-metis="-L$METIS_LIB -lmetis"
make
make install
cp *.mod <path_to_install>/include

RUNTIME

SpLLT is designed to be used with different runtimes.

OMP

A parallel version of the code using the OpenMP standard with tasking capabilities can be obtained as following:

cmake -DRUNTIME=OMP <path-to-source>

StarPU

A parallel version of the code using the StarPU runtime system can be obtained as following:

cmake -DRUNTIME=StarPU <path-to-source>

PaRSEC

A parallel version of the code using the PaRSEC runtime system can be obtained as following:

cmake -DRUNTIME=Parsec <path-to-source>

Examples of installation of SpLLT

To install SpLLT, for each prerequisite you can either use the environment or use defined variables, and provide either the path to the directory or the paths to the library and include folders. For example, considering GNU compilers and MKL, we can explicitly define to cmake the path of the library and include folders for each prerequisite, assuming that these paths are set in the environment.

export SPRAL_LIB=<path_to_spral_library_folder>
export SPRAL_INC=<path_to_spral_include_folder>
export METIS_LIB=<path_to_metis_library_folder>
export METIS_INC=<path_to_metis_include_folder>
export HWLOC_LIB=<path_to_hwloc_library_folder>
export HWLOC_INC=<path_to_hwloc_include_folder>

mkdir build
mkdir build/build_omp
cd build/build_omp

CC=gcc FC=gfortran CXX=g++ cmake -DRUNTIME=OMP -DSPRAL_LIB=${SPRAL_LIB} -DSPRAL_INC=${SPRAL_INC} -DMETIS_LIB=${METIS_LIB} -DMETIS_INC=${METIS_INC} -DHWLOC_LIB=${HWLOC_LIB} -DHWLOC_INC=${HWLOC_INC} -DLBLAS="${MKL_LIB}/libmkl_gf_lp64.a;${MKL_LIB}/libmkl_sequential.a;${MKL_LIB}/libmkl_core.a" -DLLAPACK="${MKL_LIB}/libmkl_gf_lp64.a;${MKL_LIB}/libmkl_sequential.a;${MKL_LIB}/libmkl_core.a" ../..
make

or

export SPLLT_MKL_BLAS_LAPACK_LIBS="${MKL_LIB}/libmkl_gf_lp64.a;${MKL_LIB}/libmkl_sequential.a;${MKL_LIB}/libmkl_core.a"

mkdir build
mkdir build/build_omp
cd build/build_omp

CC=gcc FC=gfortran CXX=g++ cmake -DRUNTIME=OMP -DLBLAS=${SPLLT_MKL_BLAS_LAPACK_LIBS} -DLLAPACK=${SPLLT_MKL_BLAS_LAPACK_LIBS} ../..
make

You can also consider only the directory of each prerequisite, as follow

export SPRAL_DIR=<path_to_spral_folder>
export METIS_DIR=<path_to_metis_folder>
export HWLOC_DIR=<path_to_hwloc_folder>
export SPLLT_MKL_BLAS_LAPACK_LIBS="${MKL_LIB}/libmkl_gf_lp64.a;${MKL_LIB}/libmkl_sequential.a;${MKL_LIB}/libmkl_core.a"

mkdir build
mkdir build/build_omp
cd build/build_omp

CC=gcc FC=gfortran CXX=g++ cmake -DRUNTIME=OMP -DLBLAS=${SPLLT_MKL_BLAS_LAPACK_LIBS} -DLLAPACK=${SPLLT_MKL_BLAS_LAPACK_LIBS} ../..
make