Sobre o projeto

LibDDLA é uma biblioteca de templates C++17 projetada para álgebra linear densa distribuída. Ela implementa APIs no estilo ScaLAPACK usando distribuição de dados cíclica de blocos 2D em uma grade de processos MPI. A biblioteca suporta múltiplos backends, incluindo CPU (via OpenBLAS ou BLAS de fornecedor), CUDA e HIP, com a capacidade de construir uma biblioteca dual CPU+GPU para seleção em tempo de execução. As principais capacidades incluem: - Operações BLAS distribuídas: `pgemm` (algoritmo SUMMA), `pgeadd`, `pdam` e `ptran`. - Fatoração LU e Solvers: Inclui `pgetrf` (pivoteamento parcial), `pgetrf_bpiv` (LU de bloco), `pgetrs` e o driver `pgesv`. - Fatoração de Cholesky: Suporta `ppotrf`, `ppotrs` e `pposv` para tipos escalares float, double e complexos. - Modos de Comunicação: Suporta coletivos diretos de dispositivo via NCCL/RCCL, tunelamento GPU-CPU (D2H -> MPI -> H2D) ou MPI com suporte a GPU (GPU-aware MPI). - Gerenciamento de Memória: Fornece auxiliares `ddla_malloc` e `ddla_free` que são despachados para o backend selecionado. A biblioteca é projetada para ambientes de computação de alto desempenho, exigindo CMake 3.13+, uma implementação MPI (Open MPI ou MPICH) e os respectivos toolkits de GPU para builds CUDA ou HIP.