Skip to content
Snippets Groups Projects
Commit c3ad1c68 authored by Sam Yates's avatar Sam Yates
Browse files

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
parent 1c1cd64f
No related branches found
No related tags found
No related merge requests found
...@@ -20,13 +20,22 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) ...@@ -20,13 +20,22 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
# TBB support # TBB support
set( WITH_TBB "OFF" CACHE BOOL "use TBB for on-node threading" ) set(WITH_TBB "ON" CACHE BOOL "use TBB for on-node threading")
if( "${WITH_TBB}" STREQUAL "ON" ) if("${WITH_TBB}" STREQUAL "ON")
find_package(TBB REQUIRED) find_package(TBB REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWITH_TBB ${TBB_DEFINITIONS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWITH_TBB ${TBB_DEFINITIONS}")
link_directories(${TBB_LIBRARY})
endif() 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 # targets for extermal dependencies
include(ExternalProject) include(ExternalProject)
......
...@@ -11,6 +11,11 @@ add_executable(miniapp.exe ${MINIAPP_SOURCES} ${HEADERS}) ...@@ -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 cellalgo)
target_link_libraries(miniapp.exe LINK_PUBLIC ${TBB_LIBRARIES}) 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 set_target_properties(miniapp.exe
PROPERTIES PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/miniapp" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/miniapp"
......
...@@ -208,7 +208,7 @@ std::vector<typename C::value_type> expand_branches(const C& branch_index) ...@@ -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()); 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 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; expanded[j] = i;
} }
} }
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment