GPGPUs ====== GPAW has a separate CUDA version available for Nvidia GPGPUs. Nvidia has released multiple versions of the CUDA toolkit. In this work just CUDA 7.5 was tested with Tesla K20, Tesla K40 and Tesla K80 cards. Source code is available in GPAW's repository as a separate branch called 'cuda'. To obtain the code, use e.g. the following commands: ``` git clone https://gitlab.com/gpaw/gpaw.git cd gpaw git checkout cuda ``` or download it from: https://gitlab.com/gpaw/gpaw/tree/cuda Alternatively, the source code is also available with minor modifications required to work with newer versions of CUDA and Libxc (incl. example installation settings) at: https://gitlab.com/atekin/gpaw-cuda.git Patches needed to work with newer versions of CUDA and example setup scripts for GPAW using dynamic links to Libxc are available also separately at: https://github.com/mlouhivu/gpaw-cuda-patches.git Software requirements --------------------- CUDA branch of the GPAW is based on version 0.9.1.13528 and has similar software requirements to the main branch. To compile the code, one needs to use Intel compile environment. For example, the following versions are known to work: * Intel compile environment with Intel MKL and Intel MPI (2015 update 3) * Python (2.7.11) * ASE (3.9.1) * Libxc (3.0.0) * CUDA (7.5) * HDF5 (1.8.16) * Pycuda (2016.1.2) Install instructions -------------------- Before installing the CUDA version of GPAW, the required packages should be compiled using Intel compilers. In addition to using Intel compilers, there are two additional steps compared to a standard installation: 1. Compile the CUDA files after preparing a suitable `make.inc` (in `c/cuda/`) by modifying the default options and paths to match your system. The following compiler options may offer a good starting point. ```shell CC = icc CCFLAGS = $(CUGPAW_DEFS) -fPIC -std=c99 -m64 -O3 NVCC = nvcc -ccbin=icpc NVCCFLAGS = $(CUGPAW_DEFS) -O3 -arch=sm_20 -m64 --compiler-options '-fPIC -O3' ``` To use a dynamic link to Libxc, please add a corresponding include flag to the CUGPAW_INCLUDES (e.g. `-I/path/to/libxc/include`) and a It is possible that you may also need to add additional include flags for MKL and Libxc in CUGPAW_INCLUDES (e.g. `-I/path/to/mkl/include`). After making the necessary changes, simply run make (in the `c/cuda` path). 2. Edit your GPAW setup script (`customize.py`) to add correct link and compile options for CUDA. The relevant lines are e.g.: ```python define_macros += [('GPAW_CUDA', '1')] libraries += [ 'gpaw-cuda', 'cublas', 'cudart', 'stdc++' ] library_dirs += [ './c/cuda', '/path/to/cuda/lib64' ] include_dirs += [ '/path/to/cuda/include' ] ```