Skip to content

eth-cscs/DLA-Future

Repository files navigation

zenodo pipeline status codecov

Distributed Linear Algebra from the Future

DLA-Future is a distributed linear algebra library implemented using C++ std::execution P2300 which provides:

  • an asynchronous C++ interface,
  • a synchronous C interface,
  • a synchronous ScaLAPACK-like C interface (ScaLAPACK drop-in with a subset of ScaLAPACK arguments. E.g. workspace arguments are not present),
  • a synchronous ScaLAPACK-like Fortran interface (See DLA-Future-Fortran).

DLA-Future runs on x86 and ARM CPUs as well as NVIDIA and AMD GPUs.

Currently DLA-Future provides the following algorithms which are available in the following interfaces:

ScaLAPACK Name Algorithm C++ API C API Scalapack C API
P[S,D,C,Z]TRMM Triangular Matrix Multiplication ✔️
P[C,Z]HEMM, P[S,D]SYMM Hermitian Matrix Multiplication ✔️
P[S,D,C,Z]TRSM Triangular Solver ✔️
P[S,D,C,Z]POTRF Cholesky Decomposition ✔️ ✔️ ✔️
P[C,Z]HEEV*, P[S,D]SYEV* Symmetric / Hermitian eigenvalue solver ✔️ ✔️ ✔️
P[C,Z]HEGV*, P[S,D]SYGV* Generalized Symmetric / Hermitian eigenvalue solver ✔️ ✔️ ✔️

Notes:

  • The C++ interface provides a non distributed interface as well.

Getting started with DLAF

Build

See BUILD.md.

Link your program/library with DLAF

Using DLAF in a CMake project is extremely easy!

In the following, the variable DLAF_INSTALL_PREFIX is set to where DLAF is installed. In case you used spack for installing DLAF, you can easily set it with:

export DLAF_INSTALL_PREFIX=`spack location -i dla-future`

Then, you can configure your project with one of the following:

# By appending the value to the CMAKE_PREFIX_PATH
cmake -DCMAKE_PREFIX_PATH=${DLAF_INSTALL_PREFIX} ..

# ... or by setting DLAF_DIR
cmake -DDLAF_DIR="$DLAF_INSTALL_PREFIX/lib/cmake" ..

Then, it is just as simple as adding these directives in your CMakeLists.txt:

find_package(DLAF)
# ... and then for your executable/library target
target_link_libraries(<your_target> PRIVATE DLAF::DLAF)

Documentation

See DOCUMENTATION.md for the documentation of older versions, or for the instructions to build it.

Citing

If you are using DLA-Future, please cite the following paper in addition to this repository:

@InProceedings{10.1007/978-3-031-61763-8_13,
    author="Solc{\`a}, Raffaele
        and Simberg, Mikael
        and Meli, Rocco
        and Invernizzi, Alberto
        and Reverdell, Auriane
        and Biddiscombe, John",
    editor="Diehl, Patrick
        and Schuchart, Joseph
        and Valero-Lara, Pedro
        and Bosilca, George",
    title="DLA-Future: A Task-Based Linear Algebra Library Which Provides a GPU-Enabled Distributed Eigensolver",
    booktitle="Asynchronous Many-Task Systems and Applications",
    year="2024",
    publisher="Springer Nature Switzerland",
    address="Cham",
    pages="135--141",
    isbn="978-3-031-61763-8"
}

Acknowledgements

The development of DLAF library would not be possible without support of the following organizations (in alphabetic order):

CINECA: Cineca Consorzio Interuniversitario
CSCS: Swiss National Supercomputing Centre
ETH Zurich: Swiss Federal Institute of Technology Zurich
PASC: Platform for Advanced Scientific Computing
PRACE: Partnership for Advanced Computing in Europe
As part of IP6 WP8