From 026a9410906f6bceff395c26dc32abf640e57ba8 Mon Sep 17 00:00:00 2001 From: Michael Kuron <mkuron@icp.uni-stuttgart.de> Date: Fri, 6 Apr 2018 17:14:24 +0200 Subject: [PATCH] Intel 2018 OpenMP support and fix for -qopenmp in 2015 and higher Also adds OpenMP support for macOS (requires Xcode 7.0, CMake 3.12 and separate libomp from MacPorts/Homebrew) --- CMakeLists.txt | 24 ++++++------------------ src/core/Abort.cpp | 2 +- src/core/math/Random.cpp | 2 +- src/core/math/Random.h | 10 +++++----- 4 files changed, 13 insertions(+), 25 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 85125dcaf..a48d27e4b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1027,26 +1027,14 @@ endif() option ( WALBERLA_THREAD_SAFE_LOGGING "Enables/Disables thread-safe logging" ON ) if ( WALBERLA_BUILD_WITH_OPENMP ) - if ( WALBERLA_CXX_COMPILER_IS_INTEL ) - add_flag ( CMAKE_C_FLAGS "-openmp" ) - add_flag ( CMAKE_CXX_FLAGS "-openmp" ) - elseif ( CMAKE_COMPILER_IS_GNUCXX ) - add_flag ( CMAKE_C_FLAGS "-fopenmp" ) - add_flag ( CMAKE_CXX_FLAGS "-fopenmp" ) - elseif ( WALBERLA_CXX_COMPILER_IS_CLANG ) - add_flag ( CMAKE_C_FLAGS "-fopenmp" ) - add_flag ( CMAKE_CXX_FLAGS "-fopenmp" ) - elseif ( WALBERLA_CXX_COMPILER_IS_MSVC ) - add_flag ( CMAKE_C_FLAGS "/openmp" ) - add_flag ( CMAKE_CXX_FLAGS "/openmp" ) - elseif ( WALBERLA_CXX_COMPILER_IS_IBM ) - add_flag ( CMAKE_C_FLAGS "-qsmp=omp" ) - add_flag ( CMAKE_CXX_FLAGS "-qsmp=omp" ) - # There has been an internal compiler error with the IBM compiler, so WALBERLA_THREAD_SAFE_LOGGING is disabled by default for this compiler - set ( WALBERLA_THREAD_SAFE_LOGGING OFF CACHE BOOL "Enables/Disables thread-safe logging" FORCE ) - elseif ( WALBERLA_CXX_COMPILER_IS_NEC ) + if ( WALBERLA_CXX_COMPILER_IS_NEC ) add_flag ( CMAKE_C_FLAGS "-Popenmp" ) add_flag ( CMAKE_CXX_FLAGS "-Popenmp" ) + else() + find_package( OpenMP ) + add_flag ( CMAKE_C_FLAGS "${OpenMP_C_FLAGS}" ) + add_flag ( CMAKE_CXX_FLAGS "${OpenMP_CXX_FLAGS}" ) + list ( APPEND SERVICE_LIBS ${OpenMP_CXX_LIBRARIES} ) endif() else() if ( WALBERLA_CXX_COMPILER_IS_CRAY ) diff --git a/src/core/Abort.cpp b/src/core/Abort.cpp index 910dcb209..1ff3ad2cb 100644 --- a/src/core/Abort.cpp +++ b/src/core/Abort.cpp @@ -63,7 +63,7 @@ void Abort::defaultAbort( const std::string & logMessage, const std::string & ca #ifdef _OPENMP - #pragma omp critical (abort) + #pragma omp critical (Abort_abort) { #endif diff --git a/src/core/math/Random.cpp b/src/core/math/Random.cpp index 72707f208..5acdc01d3 100644 --- a/src/core/math/Random.cpp +++ b/src/core/math/Random.cpp @@ -43,7 +43,7 @@ std::mt19937 & getGenerator() // std::mt19937_64 void seedRandomGenerator( const std::mt19937::result_type & seed ) { #ifdef _OPENMP - #pragma omp critical (random) + #pragma omp critical (Random_random) #endif internal::getGenerator().seed( seed ); } diff --git a/src/core/math/Random.h b/src/core/math/Random.h index ec61aa51d..d63d2e7ed 100644 --- a/src/core/math/Random.h +++ b/src/core/math/Random.h @@ -59,7 +59,7 @@ INT intRandom( const INT min, const INT max, std::mt19937 & generator ) INT value; #ifdef _OPENMP - #pragma omp critical (random) + #pragma omp critical (Random_random) #endif { value = distribution( generator ); } @@ -76,7 +76,7 @@ inline char intRandom<char>( const char min, const char max, std::mt19937 & gene char value; #ifdef _OPENMP - #pragma omp critical (random) + #pragma omp critical (Random_random) #endif { value = static_cast<char>( distribution( generator ) ); } @@ -93,7 +93,7 @@ inline unsigned char intRandom<unsigned char>( const unsigned char min, const un unsigned char value; #ifdef _OPENMP - #pragma omp critical (random) + #pragma omp critical (Random_random) #endif { value = static_cast<unsigned char>( distribution( generator ) ); } @@ -110,7 +110,7 @@ inline signed char intRandom<signed char>( const signed char min, const signed c signed char value; #ifdef _OPENMP - #pragma omp critical (random) + #pragma omp critical (Random_random) #endif { value = static_cast<signed char>( distribution( generator ) ); } @@ -168,7 +168,7 @@ REAL realRandom( const REAL min = REAL(0), const REAL max = REAL(1), std::mt1993 REAL value; #ifdef _OPENMP - #pragma omp critical (random) + #pragma omp critical (Random_random) #endif { value = distribution( generator ); } -- GitLab