From 5d5920d91218d9809d803e30e06cdd10233c6564 Mon Sep 17 00:00:00 2001 From: bcumming <bcumming@cscs.ch> Date: Fri, 24 Jun 2016 14:48:30 +0200 Subject: [PATCH] add cmake support for MPI and Cray systems, updated README --- CMakeLists.txt | 17 ++++++++++++++-- README.md | 54 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 68 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1e9838b4..72ac8679 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,13 +20,26 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) # TBB support -set( WITH_TBB "OFF" CACHE BOOL "use TBB for on-node threading" ) -if( "${WITH_TBB}" STREQUAL "ON" ) +set( WITH_TBB OFF CACHE BOOL "use TBB for on-node threading" ) +if(${WITH_TBB}) find_package(TBB REQUIRED) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWITH_TBB ${TBB_DEFINITIONS}") link_directories(${TBB_LIBRARY}) endif() +# MPI support +# relies on the user specifying an MPI-aware compiler wrapper +set( WITH_MPI OFF CACHE BOOL "use MPI for distrubuted parallelism" ) +if(${WITH_MPI}) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWITH_MPI") +endif() + +# Cray systems +set( SYSTEM_CRAY OFF CACHE BOOL "add flags for compilation on Cray systems" ) +if( ${SYSTEM_CRAY} ) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -dynamic") +endif() + # targets for extermal dependencies include(ExternalProject) diff --git a/README.md b/README.md index 0cb0c0d8..dc2e7d72 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,9 @@ git submodule init git submodule update # setup environment -module load gcc +# on a desktop system this might not be required +# on a cluster this could be required +module load gcc module load cmake export CC=`which gcc` export CXX=`which g++` @@ -25,3 +27,53 @@ make -j cd tests ./test.exe ``` + +## MPI + +Set the `WITH_MPI` option either via the ccmake interface, or via the command line as shown below. +For the time being our CMake configuration does not try to detect MPI. +Instead, it relies on the user specifying an MPI wrapper for the compiler by setting the `CXX` and `CC` environment variables. + +``` +export CXX=mpicxx +export CC=mpicc +cmake <path to CMakeLists.txt> -DWITH_MPI=ON + +``` + +## TBB + +Support for multi-threading requires Intel Threading Building Blocks (TBB). +When TBB is installed, it comes with some scripts that can be run to set up the user environment. +The scripts set the `TBB_ROOT` environment variable, which is used by the CMake configuration to find TBB. + + +``` +source <path to TBB installation>/tbbvars.sh +cmake <path to CMakeLists.txt> -DWITH_TBB=ON +``` + +### TBB on Cray systems + +To compile with TBB on Cray systems, load the intel module, which will automatically configure the environment. + +``` +# load the gnu environment for compiling the application +module load PrgEnv-gnu +# gcc 5.x does not work with the version of TBB installed on Cray +# requires at least version 4.4 of TBB +module swap gcc/4.9.3 +# load the intel programming module +# on Cray systems this automatically sets `TBB_ROOT` environment variable +module load intel +module load cmake +export CXX=`which CC` +export CC=`which cc` + +# multithreading only +cmake <path to CMakeLists.txt> -DWITH_TBB=ON -DSYSTEM_CRAY=ON + +# multithreading and MPI +cmake <path to CMakeLists.txt> -DWITH_TBB=ON -DWITH_MPI=ON -DSYSTEM_CRAY=ON + +``` -- GitLab