Skip to content

RMeli/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

About

Distributed Linear Algebra with Future

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 86.6%
  • Python 5.2%
  • C 3.4%
  • CMake 2.3%
  • Cuda 1.5%
  • Shell 0.7%
  • Dockerfile 0.3%