DLA-Future
DLA-Future is a distributed linear algebra library implemented using the C++26
std::execution
library as provided by pika.
DLA-Future provides a ScaLAPACK-like Fortran interface in DLA-Future-Fortran, which can be used as a drop-in replacement for ScaLAPACK (with a subset of ScaLAPACK arguments, e.g. workspace arguments are not present).
Dependencies
DLA-Future has several dependencies. It is officially distributed via the Spack package manager, which is the recommended installation option. The DLA-Future Spack package lists all the required and optional dependencies.
CMake
DLA-Future is enabled in CP2K with the following CMake option:
-DCP2K_USE_DLAF=ON
CP2K Input File
DLA-Future can be selected in the CP2K input file with the PREFERRED_DIAG_LIBRARY keyword:
&GLOBAL
PREFERRED_DIAG_LIBRARY DLAF
DLAF_NEIGVEC_MIN 1024
[...]
&END GLOBAL
The DLAF_NEIGVEC_MIN indicates the minimum matrix size for which DLA-Future is used instead of ScaLAPACK. DLA-Future is optimized for large matrices on GPUs, and might be slower than ScaLAPACK for small matrices or CPU matrices.
Block Size
The default block size of CP2K might be sub-optimal for DLA-Future. While DLA-Future benefits from larger block sizes, the optimal block size depends on the CP2K calculation. The block size can be adjusted with the following keywords:
&GLOBAL
[...]
&FM
FORCE_BLOCK_SIZE .TRUE.
NCOL_BLOCKS 1024
NCOL_BLOCKS 1024
[...]
&END FM
&END GLOBAL
Environment Variables
pika
DLA-Future is built on top of pika, a C++ library based on the C++26 std::execution
library
(see P2300 proposal), providing a CPU runtime with user-level threads, as well as integration with
CUDA/HIP, and MPI. pika’s behavior can be controlled by command line options, or environment
variables. Please refer to pika’s documentation for more information about
controlling the number of threads and thread bindings.