About this project

LibDDLA is a C++17 template library designed for distributed dense linear algebra. It implements ScaLAPACK-style APIs using 2D block-cyclic data distribution across an MPI process grid. The library supports multiple backends including CPU (via OpenBLAS or vendor BLAS), CUDA, and HIP, with the ability to build a dual CPU+GPU library for runtime selection. Key capabilities include: - Distributed BLAS operations: `pgemm` (SUMMA algorithm), `pgeadd`, `pdam`, and `ptran`. - LU Factorization and Solvers: Includes `pgetrf` (partial pivoting), `pgetrf_bpiv` (block LU), `pgetrs`, and the `pgesv` driver. - Cholesky Factorization: Supports `ppotrf`, `ppotrs`, and `pposv` for float, double, and complex scalar types. - Communication Modes: Supports direct device collectives via NCCL/RCCL, GPU-CPU tunneling (D2H -> MPI -> H2D), or GPU-aware MPI. - Memory Management: Provides `ddla_malloc` and `ddla_free` helpers that dispatch to the selected backend. The library is designed for high-performance computing environments, requiring CMake 3.13+, an MPI implementation (Open MPI or MPICH), and the respective GPU toolkits for CUDA or HIP builds.