From c3ad1c68366cf587e340200c8baeb0d80e7108c1 Mon Sep 17 00:00:00 2001 From: Sam Yates <halfflat@gmail.com> Date: Fri, 24 Jun 2016 14:13:15 +0200 Subject: [PATCH] MPI through CMake * Add WITH_MPI CMake option to enable MPI code in application * Use find_package(MPI) and set up flags, etc. for MPI * Extra defines to disable the inclusion of C++ MPI headers for MPICH and OpenMPI. * Fix signed/unsigned compare warning in algorithms.hpp --- CMakeLists.txt | 15 ++++++++++++--- miniapp/CMakeLists.txt | 5 +++++ src/algorithms.hpp | 2 +- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1e9838b4..ba2639af 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,13 +20,22 @@ 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 "ON" CACHE BOOL "use TBB for on-node threading") +if("${WITH_TBB}" STREQUAL "ON") find_package(TBB REQUIRED) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWITH_TBB ${TBB_DEFINITIONS}") - link_directories(${TBB_LIBRARY}) endif() +# MPI support +set(WITH_MPI "ON" CACHE BOOL "use MPI for distributed processing") +if("${WITH_MPI}" STREQUAL "ON") + find_package(MPI REQUIRED) + include_directories(SYSTEM ${MPI_C_INCLUDE_PATH}) + add_definitions(-DWITH_MPI) + # unfortunate workaround for C++ detection in system mpi.h + add_definitions(-DMPICH_SKIP_MPICXX=1 -DOMPI_SKIP_MPICXX=1) + set_property(DIRECTORY APPEND_STRING PROPERTY COMPILE_OPTIONS "${MPI_C_COMPILE_FLAGS}") +endif() # targets for extermal dependencies include(ExternalProject) diff --git a/miniapp/CMakeLists.txt b/miniapp/CMakeLists.txt index a3f8447e..8ce6e389 100644 --- a/miniapp/CMakeLists.txt +++ b/miniapp/CMakeLists.txt @@ -11,6 +11,11 @@ add_executable(miniapp.exe ${MINIAPP_SOURCES} ${HEADERS}) target_link_libraries(miniapp.exe LINK_PUBLIC cellalgo) target_link_libraries(miniapp.exe LINK_PUBLIC ${TBB_LIBRARIES}) +if(WITH_MPI) + target_link_libraries(miniapp.exe LINK_PUBLIC ${MPI_C_LIBRARIES}) + set_property(TARGET miniapp.exe APPEND_STRING PROPERTY LINK_FLAGS "${MPI_C_LINK_FLAGS}") +endif() + set_target_properties(miniapp.exe PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/miniapp" diff --git a/src/algorithms.hpp b/src/algorithms.hpp index 5d609b1e..738f163f 100644 --- a/src/algorithms.hpp +++ b/src/algorithms.hpp @@ -208,7 +208,7 @@ std::vector<typename C::value_type> expand_branches(const C& branch_index) std::vector<typename C::value_type> expanded(branch_index.back()); for (std::size_t i = 0; i < branch_index.size()-1; ++i) { - for (std::size_t j = branch_index[i]; j < branch_index[i+1]; ++j) { + for (auto j = branch_index[i]; j < branch_index[i+1]; ++j) { expanded[j] = i; } } -- GitLab