Using make
and compiling libquip.a into the lammps binary generates an error like error 1 in 'geryon/nvd_kernel.h' in line 364
when package gpu tries to set up the runtime env for a lammps gpu job.
This problem disappears when compiling with cmake
. Very strange, using lammps 29Oct2020 stable release.
So here are my steps, first using make
for lmp_serial/lmp_mpi then redoing with cmake
for the cpu+gpu binaries.
First in this project we make a static libquip.a library with and without MPI.
# start with arch just gfortran, here is the MPI version git clone --recursive https://github.com/libAtoms/QUIP.git cd QUIP make config all defaults, but Intel preconditioned minimisation support? n (y with gfortran) GAP support? y GAP operations? y # env for gfortran_openmpi arch export PATH=/share/apps/CENTOS7/python/3.8.3/bin:$PATH export LD_LIBRARY_PATH=/share/apps/CENTOS7/python/3.8.3/lib:$LD_LIBRARY_PATH export PATH=/share/apps/CENTOS7/openmpi/4.0.4/bin:$PATH export LD_LIBRARY_PATH=/share/apps/CENTOS7/openmpi/4.0.4/lib:$LD_LIBRARY_PATH export QUIP_ARCH=linux_x86_64_gfortran_openmpi export QUIP_INSTALLDIR=/share/apps/CENTOS7/lammps/QUIP-public/9Apr2021/linux_x86_64_gfortran_openmpi export QUIP_ROOT=/usr/local/src/tmp/QUIP # compile make install make libquip # copy to installDir
Using make
here are the MPI steps.
# unpack lammps-master.zip cd lammps-master/src # edit LMP_INC in MAKE/Makefile.mpi, add -D QUIP_LIBRARY=/share/apps/CENTOS7/lammps/QUIP-public/9Apr2021/linux_x86_64_gfortran_openmpi # add compiler flags: CCFLAGS = -g -O3 -std=c++11 -fopenmp LINKFLAGS = -g -O3 -fopenmp # yes-packageName, check make yes-user-quip make package-installed # compile make mpi # final compile step fails cd Obj_mpi # see below # add output of showme:link to lammps/lib/quip/Makefile.lammps # section where quip_SYSLIB gets defined, like so # and point to location of libquip.a (one line, no \) # stick in else loop else quip_SYSLIB += -pthread -I/share/apps/CENTOS7/openmpi/4.0.4/lib -Wl,-rpath -Wl,/share/apps/CENTOS7/openmpi/4.0.4/lib --Wl,-- enable-new-dtags --L/share/apps/CENTOS7/openmpi/4.0.4/lib --lmpi_usempi -lmpi_mpifh -lmpi # add output of showme:link to line below + check for -lgfortran mpifort --showme:link mpicxx -g -O3 -fopenmp main.o \ -L/usr/lib64 -L/share/apps/CENTOS7/lammps/QUIP-public/9Apr2021 /linux_x86_64_gfortran_openmpi \ -lifcore -L. -llammps_mpi \ -ljpeg -lquip -llapack -lblas -lgfortran \ -o ../lmp_mpi # success, uses mpif90, not gfortran
Install a version of cmake > 3.10 and unpack lammps-master code on compute node with GPUs. First build libgpu.a for loading into binary lmp
.
cd lammps-master/lib/gpu # edit Makefile.linux # define location of CUDA # arch, for RTX2080 I used Turing -sm_75 # precision SINGLE_DOUBLE (or do all 3 version) make -f Makefile.linux ls -lrt # check for library export PATH=/share/apps/CENTOS7/cmake/3.12.1/bin:$PATH # create a preset file in lammps-master/cmake/presets # content of wes.cmake set(ALL_PACKAGES RIGID COLLOID CLASS2 KSPACE MISC MOLECULE USER-OMP USER-REAXC GPU USER-QUIP ) foreach(PKG ${ALL_PACKAGES}) set(PKG_${PKG} ON CACHE BOOL "" FORCE) endforeach() # next steps on node with internet access (greentail52) # with cuda toolkit copied and linked to /usr/local/cuda # cmake will download lammps packages # create build dir cd lammps-master mkdir build; cd build # -D argument to point to non-MPI library cmake \ -C ../cmake/presets/wes.cmake \ -D QUIP_LIBRARY=/share/apps/CENTOS7/lammps/QUIP-public/9Apr2021/linux_x86_64_gfortran/libquip.a \ ../cmake # build cmake --build . # install rm -rf ~/.local make install # stage, edit files in single_double/etc/lammps cp -rp ~/.local /share/apps/CENTOS7/lammps/29Oct2020/single_double # test lmp in single_double/bin, like so export CUDA_VISIBLE_DEVICES=0 # check if it is free mpirun -n 1 \ /share/apps/CENTOS7/lammps/29Oct2020/single_single/bin/lmp \ -suffix gpu -pk gpu 1 -in in.colloid
That's it.