I took the following notes while installing Gromacs 4.6.1 recently. Hopefully others will find them useful.
The software was compiled and installed on a CentOS 5.9 x86_64 containing QDR Infiniband. The system uses SGE (Grid Engine) as it's scheduler.
Intel compilers 13.1.1 were used to compile both OpenMPI and Gromacs.
Intel Compilers
I used version 13.1.1 of the Intel compilers. I'm including the module file here for reference
#%Module
set ver 13.1.1
set arch intel64
set root /share/apps/intel/parallel_studio_xe_2013_update3/composer_xe_2013.3.163
set ccroot /opt/intel/Compiler/$ver/$ccver
set fcroot /opt/intel/Compiler/$ver/$fcver
set mklroot $root/mkl
set msg "This module adds Intel compilers v$ver to various paths"
proc ModulesHelp { } {
puts stderr $msg
}
module-whatis $msg
setenv MKLROOT $mklroot
prepend-path MANPATH $root/man/en_US
prepend-path INTEL_LICENSE_FILE $root/licenses
prepend-path NLSPATH $root/compiler/lib/$arch/locale/en_US:$root/ipp/lib/$arch/locale/en_US:$root/mkl/lib/$arch/locale/en_US:$root/debugger/lib/$arch/locale/en_US
prepend-path LIBRARY_PATH $root/compiler/lib/$arch:$root/ipp/lib/$arch:$root/mkl/lib/$arch:$root/tbb/lib/$arch/gcc4.1
prepend-path MIC_LD_LIBRARY_PATH $root/compiler/lib/mic:$root/mkl/lib/mic:$root/tbb/lib/mic
prepend-path LD_LIBRARY_PATH $root/compiler/lib/$arch:$root/mpirt/lib/$arch:$root/ipp/lib/$arch:$root/mkl/lib/$arch:$root/tbb/lib/$arch/gcc4.1
prepend-path PATH $root/bin/$arch:$root/mpirt/bin/$arch:$root/bin/${arch}_mic:$root/debugger/gui/$arch
prepend-path CPATH $root/mkl/include:$root/tbb/include
prepend-path INCLUDE $root/mkl/include
prepend-path IPPROOT $root/ipp
prepend-path TBBROOT $root/tbb
prepend-path IDB_HOME $root/bin/$arch
Build OpenMPI 1.6.4
First, build the latest OpenMPI with the Intel compilers. This version of OpenMPI will reside in the Gromacs 4.6.1 install path.
- Create the install base directory
cd /share/apps/gromacs/4.6.1/build
wget http://www.open-mpi.org/software/ompi/v1.6/downloads/openmpi-1.6.4.tar.bz2
- Create the build script for Intel compilers: /share/apps/gromacs/4.6.1/build/build-openmpi-intel.sh
#!/bin/sh
. /etc/profile.d/modules.sh
ver=1.6
rel=1.6.4
grover=4.6.1
src="openmpi-${rel}.tar.bz2"
url="http://www.open-mpi.org/software/ompi/v${ver}/downloads/${src}"
compiler="intel"
basedir="/share/apps/gromacs/${grover}/openmpi"
prefix="${basedir}/${rel}-${compiler}"
if [ -d $prefix ]; then
echo "Installation directory already exists, exiting to prevent overwrite: $prefix";
exit 1
else
echo "Verified installation directory does not exist: $prefix"
fi
if [ ! -f $src ]; then
echo "Downloading source code from: $url";
wget $url;
else
echo "Using existing source code: $src";
fi
if [ -d "openmpi-${rel}" ]; then
echo "Removing existing build directory ./openmpi-${rel}"
rm -rf openmpi-${rel};
fi
echo "Extracting $src"
tar -jxf $src
cd openmpi-${rel}
echo "Building OpenMPI $rel for Intel compilers"
echo "Running configure"
module purge
module load intel/intel-compilers-13.1.1
CC=icc CXX=icpc F77=ifort FC=ifort ./configure --with-sge --with-openib --prefix=$prefix --enable-static --enable-shared
make all install
module purge
cd ..
- Run the compile and install
./build-openmpi-intel.sh | tee openmpi-1.6.4-intel.log
- Create the module file (based off of [http://www.levlafayette.com/node/145 this example]) in the Gromacs base directory
mkdir -p /share/apps/gromacs/4.6.1/modulefiles/gromacs-openmpi-intel
vim /share/apps/gromacs/4.6.1/modulefiles/gromacs-openmpi-intel/1.6.4
#%Module1.0#####################################################################
##
## $name modulefile
##
# /share/apps/gromacs/4.6.1/openmpi/1.6.4-intel/bin
# /share/apps/gromacs/4.6.1/openmpi/gromacs-openmpi-intel/1.6.4-intel/bin
set ver [lrange [split [ module-info name ] / ] 1 1 ]
set name [lrange [split [ module-info name ] / ] 0 0 ]
set loading [module-info mode load]
set subname [lrange [split $name - ] 0 0 ]
#set compiler [lrange [split $name - ] 1 1 ]
set compiler "intel"
set compilerver "13.1.1"
proc ModulesHelp { } {
puts stderr "\tThis module sets the envinronment for $name v$ver compiled\n\twith Intel v13.1.1 compilers"
}
module-whatis "Set environment variables to use $name version $ver"
if { $loading && ![ is-loaded $compiler/$compilerver ] } {
module load $compiler/$compilerver
}
set basedir /share/apps/gromacs/4.6.1/openmpi/${ver}-$compiler
prepend-path --delim " " CPPFLAGS -I$basedir/include
prepend-path --delim " " LDFLAGS -L$basedir/lib
prepend-path LD_LIBRARY_PATH $basedir/lib
prepend-path MANPATH $basedir/share/man
prepend-path PATH $basedir/bin
setenv MPI_DIR $basedir/
setenv MPI_HOME $basedir/
setenv OPENMPI_ROOT $basedir/
- Run a test
- Create the input C file /share/apps/openmpi/build/mpi-helloworld.c
#include <stdio>
#include <string>
#include <stddef>
#include <stdlib>
#include "mpi.h"
main(int argc, char **argv ) {
int rank, size;
int buflen = 512;
char name[buflen];
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD,&size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
gethostname(name, buflen);
printf( "P rank %d of %d, host %s\n", rank, size, name);
MPI_Finalize();
}
- Compile mpi-helloworld.c
module load /share/apps/gromacs/4.6.1/modulefiles/gromacs-openmpi-intel/1.6.4
mpicc -o mpi-helloworld-intel mpi-helloworld.c
- run it as a job
module purge
module load /share/apps/gromacs/4.6.1/modulefiles/gromacs-openmpi-intel/1.6.4
qsub -V -b y \
-l h_rt=00:15:00 \
-l vf=256M \
-j y \
-pe openmpi\* 8 \
mpirun -n 8 /share/apps/openmpi/build/mpi-helloworld-intel
Build Gromacs 4.6.1
Official Gromacs 4.6
build instructions
They have changed dramatically from versions 4.5 and prior.
One requirement listed is that we need CMake version 2.8 or later. EPEL provides CMake 2.6.4, so we'll need to build CMake from scratch.
- Download the latest CMake from here: http://www.cmake.org/cmake/resources/software.html
sudo mkdir /share/apps/cmake
sudo chown mhanby:atlab /share/apps/cmake
cd /share/apps/cmake
wget http://www.cmake.org/files/v2.8/cmake-2.8.10.2-Linux-i386.tar.gz
tar -zxf cmake-2.8.10.2-Linux-i386.tar.gz
- Create the build directory and download the source
mkdir -p /share/apps/gromacs/4.6.1/build
cd /share/apps/gromacs/4.6.1/build
wget ftp://ftp.gromacs.org/pub/gromacs/gromacs-4.6.1.tar.gz
tar -zxf gromacs-4.6.1.tar.gz
mkdir gromacs-4.6.1/build
cd gromacs-4.6.1/build
- Create the module files
mkdir /share/apps/modulefiles/gromacs-intel
vim /share/apps/modulefiles/gromacs-intel/4.6.1
#%Module
set ver 4.6.1
set app "Gromacs"
set url "http://gromacs.org/"
set approot /share/apps/gromacs/$ver
set msg "This module adds $app v$ver to various paths\nWebsite: $url\n\n"
proc ModulesHelp { } {
puts stderr $msg
}
module-whatis $msg
module use --append $approot/modulefiles
module load intel/13.1.1
#module load $approot/modulefiles/gromacs-openmpi-intel/1.6.4
module load gromacs-openmpi-intel/1.6.4
setenv GROMACSHOME $approot
#setenv MKL_HOME $::env(MKLROOT)
prepend-path PATH $approot/bin
prepend-path LD_LIBRARY_PATH $approot/lib
prepend-path MANPATH $approot/man
prepend-path MODULEPATH $approot/modulefiles
prepend-path PKG_CONFIG_PATH $approot/lib/pkgconfig
- The next steps will build single and double precision in serial and parallel
- Serial single precision
- Run cmake to configure the build
module purge
module load gromacs-intel/4.6.1
export PATH=/share/apps/cmake/cmake-2.8.10.2-Linux-i386/bin:$PATH
cd /share/apps/gromacs/4.6.1/build/gromacs-4.6.1/build
rm -rf *
cmake .. \
-DCMAKE_C_COMPILER=icc \
-DCMAKE_CXX_COMPILER=icpc \
-DGMX_BUILD_OWN_FFTW=ON \
-DCMAKE_INSTALL_PREFIX=/share/apps/gromacs/4.6.1 \
-DREGRESSIONTEST_DOWNLOAD=ON
- View the configuration
ccmake ..
BUILD_SHARED_LIBS ON
CMAKE_BUILD_TYPE Release
CMAKE_INSTALL_PREFIX /share/apps/gromacs/4.6.1
CMAKE_PREFIX_PATH
CUDA_HOST_COMPILER /share/apps/intel/parallel_studio_xe_2013_update3/composer_xe_2013.3.163/bin/intel64/icc
GMX_CPU_ACCELERATION SSE4.1
GMX_DEFAULT_SUFFIX ON
GMX_DOUBLE OFF
GMX_FFT_LIBRARY fftw3
GMX_GPU OFF
GMX_GSL OFF
GMX_MPI OFF
GMX_OPENMP ON
GMX_QMMM_PROGRAM none
GMX_THREAD_MPI ON
GMX_X11 OFF
REGRESSIONTEST_DOWNLOAD OFF
- make
make
- Run the tests
make check
[ 70%] Built target gmx
[ 71%] Built target gmxfftw
[ 80%] Built target md
[ 92%] Built target gmxana
[ 92%] Built target editconf
[ 96%] Built target gmxpreprocess
[ 97%] Built target grompp
[ 97%] Built target pdb2gmx
[ 97%] Built target gmxcheck
[100%] Built target mdrun
[100%] Built target gmxtests
Test project /share/apps/gromacs/4.6.1/build/gromacs-4.6.1/build
Start 1: regressiontests/simple
1/5 Test #1: regressiontests/simple ........... Passed 72.17 sec
Start 2: regressiontests/complex
2/5 Test #2: regressiontests/complex .......... Passed 868.76 sec
Start 3: regressiontests/kernel
3/5 Test #3: regressiontests/kernel ........... Passed 583.48 sec
Start 4: regressiontests/freeenergy
4/5 Test #4: regressiontests/freeenergy ....... Passed 695.84 sec
Start 5: regressiontests/pdb2gmx
5/5 Test #5: regressiontests/pdb2gmx .......... Passed 379.29 sec
100% tests passed, 0 tests failed out of 5
Total Test time (real) = 2599.69 sec
[100%] Built target check
- Install
make install
...
-- Installing: /share/apps/gromacs/4.6.1/lib/pkgconfig/libgmxana.pc
-- Installing: /share/apps/gromacs/4.6.1/bin/GMXRC
-- Installing: /share/apps/gromacs/4.6.1/bin/GMXRC.bash
-- Installing: /share/apps/gromacs/4.6.1/bin/GMXRC.zsh
-- Installing: /share/apps/gromacs/4.6.1/bin/GMXRC.csh
-- Installing: /share/apps/gromacs/4.6.1/bin/completion.csh
-- Installing: /share/apps/gromacs/4.6.1/bin/completion.bash
-- Installing: /share/apps/gromacs/4.6.1/bin/completion.zsh
-- Installing: /share/apps/gromacs/4.6.1/bin/demux.pl
-- Installing: /share/apps/gromacs/4.6.1/bin/xplor2gmx.pl
- Serial double precision (will append _d to applicable installed files, example, mdrun_d)
- Run cmake to configure the build
module purge
module load gromacs-intel/4.6.1
export PATH=/share/apps/cmake/cmake-2.8.10.2-Linux-i386/bin:$PATH
cd /share/apps/gromacs/4.6.1/build/gromacs-4.6.1/build
rm -rf *
cmake .. \
-DCMAKE_C_COMPILER=icc \
-DCMAKE_CXX_COMPILER=icpc \
-DGMX_BUILD_OWN_FFTW=ON \
-DGMX_DOUBLE=ON \
-DCMAKE_INSTALL_PREFIX=/share/apps/gromacs/4.6.1 \
-DREGRESSIONTEST_DOWNLOAD=ON
- View the configuration
ccmake ..
BUILD_SHARED_LIBS ON
CMAKE_BUILD_TYPE Release
CMAKE_INSTALL_PREFIX /share/apps/gromacs/4.6.1
CMAKE_PREFIX_PATH
GMX_CPU_ACCELERATION SSE4.1
GMX_DEFAULT_SUFFIX ON
GMX_DOUBLE ON
GMX_FFT_LIBRARY fftw3
GMX_GPU OFF
GMX_GSL OFF
GMX_MPI OFF
GMX_OPENMP ON
GMX_QMMM_PROGRAM none
GMX_THREAD_MPI ON
GMX_X11 OFF
REGRESSIONTEST_DOWNLOAD OFF
- make
make
- Run the tests
make check
Test project /share/apps/gromacs/4.6.1/build/gromacs-4.6.1/build
Start 1: regressiontests/simple
1/5 Test #1: regressiontests/simple ........... Passed 3.33 sec
Start 2: regressiontests/complex
2/5 Test #2: regressiontests/complex .......... Passed 6.80 sec
Start 3: regressiontests/kernel
3/5 Test #3: regressiontests/kernel ........... Passed 52.89 sec
Start 4: regressiontests/freeenergy
4/5 Test #4: regressiontests/freeenergy ....... Passed 9.19 sec
Start 5: regressiontests/pdb2gmx
5/5 Test #5: regressiontests/pdb2gmx .......... Passed 22.82 sec
100% tests passed, 0 tests failed out of 5
Total Test time (real) = 95.08 sec
[100%] Built target check
- Install
make install
- Parallel single precision (will append _mpi to applicable installed files, example, mdrun_mpi)
- Run cmake to configure the build
module purge
module load gromacs-intel/4.6.1
export PATH=/share/apps/cmake/cmake-2.8.10.2-Linux-i386/bin:$PATH
cd /share/apps/gromacs/4.6.1/build/gromacs-4.6.1/build
rm -rf *
cmake .. \
-DCMAKE_C_COMPILER=icc \
-DCMAKE_CXX_COMPILER=icpc \
-DGMX_BUILD_OWN_FFTW=ON \
-DGMX_MPI=ON \
-DCMAKE_INSTALL_PREFIX=/share/apps/gromacs/4.6.1 \
-DREGRESSIONTEST_DOWNLOAD=ON
- View the configuration
ccmake ..
BUILD_SHARED_LIBS ON
CMAKE_BUILD_TYPE Release
CMAKE_INSTALL_PREFIX /share/apps/gromacs/4.6.1
CMAKE_PREFIX_PATH
CUDA_HOST_COMPILER /share/apps/intel/parallel_studio_xe_2013_update3/composer_xe_2013.3.163/bin/intel64/icc
GMX_CPU_ACCELERATION SSE4.1
GMX_DEFAULT_SUFFIX ON
GMX_DOUBLE OFF
GMX_FFT_LIBRARY fftw3
GMX_GPU OFF
GMX_GSL OFF
GMX_MPI ON
GMX_OPENMP ON
GMX_QMMM_PROGRAM none
GMX_THREAD_MPI OFF
GMX_X11 OFF
MPI_EXTRA_LIBRARY /usr/lib64/librdmacm.so;/usr/lib64/libibverbs.so;/usr/lib64/librt.so;/usr/lib64/libnsl.so;/usr/lib64/libutil.so;/usr/lib64/libdl.so;/usr/lib64/libm.so;/usr/lib64/librt.so;
MPI_LIBRARY /share/apps/gromacs/4.6.1/openmpi/1.6.4-intel/lib/libmpi.so
REGRESSIONTEST_DOWNLOAD OFF
- make
make
- Run the tests
make check
Test project /share/apps/gromacs/4.6.1/build/gromacs-4.6.1/build
Start 1: regressiontests/simple
1/5 Test #1: regressiontests/simple ........... Passed 22.68 sec
Start 2: regressiontests/complex
2/5 Test #2: regressiontests/complex .......... Passed 29.49 sec
Start 3: regressiontests/kernel
3/5 Test #3: regressiontests/kernel ........... Passed 222.08 sec
Start 4: regressiontests/freeenergy
4/5 Test #4: regressiontests/freeenergy ....... Passed 19.17 sec
Start 5: regressiontests/pdb2gmx
5/5 Test #5: regressiontests/pdb2gmx .......... Passed 75.39 sec
100% tests passed, 0 tests failed out of 5
Total Test time (real) = 368.83 sec
[100%] Built target check
- Install
make install
- Parallel double precision (will append _mpi_d to applicable installed files, example, mdrun_mpi_d)
- Run cmake to configure the build
module purge
module load gromacs-intel/4.6.1
export PATH=/share/apps/cmake/cmake-2.8.10.2-Linux-i386/bin:$PATH
cd /share/apps/gromacs/4.6.1/build/gromacs-4.6.1/build
rm -rf *
cmake .. \
-DCMAKE_C_COMPILER=icc \
-DCMAKE_CXX_COMPILER=icpc \
-DGMX_BUILD_OWN_FFTW=ON \
-DGMX_MPI=ON \
-DGMX_DOUBLE=ON \
-DCMAKE_INSTALL_PREFIX=/share/apps/gromacs/4.6.1 \
-DREGRESSIONTEST_DOWNLOAD=ON
- View the configuration
ccmake ..
BUILD_SHARED_LIBS ON
CMAKE_BUILD_TYPE Release
CMAKE_INSTALL_PREFIX /share/apps/gromacs/4.6.1
CMAKE_PREFIX_PATH
GMX_CPU_ACCELERATION SSE4.1
GMX_DEFAULT_SUFFIX ON
GMX_DOUBLE ON
GMX_FFT_LIBRARY fftw3
GMX_GPU OFF
GMX_GSL OFF
GMX_MPI ON
GMX_OPENMP ON
GMX_QMMM_PROGRAM none
GMX_THREAD_MPI OFF
GMX_X11 OFF
MPI_EXTRA_LIBRARY /usr/lib64/librdmacm.so;/usr/lib64/libibverbs.so;/usr/lib64/librt.so;/usr/lib64/libnsl.so;/usr/lib64/libutil.so;/usr/lib64/libdl.so;/usr/lib64/libm.so;/usr/lib64/librt.so;/usr/lib64/libnsl.so;/usr/lib64/libutil.so
MPI_LIBRARY /share/apps/gromacs/4.6.1/openmpi/1.6.4-intel/lib/libmpi.so
REGRESSIONTEST_DOWNLOAD OFF
- make
make
- Run the tests
make check
Test project /share/apps/gromacs/4.6.1/build/gromacs-4.6.1/build
Start 1: regressiontests/simple
1/5 Test #1: regressiontests/simple ........... Passed 22.65 sec
Start 2: regressiontests/complex
2/5 Test #2: regressiontests/complex .......... Passed 32.25 sec
Start 3: regressiontests/kernel
3/5 Test #3: regressiontests/kernel ........... Passed 232.23 sec
Start 4: regressiontests/freeenergy
4/5 Test #4: regressiontests/freeenergy ....... Passed 21.13 sec
Start 5: regressiontests/pdb2gmx
5/5 Test #5: regressiontests/pdb2gmx .......... Passed 82.39 sec
100% tests passed, 0 tests failed out of 5
Total Test time (real) = 390.67 sec
[100%] Built target check
- Install
make install
3 comments:
FYI: in my experience, gcc 4.7 generates faster code than Intel 12 and 13 (the latter seems to be even slightly slower than the former).
Thanks for the reply, I'll compile a GCC 4.7 version and have one of our Gromacs users do a benchmark test.
That's good news, score one for open source :-)
Updated the post with new SyntaxHighlighter support:
http://alexgorbatchev.com/SyntaxHighlighter/
Post a Comment