13 INTEGER(KIND=JPIM),
INTENT(IN) :: KOUT
14 CHARACTER(LEN=*),
INTENT(IN) :: CDLABEL
15 INTEGER(KIND=JPIM) :: I, IMYPROC, INPROC, IRET, IOFFSET, II
16 INTEGER(KIND=JPIM),
PARAMETER :: JP_NPROFILE = 9
17 INTEGER(KIND=JPIM),
PARAMETER :: ISIZE = jp_nprofile+1
18 INTEGER(KIND=JPIB) ILIMIT(isize)
19 INTEGER(KIND=JPIB) ICNT(isize)
20 REAL(KIND=JPRB),
ALLOCATABLE :: ZSEND(:), ZRECV(:)
21 INTEGER(KIND=JPIM),
ALLOCATABLE :: ICOUNTS(:)
22 CHARACTER(LEN=1) CLENV
23 CHARACTER(LEN=80) CLTEXT(0:4)
25 CALL get_environment_variable(
"EC_PROFILE_HEAP", clenv)
27 IF (kout >= 0 .AND. clenv /=
'0')
THEN 29 imyproc = mpl_myrank()
39 ALLOCATE(zsend(isize))
40 ALLOCATE(zrecv(isize * inproc))
41 ALLOCATE(icounts(inproc))
43 cltext(0) =
"free()/DEALLOCATE -hits per byte range" 44 cltext(1) =
"malloc()/ALLOCATE -hits per byte range" 45 cltext(2) =
"Outstanding malloc()/ALLOCATE -hits per byte range" 46 cltext(3) =
"Outstanding amount of malloc()/ALLOCATE -bytes per byte range" 47 cltext(4) =
"Average amount of outstanding malloc()/ALLOCATE -bytes per byte range" 61 CALL mpl_gatherv(zsend(:), kroot=1, krecvcounts=icounts(:), &
62 &precvbuf=zrecv, cdstring=
'GETHEAPSTAT:')
65 IF (imyproc == 1)
THEN 67 WRITE(kout,9000) trim(cltext(ii)),trim(cdlabel),
"Node", &
68 & (ilimit(i),i=1,min(jp_nprofile,9)),
"Larger" 69 9000
FORMAT(/,
"Heap Utilization Profile (",
a,
"): ",
a,&
71 &//,(a4,2x,9(:,2x,4x,
"< 10^",i1),:,2x,a10))
73 9001
FORMAT(4(
"="),2x,10(2x,10(
"="))/)
76 icnt(:) = zrecv(ioffset+1:ioffset+isize)
77 WRITE(kout,
'(i4,2x,(10(:,2x,i10)))') i,icnt(:)
78 ioffset = ioffset + isize
83 IF (imyproc == 1)
THEN 84 WRITE(kout,
'(/,a,/)')
'End of Heap Utilization Profile'
subroutine getheapstat(KOUT, CDLABEL)
void profile_heap_get(ll_t val[], const int *Nval, const int *Icase, int *nret)