qe-gpu-plugin icon indicating copy to clipboard operation
qe-gpu-plugin copied to clipboard

Plug-in to accelerate Quantum ESPRESSO v5 using NVIDIA GPU

QE-GPU: GPU-Accelerated Quantum ESPRESSO

Quantum ESPRESSO is an integrated suite of Open-Source computer codes for electronic-structure calculations and materials modeling at the nanoscale.

The aim of QE-GPU is to create a "plugin-like" component for the standard Quantum ESPRESSO package that allows to exploit the capabilities of NVIDIA GPU graphics cards in order to allow materials scientists to do better and fast science. GPU acceleration is currently available for the Plane-Wave Self-Consistent Field (PWscf) code and the energy barriers and reaction pathways through the Nudged Elastic Band method (NEB) package.

QE-GPU is provided "as is" and with no warranty. This software is distributed under the GNU General Public License, please see the files LICENSE and DISCLAIMER for details. This README presents an introduction to compiling, installing, and using QE-GPU.

Supported GPU Architectures

GPU gpu-arch
M2070 Fermi
M2070Q Fermi
M2090 Fermi
K20 Kepler
K20c Kepler
K20x Kepler
K40 Kepler
K40c Kepler
K80 Kepler
P100 (PCIe) Pascal (CUDA 8.0 mandatory)
P100 (SMX2) Pascal (CUDA 8.0 mandatory)

Any other GPU not listed in this table is not officially supported. The code may work but due to lack of proper double precision support or ECC the performance will not be ideal.

for more information about NVIDIA GPU, see Wikipedia

Requirements

  • Quantum ESPRESSO 5.4
  • Kepler GPU: (minimum) CUDA SDK 6.5
  • Pascal GPU: (minimum) CUDA SDK 8.0

How to compile

  1. Copy QE-GPU in espresso directory

Move to the espresso root directory, uncompress the archive

$ tar zxvf QE-GPU-<TAG-NAME>.tar.gz

and create a symbolic link with the name GPU

$ ln -s QE-GPU-<TAG-NAME> GPU
  1. Run QE-GPU configure

The QE-GPU configure is located in the GPU directory. An example of serial configuration is the following:

$ cd GPU
$ ./configure --disable-parallel --enable-openmp \
  --enable-cuda --with-gpu-arch=Kepler \
  --with-cuda-dir=<full-path-where-CUDA-is-installed> \
  --with-magma --with-phigemm
$ cd ..
$ make -f Makefile.gpu pw-gpu

An example for parallel execution:

$ cd GPU
$ ./configure --enable-parallel --enable-openmp --with-scalapack \
  --enable-cuda --with-gpu-arch=sm_35 \
  --with-cuda-dir=<full-path-where-CUDA-is-installed> \
  --without-magma --with-phigemm
$ cd ..
$ make -f Makefile.gpu pw-gpu

For additional options for QE-GPU see ./configure --help. Here a summary of all GPU-related options available:

  • --enable-cuda : enable CUDA (default: no)
  • --with-cuda-dir=<path> : specify CUDA installation directory (default is /usr/local/cuda/, MANDATORY)
  • --with-gpu-arch=<arch> : (Fermi|Kepler|Pascal) Specify the GPU target architecture (default: Kepler)
  • --with-magma : (yes|no|<path>) Use MAGMA. Self-compile or a <path> can be specified (default: no)
  • --with-phigemm : (yes|no|<path>) Use PHIGEMM. Self-compile ora <path> can be specified (default: yes)