Repository navigation
v0.0.4
LibDDLA v0.0.4
C++17 distributed dense linear algebra library for GPUs (CUDA/HIP), ScaLAPACK-style 2D block-cyclic APIs over MPI. This release covers 57 commits since v0.0.3 (2026-05-21 → 2026-07-27).
Highlights
- Unified CUDA/HIP batched GEMM backend (
gemmVbatched/gemmVbatched2s) — a new vendor-neutral vbatched GEMM implementation shared across CUDA and HIP, supporting all four scalar types (float,double,std::complex<float>,std::complex<double>) with the publicstd::complexABI preserved andthrust::complexused only internally (explicit FMA, no MAGMA dependency at runtime). (7aa2c1c) - License changed from GPL to LGPL v3, with MAGMA's BSD-3-Clause license included under
LICENSES/for the vbatched-derived kernel configs. (717e8db, 7aa2c1c) - README rewritten with accurate prerequisites, CMake option table, and build instructions for both CUDA and HIP backends. (e3eaaff, 3cbb91d, e8156f0, 9c404ac)
New Features
- Non-pivoting LU factorization/solve family:
pgetrf_nopiv,pgetrs_nopiv,pgesv_nopiv, and a MAGMA-derivedgetrf_nopiv. (32c54aa, 568c88b) - Banded-pivot LU factorization:
pgetrf_bpiv. (46cdab2) ppotrf_bottom_right/potrf_bottom_right— Cholesky factorization variants operating on the bottom-right submatrix. (f95af64)pdam— distributed matrix scale/absolute-value-max style operation on a submatrix. (a629247)axpyinterface. (7d8bdb4)pgemmtranspose support (transa/transb≠'N') plus general submatrix and non-square (n×m) MPI process grid support;ppotrfgained an upper-triangle (uplo == 'U') implementation. (1603864, dff3d79)- Template-based random matrix generator, replacing the old non-generic implementation. (fa36e4f)
deviceGetDeviceCountinterface added to the device connector layer. (5e7a751)
Performance
- Improved
pgetrfperformance by optimizing the underlyingpgetf2panel factorization. (159da24, fdc6ce2, 0aac709) pgemmperformance improvements alongside the transpose/submatrix support work. (589e3f6)- Removed a redundant world-communicator barrier from the triangular-factorization (
*trf) code paths. (f1f3295)
Bug Fixes
- Fixed
pgemmcorrectness bug affecting asynchronous communication. (0d576d4) - Fixed
pgeaddbugs whentransa/transb≠'N', and a separatepgeadd/pswapbug fix with accompanying tests. (a8fc255, fc5fdaf) - Fixed a rectangular block-size bug in the transport-block code path, and a related transport-block bug. (79c666e, 09938c0)
- Fixed a
laswpinterface bug caused by CUDA/HIP differences, and a broader CUDA/HIP interface-difference bug on GPU/DCU platforms. (a0297b4, e15c96f) - Fixed HIP-specific bug. (7b5c888)
- Fixed
*_CHECKmacros not reporting the correct file/line location. (e4066eb) - Added zero-size malloc and null-pointer free protection across allocation call sites. (0a42afc)
Build System / Tooling
- Renamed the
ENABLE_*CMake/compile-definition family toDDLA_USE_*for clarity. (2870801, 5b8fbb5) - Switched the DCU (HIP) compiler from
hipcctog++. (b8f8340) - Updated HIP install/build scripts and CUDA/HIP install scripts. (91f4100, 2a6252b, ac6c76c, 2a118b9)
- Removed
bench_pzgemm.cppfromsrc/(moved/superseded by other benchmark updates) and cleaned up a straytmpfolder. (422ce7d, 1ff5713) - Updated
.gitignore. (c1a78dc) - Added, then later removed,
AGENTS.mdcontributor-agent instructions (no longer tracked in this repo). (8c55e6c, 8c5aa17, 3ddde74, 7b07283)
Tests & Benchmarks
- Added a large batch of new API-grid regression tests covering
pgeadd,pgemm,pgesv/pgesv_nopiv,pgetf2(+panel),pgetrf(+_bpiv/_nopiv),pgetrs(+_nopiv),plapiv,pposv,ppotrf(+_bottom_right),ppotrs,pswap,ptran,ptrtrs, a subcommunicator LU test, and transport-block tests. (a5227e8, and the feature commits above) - Added
test_gemm_vbatched.cpp,test_pdam.cpp,test_getrf_nopiv.cpp,test_pgesv_nopiv.cpp,test_pgetrf_bpiv.cpp,test_pgetrf_nopiv.cpp,test_random_generate.cpp, and Hermitian-positivepgemmtests. - Updated
pgetrf/ptrtrs/ppotrf_bottom_rightbenchmark drivers, including acusolverMp-basedpzgetrfbenchmark for CUDA 11.8. (5fe65ff, 5530d58, abb8250) - Removed stray
printfdebug output from the LU factorization files. (acaa3f7)
Full changelog: v0.0.3...main (57 commits, 165 files changed, +26453/-3759 lines)
Note on tag naming: existing tags are v0.0.0, 0.0.2 (no v prefix), v0.0.3. This release recommends tagging as v0.0.4 to stay consistent with the majority convention.