Building WarpX for Cori (NERSC)¶
Standard build¶
For the Cori cluster at NERSC, you need to type the following command when compiling:
Note
In order to compile the code with a spectral solver, type
module load cray-fftw
before typing any of the commands below, and add USE_PSATD=TRUE
at the end of the command containing make
.
In order to compile for the Haswell architecture:
- with the Intel compiler
make -j 16 COMP=intel
- with the GNU compiler
module swap PrgEnv-intel PrgEnv-gnu make -j 16 COMP=gnu
In order to compile for the Knight’s Landing (KNL) architecture:
- with the Intel compiler
module swap craype-haswell craype-mic-knl make -j 16 COMP=intel
- with the GNU compiler
module swap craype-haswell craype-mic-knl module swap PrgEnv-intel PrgEnv-gnu make -j 16 COMP=gnu
See Running on specific platforms for more information on how to run WarpX on Cori.
GPU Build¶
To compile on the experimental GPU nodes on Cori, you first need to purge your modules, most of which won’t work on the GPU nodes.
module purge
Then, you need to load the following modules:
module load modules esslurm gcc/7.3.0 cuda mvapich2
You can also use OpenMPI-UCX instead of mvapich: openmpi/4.0.1-ucx-1.6.
Then, you need to use slurm to request access to a GPU node:
salloc -C gpu -N 1 -t 30 -c 10 --gres=gpu:1 -A m1759
This reserves 10 logical cores (5 physical), 1 GPU. The latest documentation can be found here: https://docs-dev.nersc.gov/cgpu/access Note that you can’t cross-compile for the GPU nodes - you have to log on to one and then build your software.
Finally, navigate to the base of the WarpX repository and compile in GPU mode:
make -j 16 USE_GPU=TRUE
Building WarpX with openPMD support¶
First, load the appropriate modules:
module swap craype-haswell craype-mic-knl
module swap PrgEnv-intel PrgEnv-gnu
module load cmake/3.14.4
module load cray-hdf5-parallel
module load adios/1.13.1
export CRAYPE_LINK_TYPE=dynamic
Then, in the warpx_directory, download and build the openPMD API:
git clone https://github.com/openPMD/openPMD-api.git
mkdir openPMD-api-build
cd openPMD-api-build
cmake ../openPMD-api -DopenPMD_USE_PYTHON=OFF -DCMAKE_INSTALL_PREFIX=../openPMD-install/ -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=ON -DCMAKE_INSTALL_RPATH='$ORIGIN'
cmake --build . --target install
Finally, compile WarpX:
cd ../WarpX
export PKG_CONFIG_PATH=$PWD/../openPMD-install/lib64/pkgconfig:$PKG_CONFIG_PATH
make -j 16 COMP=gnu USE_OPENPMD=TRUE
In order to run WarpX, load the same modules again.