From 2af86160211f4b2b9364bf66da7c5cf8f0be3269 Mon Sep 17 00:00:00 2001 From: Oleg Kalashev <oleg.kalashev@gmail.com> Date: Fri, 30 Dec 2022 21:45:08 +0300 Subject: [PATCH] minor fixes to recover support of multithread execution --- src/app/crbeam/CMakeLists.txt | 20 ++++++++++---------- src/app/crbeam/CRbeam.cpp | 2 +- src/lib/CMakeLists.txt | 33 ++++++++++++++++++++------------- src/lib/Utils.cpp | 9 +++++++++ src/lib/Utils.h | 2 ++ 5 files changed, 42 insertions(+), 24 deletions(-) diff --git a/src/app/crbeam/CMakeLists.txt b/src/app/crbeam/CMakeLists.txt index a16621e..66f9d7a 100644 --- a/src/app/crbeam/CMakeLists.txt +++ b/src/app/crbeam/CMakeLists.txt @@ -1,22 +1,22 @@ cmake_minimum_required (VERSION 2.6) project (CRbeam) - +# uncomment the line below for verbose output +#set(CMAKE_VERBOSE_MAKEFILE ON) add_definitions(-DUSE_GSL) include_directories ("../../lib" "../../OS/include") -#include_directories(../../external/include ../../external/OS/include) -set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG -O0 -fopenmp") -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG -O0 -fopenmp -pg") -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall -O2 -fopenmp") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp") +set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG -O0") +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG -O0 -pg") +set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall -O2") set(CMAKE_PREFIX_PATH "external") # -rdynamic flux is only supported on systems with ELF executable format IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux") - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -rdynamic") - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -rdynamic") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -rdynamic") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -rdynamic") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -rdynamic") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -rdynamic") endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") FIND_LIBRARY(C_LIBRARY c) @@ -30,7 +30,7 @@ CmdLine.h CRbeam.cpp CRbeam.h ) - +add_link_options(-fopenmp) add_executable(CRbeam ${SOURCE_FILES}) target_link_libraries(CRbeam mcray ${C_LIBRARY} ${GSL_LIBRARY} ${GSLCBLAS_LIBRARY}) diff --git a/src/app/crbeam/CRbeam.cpp b/src/app/crbeam/CRbeam.cpp index a49ed31..d30120b 100644 --- a/src/app/crbeam/CRbeam.cpp +++ b/src/app/crbeam/CRbeam.cpp @@ -45,7 +45,6 @@ #include "SteckerEBL.h" #include "CmdLine.h" #include "Stecker16Background.h" -#include <omp.h> #include <stdlib.h> #include "MathUtils.h" @@ -68,6 +67,7 @@ using namespace cors::cmdline; * the function should be provided by end user */ int user_main(int argc, char** argv) { + std::cout << "Number of available threads: " << omp_thread_count() << std::endl; CRbeam prog(argc, argv); return prog.run(); } diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index a8caa23..c45cf54 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -1,5 +1,7 @@ cmake_minimum_required (VERSION 2.6) project (mcray) +# uncomment the line below for verbose output +#set(CMAKE_VERBOSE_MAKEFILE ON) enable_language (Fortran) # FFLAGS depend on the compiler @@ -7,21 +9,24 @@ get_filename_component (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME) if (Fortran_COMPILER_NAME MATCHES "gfortran.*") # gfortran - set (CMAKE_Fortran_FLAGS "-ffixed-line-length-200 -fno-f2c") + set (CMAKE_Fortran_FLAGS "-ffixed-line-length-200 -fno-f2c -fopenmp") set (CMAKE_Fortran_FLAGS_RELEASE "-O2") set (CMAKE_Fortran_FLAGS_DEBUG "-O0 -g") elseif (Fortran_COMPILER_NAME MATCHES "ifort.*") # ifort (untested) + set (CMAKE_Fortran_FLAGS "-f77rtl -fopenmp") set (CMAKE_Fortran_FLAGS_RELEASE "-f77rtl -O2") set (CMAKE_Fortran_FLAGS_DEBUG "-f77rtl -O0 -g") elseif (Fortran_COMPILER_NAME MATCHES "g77") # g77 - set (CMAKE_Fortran_FLAGS_RELEASE "-fno-f2c -O2") - set (CMAKE_Fortran_FLAGS_DEBUG "-fno-f2c -O0 -g") + set (CMAKE_Fortran_FLAGS "-fopenmp -fno-f2c") + set (CMAKE_Fortran_FLAGS_RELEASE "-O2") + set (CMAKE_Fortran_FLAGS_DEBUG "-O0 -g") else (Fortran_COMPILER_NAME MATCHES "gfortran.*") message ("CMAKE_Fortran_COMPILER full path: " ${CMAKE_Fortran_COMPILER}) message ("Fortran compiler: " ${Fortran_COMPILER_NAME}) - message ("No optimized Fortran compiler flags are known, we just try -O2...") + message ("No optimized Fortran compiler flags are known, we just try -O2 -fopenmp...") + set (CMAKE_Fortran_FLAGS "-fopenmp") set (CMAKE_Fortran_FLAGS_RELEASE "-O2") set (CMAKE_Fortran_FLAGS_DEBUG "-O0 -g") endif (Fortran_COMPILER_NAME MATCHES "gfortran.*") @@ -30,17 +35,18 @@ endif (Fortran_COMPILER_NAME MATCHES "gfortran.*") add_definitions(-DUSE_GSL) include_directories(../OS/include ../external) -set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG -O0 -fopenmp") -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG -O0 -fopenmp -pg") -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall -O2 -fopenmp") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp") +set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG -O0") +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG -O0 -pg") +set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall -O2") set(CMAKE_PREFIX_PATH "../external") # -rdynamic flux is only supported on systems with ELF executable format IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux") - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -rdynamic") - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -rdynamic") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -rdynamic") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -rdynamic") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -rdynamic") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -rdynamic") + endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") FIND_LIBRARY(C_LIBRARY c) @@ -122,10 +128,11 @@ Stecker16Background.h Logger.cpp Logger.h) +add_link_options(-fopenmp) add_library(mcray ${SOURCE_FILES}) add_executable(mcray_test ExampleUserMain.cpp) add_executable(z2t z2t.cpp) -target_link_libraries(mcray gfortran gomp ${OMP_LIBRARY} ${C_LIBRARY} ${GSL_LIBRARY} ${GSLCBLAS_LIBRARY}) + +target_link_libraries(mcray gfortran ${C_LIBRARY} ${GSL_LIBRARY} ${GSLCBLAS_LIBRARY}) target_link_libraries(mcray_test mcray) target_link_libraries(z2t mcray) - diff --git a/src/lib/Utils.cpp b/src/lib/Utils.cpp index 3d3f0dd..79b1574 100644 --- a/src/lib/Utils.cpp +++ b/src/lib/Utils.cpp @@ -27,6 +27,15 @@ #include "Utils.h" +#include <omp.h> +namespace Utils { + int omp_thread_count() { + int n = 0; +#pragma omp parallel reduction(+:n) + n += 1; + return n; + } +} // end of namespace Utils diff --git a/src/lib/Utils.h b/src/lib/Utils.h index 3e8651a..45c47a1 100644 --- a/src/lib/Utils.h +++ b/src/lib/Utils.h @@ -228,6 +228,8 @@ private: T* iPointee; }; +int omp_thread_count(); + }//end of namespace Utils #endif /* UTILS_H */ -- GitLab