Skip to content
Snippets Groups Projects
Dockerfile 2.93 KiB
FROM registry-gitlab.pasteur.fr/tru/docker-debian12-openmpi-cuda-12.8.1:latest

SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN <<EOF bash
    set -ex


lscpu > /lscpu.native.txt
V=2024.5
CMAKE=cmake
## GROMACS
cd /opt
wget -q -O - https://ftp.gromacs.org/gromacs/gromacs-\${V}.tar.gz | tar xzvf -
cd gromacs-2024.5
mkdir build
cd build

# native host optimisation:

export CUDACXX=/usr/local/cuda-12.8/bin/nvcc
cmake ../ -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.8  -DGMX_GPU=CUDA  \
           -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=/usr/local/gromacs-2024.5-openmpi-cuda12.8-native \
           -DGMX_OPENMP=ON -DGMX_MPI=ON -DGMX_THREAD_MPI=OFF \
           -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_C_COMPILER=mpicc -DGMX_BUILD_OWN_FFTW=ON

make -j24 CXXFLAGS="-O3"
make install 

D=/usr/local/gromacs/\${V}-openmpi-cuda-12.8.0_570.86.10

_build_serial() {
if [ \$# -eq 1 ]; then
OPT=$1
else
exit 1
fi
mkdir serial-single-precision-\${OPT} || :
(cd serial-single-precision-\${OPT} && \
dpkg -l > dpkg-l
printenv > printenv 
\${CMAKE} .. \
-DGMX_BUILD_OWN_FFTW=ON \
-DREGRESSIONTEST_DOWNLOAD=ON \
-DGMX_SIMD=\${OPT} \
-DCMAKE_INSTALL_PREFIX=\${D}/serial/single-precision-\${OPT}
nice make -j 16
make check || :
make install
) 2>&1 | tee -a serial-single-precision-\${OPT}.`date '+%Y-%m-%d_%H%M'`

}

_build_mdrun() {
if [ \$# -eq 1 ]; then
OPT=\$1
else
exit 1
fi
mkdir mdrun-only-single-precision-openmpi-cuda-12.8.0_570.86.10-\${OPT} || :
(cd mdrun-only-single-precision-openmpi-cuda-12.8.0_570.86.10-\${OPT} && \
export CUDACXX=/usr/local/cuda-12.8/bin/nvcc
dpkg -l > dpkg-l
printenv > printenv 
\${CMAKE} .. \
-DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_C_COMPILER=mpicc \
-DGMX_OPENMP=ON -DGMX_MPI=ON -DGMX_THREAD_MPI=OFF \
-DBUILD_SHARED_LIBS=ON \
-DGMX_BUILD_OWN_FFTW=ON \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.8 \
-DGMX_BUILD_MDRUN_ONLY=ON \
-DGMX_GPU=CUDA \
-DGMX_SIMD=\${OPT} \
-DCMAKE_INSTALL_PREFIX=\${D}/mdrun-only/single-precision-openmpi-cuda-12.8.0_570.86.10-\${OPT}

nice make -j 16 && \
make install

) 2>&1 | tee -a single-precision-openmpi-cuda-12.8.0_570.86.10-\${OPT}.`date '+%Y-%m-%d_%H%M'`
}

_default_build() {
for i in SSE4.1 AVX_256 AVX2_256 AVX_512
do 
_build_serial \$i
_build_mdrun \$i
done
}

cd /opt/gromacs-2024.5/
_default_build

cd / && rm -rf /opt/gromacs-2024.5/ 
apt-get autoremove
apt-get autoclean
apt-get clean

#	%runscript
#	#!/bin/bash
#	V=2024.5
#	_usage() {
#		echo first argument must be one of
#		echo native
#		echo or
#		(cd /usr/local/gromacs/\${V}-openmpi-cuda-12.8.0_570.86.10/ && /bin/ls -1d  */*)
#		exit 1
#	}
#	if [ \$# -ge 1 ]; then
#		if [ "\$1" = "native" ]; then
#			. /usr/local/gromacs-2024.5-openmpi-cuda12.8-native/bin/GMXRC.bash
#		else
#			if [ ! -d /usr/local/gromacs/\${V}-openmpi-cuda-12.8.0_570.86.10/\$1 ] ; then
#				_usage
#			fi
#			ls -l /usr/local/gromacs/\${V}-openmpi-cuda-12.8.0_570.86.10/\$1/bin/GMXRC.bash
#			. /usr/local/gromacs/\${V}-openmpi-cuda-12.8.0_570.86.10/\$1/bin/GMXRC.bash
#		fi
#	shift
#	eval "\$@"
#	fi
EOF