From 2c336a4d74461b9ff3a65bfcc630a3f9449894af Mon Sep 17 00:00:00 2001 From: Grzegorz Kowal Date: Tue, 7 Dec 2021 10:37:56 -0300 Subject: [PATCH] CMAKE, MAKE: Add support for OpenMP. Signed-off-by: Grzegorz Kowal --- CMakeLists.txt | 10 ++++++++++ build/hosts/default | 12 ++++++++++++ build/make.default | 2 ++ sources/amun.F90 | 15 ++++++++++++++- 4 files changed, 38 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ddf8ada..0f1d8e4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,6 +64,16 @@ if(ENABLE_MPI) endif() endif() +option(ENABLE_OMP "Enable OpenMP support" ON) +if(ENABLE_OMP) + find_package(OpenMP COMPONENTS Fortran) + if(OpenMP_Fortran_FOUND) + include_directories(${OpenMP_Fortran_INCLUDE_DIRS}) + target_compile_options(amun.x PRIVATE "${OpenMP_Fortran_FLAGS}") + target_link_libraries(amun.x ${OpenMP_Fortran_LIBRARIES}) + endif() +endif() + option(ENABLE_SIGNALS "Enables signal handler support" ON) if(ENABLE_SIGNALS) target_compile_definitions(amun.x PRIVATE SIGNALS) diff --git a/build/hosts/default b/build/hosts/default index 173dde3..a296ebe 100644 --- a/build/hosts/default +++ b/build/hosts/default @@ -27,6 +27,9 @@ FFLAGS = -Og -g -DDEBUG -fcheck=all else FFLAGS = -O2 -march=native -pipe endif +ifeq ($(OPENMP),Y) +FFLAGS += -fopenmp +endif LDFLAGS = $(FFLAGS) ifeq ($(STATIC),Y) LDFLAGS += -static @@ -56,6 +59,9 @@ FFLAGS = -O0 -g -Mbounds -Mchkptr -Mcache_align -Mnovintr -Mchkstk -DDEBUG else FFLAGS = -fast -O3 endif +ifeq ($(OPENMP),Y) +FFLAGS += -mp +endif LDFLAGS = $(FFLAGS) ifeq ($(STATIC),Y) LDFLAGS += -Bstatic @@ -85,6 +91,9 @@ FFLAGS = -O -g -DDEBUG else FFLAGS = -fast endif +ifeq ($(OPENMP),Y) +FFLAGS += -mp +endif LDFLAGS = $(FFLAGS) ifeq ($(STATIC),Y) LDFLAGS += -Bstatic @@ -114,6 +123,9 @@ FFLAGS = -O -g -DDEBUG else FFLAGS = -O2 -xHost endif +ifeq ($(OPENMP),Y) +FFLAGS += -openmp +endif LDFLAGS = $(FFLAGS) ifeq ($(STATIC),Y) LDFLAGS += -static diff --git a/build/make.default b/build/make.default index 3bd5019..94fc1a5 100644 --- a/build/make.default +++ b/build/make.default @@ -15,8 +15,10 @@ SIGNALS = N # parallelization flags: # # MPI - enable or disable MPI parallelization +# OPENMP - enable or disable OpenMP parallelization # MPI = N +OPENMP = N # output data format: # diff --git a/sources/amun.F90 b/sources/amun.F90 index b51c864..725714e 100644 --- a/sources/amun.F90 +++ b/sources/amun.F90 @@ -65,6 +65,11 @@ program amun integer :: iin, iev, itm integer :: ed, eh, em, es +! OpenMP +! + integer :: nthreads = 1 +!$ integer :: omp_get_num_threads + ! the format string ! character(len=80) :: sfmt @@ -131,8 +136,16 @@ program amun call print_welcome(verbose) #ifdef MPI call print_section(verbose, "Parallelization") - call print_parameter(verbose, "MPI processes", nprocs) + call print_parameter(verbose, "MPI processes" , nprocs) +#else /* MPI */ +!$ call print_section(verbose, "Parallelization") #endif /* MPI */ +!$omp parallel +!$omp master +!$ nthreads = omp_get_num_threads() +!$ call print_parameter(verbose, "OpenMP threads", nthreads) +!$omp end master +!$omp end parallel ! read parameters !