CUDA GPU Implementations
In ABACUS, we provide the option to use the GPU devices to accelerate the performance. And it has the following general features:
Full gpu implementations: During the SCF progress,
DiagCGclasses are stored or calculated by the GPU devices.
Electronic state data: (e.g. electronic density) are moved from the GPU to the CPU(s) every scf step.
Acclerated by the NVIDIA libraries:
cuBLASfor common linear algebra calculations,
cuSolverfor eigen values/vectors, and
cuFFTfor the conversions between the real and recip spaces.
Multi GPU supprted: Using multiple MPI tasks will often give the best performance. Note each MPI task will be bind to a GPU device with automatically computing load balancing.
Parallel strategy: K point parallel.
To compile and use ABACUS in CUDA mode, you currently need to have an NVIDIA GPU and install the corresponding NVIDIA CUDA toolkit software on your system (this is only tested on Linux and unsupported on Windows):
Check if you have an NVIDIA GPU: cat /proc/driver/nvidia/gpus/*/information
Install a driver and toolkit appropriate for your system (SDK is not necessary)
Building ABACUS with the GPU support:
Check the Advanced Installation Options for the installation of CUDA version support.
Run with the GPU support by editing the INPUT script:
INPUT file we need to set the value keyword device to be
We provides examples of gpu calculations.
Only CG method is supported, so the input keyword
ks_solvercan only take the value
Only PW basis is supported, so the input keyword
basis_typecan only take the value
Only k point parallelization is supported, so the input keyword
kparwill be set to match the number of MPI tasks automatically.
Supported CUDA architectures:
60 # P100, 1080ti
70 # V100
75 # T4
80 # A100, 3090
Q: Does the GPU implementations support atomic orbital basis sets? A: Currently no.