From 83ca807f36c4a8241f4c431dc4a83aea54dd0007 Mon Sep 17 00:00:00 2001 From: Wautelet Philippe <waup@aeropc45.aero.obs-mip.fr> Date: Tue, 26 Oct 2021 09:26:33 +0200 Subject: [PATCH] Philippe 26/10/2021: OpenACC: add stats of use of flat memory pool --- src/MNH/finalize_mnh.f90 | 7 +++++ src/MNH/mode_mnh_zwork.f90 | 52 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/src/MNH/finalize_mnh.f90 b/src/MNH/finalize_mnh.f90 index faabb9972..14022cdae 100644 --- a/src/MNH/finalize_mnh.f90 +++ b/src/MNH/finalize_mnh.f90 @@ -27,6 +27,9 @@ SUBROUTINE FINALIZE_MNH USE MODE_INIT_ll, only: END_PARA_ll USE MODE_IO_FILE, only: IO_File_close USE MODE_IO_MANAGE_STRUCT, only: IO_Filelist_print +#ifdef MNH_OPENACC + USE MODE_MNH_ZWORK, only: PRINT_FLATPOOL_STATS +#endif USE MODE_MPPDB, only: MPPDB_BARRIER USE MODE_MSG, only: MSG_STATS @@ -42,6 +45,10 @@ SUBROUTINE FINALIZE_MNH !Print the list of all files and some statistics on them IF ( NIO_VERB >= NVERB_DEBUG ) CALL IO_Filelist_print() +#ifdef MNH_OPENACC + CALL PRINT_FLATPOOL_STATS() +#endif + !Print the number of printed messages via Print_msg CALL MSG_STATS() diff --git a/src/MNH/mode_mnh_zwork.f90 b/src/MNH/mode_mnh_zwork.f90 index 6c9d5d374..423c55e2c 100644 --- a/src/MNH/mode_mnh_zwork.f90 +++ b/src/MNH/mode_mnh_zwork.f90 @@ -76,6 +76,7 @@ MODULE MODE_MNH_ZWORK INTEGER,SAVE , ALLOCATABLE, TARGET , DIMENSION(:) :: IT1D_OSIZE +!------ Real 1DFLAT pool INTEGER, PARAMETER :: JPMAX_T1DFLAT_R = 10 !Used to determine max size of buffer ZT1DFLAT !(3D size of the mesh * JPMAX_T1DFLAT_R) INTEGER, PARAMETER :: JPPOOLSTEP_FLAT = 10 !Number of elements added to the pool when too small @@ -87,6 +88,16 @@ MODULE MODE_MNH_ZWORK INTEGER(KIND=MNHINT64), SAVE :: NT1DFLAT_POS_R, NT1DFLAT_POS_R_MAX = 0 !Position in the array REAL, SAVE, ALLOCATABLE, TARGET, DIMENSION(:) :: ZT1DFLAT + INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NCALL_MNH_GET_ZT1DFLAT = 0 + INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NCALL_MNH_REL_ZT1DFLAT = 0 + INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NCALL_MNH_ALLOCATE_ZT1DFLAT = 0 + INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NCALL_MNH_ALLOCATE_ZT3DFLAT = 0 + INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NTOT_GETSIZE_ZT1DFLAT = 0 !Sum of all requested sizes in MNH_REL_ZT1DFLAT + INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NTOT_RELSIZE_ZT3DFLAT = 0 !Sum of all released sizes in MNH_REL_ZT1DFLAT + INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NTOT_ALLOCSIZE_ZT1DFLAT = 0 !Sum of all requested sizes in MNH_ALLOCATE_ZT1DFLAT + INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NTOT_ALLOCSIZE_ZT3DFLAT = 0 !Sum of all requested sizes in MNH_ALLOCATE_ZT3DFLAT + + INTERFACE MNH_ALLOCATE_FLAT MODULE PROCEDURE :: MNH_ALLOCATE_ZT1DFLAT_INT32 MODULE PROCEDURE :: MNH_ALLOCATE_ZT1DFLAT_INT64 @@ -1001,6 +1012,9 @@ CONTAINS INTEGER(KIND=MNHINT64), ALLOCATABLE, DIMENSION (:) :: IT1DFLAT_POOL_R INTEGER(KIND=MNHINT64), ALLOCATABLE, DIMENSION (:) :: IT1DFLAT_SIZE_R + NCALL_MNH_GET_ZT1DFLAT = NCALL_MNH_GET_ZT1DFLAT + 1 + NTOT_GETSIZE_ZT1DFLAT = NTOT_GETSIZE_ZT1DFLAT + KSIZE + IF ( NT1DFLAT_POS_R + KSIZE > NT1DFLAT_MAXSIZE ) THEN WRITE( YSIZE, '( I0 )' ) KSIZE WRITE( YAVAIL, '( I0 )' ) NT1DFLAT_MAXSIZE - NT1DFLAT_POS_R @@ -1051,10 +1065,14 @@ CONTAINS INTEGER :: KINDEX + NCALL_MNH_REL_ZT1DFLAT = NCALL_MNH_REL_ZT1DFLAT + 1 + !Release only if last block IF ( KINDEX /= NT1DFLAT_TOP_R ) & call Print_msg( NVERB_FATAL, 'GEN', 'MNH_REL_ZT1DFLAT', 'trying to release block that is not the last one' ) + NTOT_RELSIZE_ZT3DFLAT = NTOT_RELSIZE_ZT3DFLAT + NT1DFLAT_SIZE_R( KINDEX ) + NT1DFLAT_TOP_R = NT1DFLAT_TOP_R - 1 NT1DFLAT_POS_R = NT1DFLAT_POS_R - NT1DFLAT_SIZE_R( KINDEX ) @@ -1081,6 +1099,9 @@ CONTAINS INTEGER(KIND=MNHINT64), INTENT(IN) :: KSIZE INTEGER :: KINDEX + NCALL_MNH_ALLOCATE_ZT1DFLAT = NCALL_MNH_ALLOCATE_ZT1DFLAT + 1 + NTOT_ALLOCSIZE_ZT1DFLAT = NTOT_ALLOCSIZE_ZT1DFLAT + KSIZE + kindex = MNH_Get_zt1dflat( ksize ) ptab(1:KSIZE) => zt1dflat( NT1DFLAT_POOL_R(kindex) : NT1DFLAT_POOL_R(kindex)+ksize-1 ) @@ -1101,6 +1122,8 @@ CONTAINS INTEGER(KIND=MNHINT64) :: ISIZE INTEGER(KIND=MNHINT64) :: IIB, IIE, IJB, IJE, IKB, IKE + NCALL_MNH_ALLOCATE_ZT3DFLAT = NCALL_MNH_ALLOCATE_ZT3DFLAT + 1 + IIB = KIB IIE = KIE IJB = KJB @@ -1110,15 +1133,44 @@ CONTAINS ISIZE = ( IIE - IIB + 1_MNHINT64 ) * ( IJE - IJB + 1_MNHINT64 ) * ( IIE - IIB + 1_MNHINT64 ) + NTOT_ALLOCSIZE_ZT3DFLAT = NTOT_ALLOCSIZE_ZT3DFLAT + ISIZE + kindex = MNH_Get_zt1dflat( isize ) ptab(KIB:KIE, KJB:KJE, KKB:KKE) => zt1dflat( NT1DFLAT_POOL_R(kindex) : NT1DFLAT_POOL_R(kindex)+isize-1 ) END FUNCTION MNH_ALLOCATE_ZT3DFLAT + ! End Real 1DFLAT management + SUBROUTINE PRINT_FLATPOOL_STATS() + + cmnhmsg(1) = 'Number of calls for real flat pool:' + Write( cmnhmsg(2), "( ' MNH_GET_ZT1DFLAT = ', I20 )" ) NCALL_MNH_GET_ZT1DFLAT + Write( cmnhmsg(3), "( ' MNH_REL_ZT1DFLAT = ', I20 )" ) NCALL_MNH_REL_ZT1DFLAT + Write( cmnhmsg(4), "( ' MNH_ALLOCATE_ZT1DFLAT = ', I20 )" ) NCALL_MNH_ALLOCATE_ZT1DFLAT + Write( cmnhmsg(5), "( ' MNH_ALLOCATE_ZT3DFLAT = ', I20 )" ) NCALL_MNH_ALLOCATE_ZT3DFLAT + call Print_msg( NVERB_INFO, 'GEN', 'FLAT_STATS' ) + + cmnhmsg(1) = 'Maximum sizes for real flat pool:' + Write( cmnhmsg(2), "( ' Entries (current / max used / max avail) = ', I10, '/', I10, '/', I10, & + ' (max is automatically increased if necessary)' )" ) NT1DFLAT_TOP_R, NT1DFLAT_TOP_R_MAX, NPMAX_POOL_T1DFLAT_R + Write( cmnhmsg(3), "( ' Memory (current / max used / max avail) = ', I20, '/', I20, '/', I20 )" ) & + NT1DFLAT_POS_R, NT1DFLAT_POS_R_MAX, NT1DFLAT_MAXSIZE + call Print_msg( NVERB_INFO, 'GEN', 'FLAT_STATS' ) + + cmnhmsg(1) = 'Total provided and released sizes for real flat pool (in bytes):' + Write( cmnhmsg(2), "( ' Provided = ', I20 )" ) NTOT_GETSIZE_ZT1DFLAT + Write( cmnhmsg(3), "( ' 1D = ', I20 )" ) NTOT_ALLOCSIZE_ZT1DFLAT + Write( cmnhmsg(4), "( ' 3D = ', I20 )" ) NTOT_ALLOCSIZE_ZT3DFLAT + Write( cmnhmsg(5), "( ' Released = ', I20 )" ) NTOT_RELSIZE_ZT3DFLAT + call Print_msg( NVERB_INFO, 'GEN', 'FLAT_STATS' ) + + END SUBROUTINE PRINT_FLATPOOL_STATS + + SUBROUTINE MNH_CHECK_IN_ZT3D(HSUB) IMPLICIT NONE -- GitLab