Skip to content

Building the Software

Ben Baker edited this page Jul 13, 2018 · 24 revisions

Building

Before continuing, understand that this code is intended to run on Intel hardware. It likely could see a performance boost with coprocessors. However, the idea of porting to a GPU is daunting and I instead would prefer to run the code on a Xeon Phi first to confirm my suspicions before writing that mountain of kernel code. Given this the Intel build instructions are discussed.

Prerequisites

To build it is required that one have

Optionally, for compiling the unit tests, one must also build

However, these will eventually become project submodules and wrangled into the CMake.

Configuring CMake

It can be expedient to configure CMake with a script. Though I sometimes have to run the script twice for whatever reason.

Configuring With GNU Compilers

#!/bin/sh
export CC=gcc
export FC=gfortran
export MKL_LIB_ROOT=/opt/intel/mkl/lib/intel64
export IPP_LIB_ROOT=/opt/intel/ipp/lib/intel64
if [ -f Makefile ]; then
   make clean
fi
if [ -f CMakeCache.txt ]; then
   echo "Removing CMakeCache.txt"
   rm CMakeCache.txt
fi
if [ -d CMakeFiles ]; then
   echo "Removing CMakeFiles"
   rm -rf CMakeFiles
fi
cmake ./ \
-DCMAKE_INSTALL_PREFIX=./ \
-DCMAKE_C_COMPILER=gcc \
-DCMAKE_Fortran_COMPILER=gfortran \
-DCMAKE_C_FLAGS="-g -O2 -fopenmp -Wall -std=c11" \
-DCMAKE_Fortran_FLAGS="-g -O2 -fopenmp -fbounds-check -Wall -m64" \
-DXCLOC_USE_MPI=TRUE \
-DXCLOC_PROFILE=TRUE \
-DMKL_INCLUDE_DIR=/opt/intel/mkl/include \
-DMKL_LIBRARY="-Wl,--start-group ${MKL_LIB_ROOT}/libmkl_gf_lp64.a ${MKL_LIB_ROOT}/libmkl_sequential.a ${MKL_LIB_ROOT}/libmkl_core.a -Wl,--end-group" \
-DIPP_INCLUDE_DIR=/opt/intel/ipp/include \
-DIPP_LIBRARY="${IPP_LIB_ROOT}/libipps.so;${IPP_LIB_ROOT}/libippvm.so;${IPP_LIB_ROOT}/libippcore.so" \
-DMPI_C_INCLUDE_PATH=/opt/intel/impi/2018.0.128/include64 \
-DMPI_Fortran_INCLUDE_PATH=/home/bakerb25/C/openmpi-3.0.2/lib/ \
-DMPI_C_LIBRARIES="/home/bakerb25/C/openmpi-3.0.2/lib//libmpi.so" \
-DMPI_Fortran_LIBRARIES="/home/bakerb25/C/openmpi-3.0.2/lib/libmpi_usempif08.so" \
-DH5_C_INCLUDE_DIR=/home/bakerb25/C/hdf5-1.10.1_intel/include \
-DH5_LIBRARY=/home/bakerb25/C/hdf5-1.10.1_intel/lib/libhdf5.so \
-DSACIO_INCLUDE_DIR=/home/bakerb25/C/sacio/include \
-DSACIO_LIBRARY=/home/bakerb25/C/sacio/lib/libsacio_shared.so \
-DXML2_INCLUDE_DIR=/usr/include/libxml2 \
-DXML2_LIBRARY=/usr/lib/x86_64-linux-gnu/libxml2.so \
-DINIPARSER_INCLUDE_DIR=/home/bakerb25/C/iniparser/src \
-DINIPARSER_LIBRARY=/home/bakerb25/C/iniparser/libiniparser.so.1

Configuring With the Intel Compilers

#!/bin/sh
export CC=/opt/intel/bin/icc
export FC=/opt/intel/bin/ifort
export F90=/opt/intel/bin/ifort
export MKL_LIB_ROOT=/opt/intel/mkl/lib/intel64
export IPP_LIB_ROOT=/opt/intel/ipp/lib/intel64
if [ -f Makefile]; then
   make clean
fi
if [ -f CMakeCache.txt ]; then
   echo "Removing CMakeCache.txt"
   rm CMakeCache.txt
fi
if [ -d CMakeFiles ]; then
   echo "Removing CMakeFiles"
   rm -rf CMakeFiles
fi
cmake ./ \
-DCMAKE_INSTALL_PREFIX=./ \
-DCMAKE_C_COMPILER=icc \
-DCMAKE_Fortran_COMPILER=ifort \
-DCMAKE_C_FLAGS="-g -O2 -xCORE-AVX2 -std=c11 -qopenmp -Wall -Wcomment -Wunused -Wcheck -qopt-report=5" \
-DCMAKE_Fortran_FLAGS="-g -O2 -qopenmp -W 1 -warn unused -align array64byte -qopt-report=4 -xHOST -nofor-main" \
-DXCLOC_USE_MPI=TRUE \
-DXCLOC_USE_INTEL=TRUE \
-DXCLOC_PROFILE=TRUE \
-DMKL_INCLUDE_DIR=/opt/intel/mkl/include \
-DMKL_LIBRARY="${MKL_LIB_ROOT}/libmkl_intel_lp64.so;${MKL_LIB_ROOT}/libmkl_sequential.so;${MKL_LIB_ROOT}/libmkl_core.so;${MKL_LIB_ROOT}/libmkl_vml_avx2.so;${MKL_LIB_ROOT}/libmkl_avx2.so" \
-DIPP_INCLUDE_DIR=/opt/intel/ipp/include \
-DIPP_LIBRARY="${IPP_LIB_ROOT}/libipps.so;${IPP_LIB_ROOT}/libippvm.so;${IPP_LIB_ROOT}/libippcore.so" \
-DMPI_C_INCLUDE_PATH=/opt/intel/impi/2018.0.128/include64 \
-DMPI_C_LIBRARIES="/opt/intel/impi/2018.0.128/lib64/libmpi.so" \
-DMPI_Fortran_INCLUDE_PATH=/opt/intel/impi/2018.1.163/include64 \
-DMPI_Fortran_LIBRARIES="/opt/intel/impi/2018.0.128/lib64/libmpifort.so" \
-DH5_C_INCLUDE_DIR=/home/bakerb25/C/hdf5-1.10.1_intel/include \
-DH5_LIBRARY=/home/bakerb25/C/hdf5-1.10.1_intel/lib/libhdf5.so \
-DSACIO_INCLUDE_DIR=/home/bakerb25/C/sacio/include \
-DSACIO_LIBRARY=/home/bakerb25/C/sacio/lib/libsacio_shared.so \
-DXML2_INCLUDE_DIR=/usr/include/libxml2 \
-DXML2_LIBRARY=/usr/lib/x86_64-linux-gnu/libxml2.so \
-DINIPARSER_INCLUDE_DIR=/home/bakerb25/C/iniparser/src \
-DINIPARSER_LIBRARY=/home/bakerb25/C/iniparser/libiniparser.so.1 \
-DADVISOR_INCLUDE_DIR=/opt/intel/advisor/include

Building

After CMake has been successfully configured one then simply types

make

in the root source directory to build the software. To install the software one then types

make install

in the root source directory.

Building the Developer Level Documentation

If Doxygen is available then the developer level documentation can be built by specifying

doxygen Doxyfile

in the root source directory.

Clone this wiki locally