Skip to content
Snippets Groups Projects
Commit 83ca807f authored by Wautelet Philippe's avatar Wautelet Philippe
Browse files

Philippe 26/10/2021: OpenACC: add stats of use of flat memory pool

parent ec4e947a
No related branches found
No related tags found
No related merge requests found
......@@ -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()
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment