From 9a519391744b74c8fa73ef5a18e6aa96a50df821 Mon Sep 17 00:00:00 2001 From: Juan Escobar <escj@aero.obs-mip.fr> Date: Mon, 5 Mar 2018 15:31:56 +0100 Subject: [PATCH] J.Escobar 5/06/2018 : add cpp key MNH_USE_MPI_STATUSES_IGNORE for use of true MPI_STATUSES_IGNORE & bypass bug with ifort+openmpi --- src/LIB/SURCOUCHE/src/modd_mpif.f90 | 9 ++++++++- src/LIB/SURCOUCHE/src/modd_var_ll.f90 | 11 ++++++++--- src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90 | 8 +++++--- src/Rules.LXgfortran.mk | 1 + src/Rules.LXifort.mk | 4 +++- 5 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/modd_mpif.f90 b/src/LIB/SURCOUCHE/src/modd_mpif.f90 index b2d11175f..a36b3748a 100644 --- a/src/LIB/SURCOUCHE/src/modd_mpif.f90 +++ b/src/LIB/SURCOUCHE/src/modd_mpif.f90 @@ -7,7 +7,9 @@ !----------------------------------------------------------------- ! $Source$ ! $Name$ -! $Revision$ +! $Revision$ +! J.Escobar 5/06/2018 : add cpp key MNH_USE_MPI_STATUSES_IGNORE for use of true MPI_STATUSES_IGNORE +! & bypass bug with ifort+openmpi ! $Date$ !----------------------------------------------------------------- !----------------------------------------------------------------- @@ -19,5 +21,10 @@ MODULE MODD_MPIF #else IMPLICIT NONE INCLUDE 'mpif.h' +#ifdef MNH_USE_MPI_STATUSES_IGNORE + ! bypass ifort bug with use only MNH_STATUSES_IGNORE => MPI_STATUSES_IGNORE + double precision XXXXXX + equivalence ( MPI_STATUSES_IGNORE , XXXXXX ) +#endif #endif END MODULE MODD_MPIF diff --git a/src/LIB/SURCOUCHE/src/modd_var_ll.f90 b/src/LIB/SURCOUCHE/src/modd_var_ll.f90 index d78105df9..8ce4b7d18 100644 --- a/src/LIB/SURCOUCHE/src/modd_var_ll.f90 +++ b/src/LIB/SURCOUCHE/src/modd_var_ll.f90 @@ -44,11 +44,14 @@ !! ------------- ! ! Original 04/05/99 - +! Modifications +! J.Escobar 5/06/2018 : add cpp key MNH_USE_MPI_STATUSES_IGNORE for use of true MPI_STATUSES_IGNORE !------------------------------------------------------------------------------- ! USE MODD_STRUCTURE_ll - !USE MODD_MPIF, ONLY : MNH_STATUSES_IGNORE => MPI_STATUSES_IGNORE +#ifdef MNH_USE_MPI_STATUSES_IGNORE + USE MODD_MPIF, ONLY : MNH_STATUSES_IGNORE => MPI_STATUSES_IGNORE +#endif ! IMPLICIT NONE ! @@ -138,6 +141,8 @@ INTEGER,SAVE :: NZ_PROC_ll = 0 ! Number of proc to use in the Z splitting ! INTEGER, PARAMETER :: NMODULO_MSSGTAG = 10 ! - INTEGER, POINTER, DIMENSION(:,:) :: MNH_STATUSES_IGNORE +#ifndef MNH_USE_MPI_STATUSES_IGNORE + INTEGER, POINTER, DIMENSION(:,:) :: MNH_STATUSES_IGNORE +#endif ! END MODULE MODD_VAR_ll diff --git a/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90 b/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90 index d01789808..6f7b7342a 100644 --- a/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90 +++ b/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90 @@ -104,6 +104,7 @@ CONTAINS ! R. Guivarch 29/11/99 x and y splitting -> YSPLITTING ! J. Escobar 24/09/2013 : temp patch for problem of gridnesting with different SHAPE ! M.Moge 10/02/2015 construct halo extended (needed for an interpolation in SPAWNING) + ! J. Escobar 5/06/2018 : add cpp key MNH_USE_MPI_STATUSES_IGNORE for use of true MPI_STATUSES_IGNORE ! !------------------------------------------------------------------------------- ! @@ -197,10 +198,11 @@ CONTAINS MPI_PRECISION = MNH_MPI_REAL MPI_2PRECISION = MNH_MPI_2REAL ! - ! For bug with intelmpi+ilp64+i8 declare MNH_STATUSES_INGORE + ! For bug with intelmpi+ilp64+i8 declare MNH_STATUSES_IGNORE ! - ALLOCATE(MNH_STATUSES_IGNORE(MPI_STATUS_SIZE,NPROC)) - !MNH_STATUSES_IGNORE => MPI_STATUSES_IGNORE +#ifndef MNH_USE_MPI_STATUSES_IGNORE + ALLOCATE(MNH_STATUSES_IGNORE(MPI_STATUS_SIZE,NPROC*2)) +#endif ! !------------------------------------------------------------------------------- ! diff --git a/src/Rules.LXgfortran.mk b/src/Rules.LXgfortran.mk index b11b8f9fc..3f10c0ae0 100644 --- a/src/Rules.LXgfortran.mk +++ b/src/Rules.LXgfortran.mk @@ -60,6 +60,7 @@ endif FC = gfortran ifeq "$(VER_MPI)" "MPIAUTO" F90 = mpif90 +CPPFLAGS_SURCOUCHE += -DMNH_USE_MPI_STATUSES_IGNORE -DUSE_MPI else F90 = gfortran endif diff --git a/src/Rules.LXifort.mk b/src/Rules.LXifort.mk index d39475068..3bb26ea7a 100644 --- a/src/Rules.LXifort.mk +++ b/src/Rules.LXifort.mk @@ -9,7 +9,7 @@ ########################################################## #OBJDIR_PATH=/home/escj/azertyuiopqsdfghjklm/wxcvbn/azertyuiopqsdfghjklmwxcvbn # -OPT_BASE = -g -w -assume nosource_include -assume byterecl -fpe0 -ftz -fpic -traceback -fp-model precise -switch fe_inline_all_arg_copy_inout +OPT_BASE = -g -w -assume nosource_include -assume byterecl -fpe0 -ftz -fpic -traceback -fp-model precise -switch fe_inline_all_arg_copy_inout -fno-common OPT_PERF0 = -O0 OPT_PERF2 = -O2 OPT_PERF3 = -O3 -xHost @@ -74,6 +74,7 @@ export TAU_MAKEFILE?=/home/escj/PATCH/TAU/TAU-2.21.1-IFORT10-OMPI152-THREAD/x86_ LIBS += -lz else F90 = mpif90 +CPPFLAGS_SURCOUCHE += -DMNH_USE_MPI_STATUSES_IGNORE endif else ifeq "$(VER_MPI)" "MPIINTEL" @@ -83,6 +84,7 @@ export TAU_MAKEFILE?=/home/escj/PATCH/TAU/TAU-2.21.1-IFORT10-OMPI152-THREAD/x86_ LIBS += -lz else F90 = mpiifort +CPPFLAGS_SURCOUCHE += -DMNH_USE_MPI_STATUSES_IGNORE -DUSE_MPI endif ifeq "$(MNH_INT)" "8" OPT_BASE += -ilp64 -- GitLab