xref: /phasta/phSolver/common/memoryusage.c (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen /* #include <stdio.h> */
2*59599516SKenneth E. Jansen #include <FCMangle.h>
3*59599516SKenneth E. Jansen #include "memoryusage.h"
4*59599516SKenneth E. Jansen #include "common_c.h"
5*59599516SKenneth E. Jansen #include "mpi.h"
6*59599516SKenneth E. Jansen 
7*59599516SKenneth E. Jansen #ifdef __bgp__  // For Intrepid/Challenger
8*59599516SKenneth E. Jansen #include <spi/kernel_interface.h>
9*59599516SKenneth E. Jansen #elif __bgq__  // For Mira/Cetus
10*59599516SKenneth E. Jansen #include <spi/include/kernel/memory.h>
11*59599516SKenneth E. Jansen #endif
12*59599516SKenneth E. Jansen 
13*59599516SKenneth E. Jansen 
initmemstat(void)14*59599516SKenneth E. Jansen void initmemstat( void) {
15*59599516SKenneth E. Jansen 
16*59599516SKenneth E. Jansen   memstats.rheap = 0.0;
17*59599516SKenneth E. Jansen   memstats.rheapavail = 0.0;
18*59599516SKenneth E. Jansen   memstats.rstack = 0.0;
19*59599516SKenneth E. Jansen   memstats.rstackavail = 0.0;
20*59599516SKenneth E. Jansen   memstats.rshared = 0.0;
21*59599516SKenneth E. Jansen   memstats.rpersist = 0.0;
22*59599516SKenneth E. Jansen   memstats.rguard = 0.0;
23*59599516SKenneth E. Jansen   memstats.rmmap = 0.0;
24*59599516SKenneth E. Jansen 
25*59599516SKenneth E. Jansen }
26*59599516SKenneth E. Jansen 
printmeminfo(const char * msg)27*59599516SKenneth E. Jansen void printmeminfo( const char *msg) {
28*59599516SKenneth E. Jansen 
29*59599516SKenneth E. Jansen 
30*59599516SKenneth E. Jansen #ifdef __bgp__
31*59599516SKenneth E. Jansen     unsigned int heapnew, heapavailnew, stacknew, stackavailnew;
32*59599516SKenneth E. Jansen //    unsigned int sharednew, persistnew, guardnew, mmapnew;
33*59599516SKenneth E. Jansen #elif __bgq__
34*59599516SKenneth E. Jansen     uint64_t heapnew, heapavailnew, stacknew, stackavailnew;
35*59599516SKenneth E. Jansen //    uint64_t sharednew, persistnew, guardnew, mmapnew;
36*59599516SKenneth E. Jansen #endif
37*59599516SKenneth E. Jansen 
38*59599516SKenneth E. Jansen 
39*59599516SKenneth E. Jansen 
40*59599516SKenneth E. Jansen #ifdef __bgp__
41*59599516SKenneth E. Jansen // copy the same lines
42*59599516SKenneth E. Jansen #elif __bgq__
43*59599516SKenneth E. Jansen 
44*59599516SKenneth E. Jansen   // Print info for the following ranks
45*59599516SKenneth E. Jansen   if (workfc.myrank == 0 || workfc.myrank == (workfc.numpe/2) || workfc.myrank == (workfc.numpe-1) ) {
46*59599516SKenneth E. Jansen   //for (int irank=0 ; irank<workfc.numpe ; irank++){
47*59599516SKenneth E. Jansen   // if(irank == workfc.myrank) {
48*59599516SKenneth E. Jansen 
49*59599516SKenneth E. Jansen     Kernel_GetMemorySize( KERNEL_MEMSIZE_HEAP, &heapnew);
50*59599516SKenneth E. Jansen     Kernel_GetMemorySize( KERNEL_MEMSIZE_HEAPAVAIL, &heapavailnew);
51*59599516SKenneth E. Jansen     Kernel_GetMemorySize( KERNEL_MEMSIZE_STACK, &stacknew);
52*59599516SKenneth E. Jansen     Kernel_GetMemorySize( KERNEL_MEMSIZE_STACKAVAIL, &stackavailnew);
53*59599516SKenneth E. Jansen 
54*59599516SKenneth E. Jansen     double rheapnew, rheapavailnew, rstacknew, rstackavailnew;
55*59599516SKenneth E. Jansen     rheapnew = (double) heapnew*inv1024sq;
56*59599516SKenneth E. Jansen     rheapavailnew = (double) heapavailnew*inv1024sq;
57*59599516SKenneth E. Jansen     rstacknew = (double) stacknew*inv1024sq;
58*59599516SKenneth E. Jansen     rstackavailnew = (double) stackavailnew*inv1024sq;
59*59599516SKenneth E. Jansen 
60*59599516SKenneth E. Jansen     double rdiffheap, rdiffheapavail, rdiffstack, rdiffstackavail;
61*59599516SKenneth E. Jansen     rdiffheap = rheapnew - memstats.rheap;
62*59599516SKenneth E. Jansen     rdiffheapavail = rheapavailnew - memstats.rheapavail;
63*59599516SKenneth E. Jansen     rdiffstack = rstacknew - memstats.rstack;
64*59599516SKenneth E. Jansen     rdiffstackavail = rstackavailnew - memstats.rstackavail;
65*59599516SKenneth E. Jansen 
66*59599516SKenneth E. Jansen     printf("MEM %s (rank %d ): allocated heap: %6.2f MB ( %6.2f MB), avail. heap: %6.2f MB (%6.2f MB), allocated stack: %6.2f MB ( %6.2f MB), avail. stack: %6.2f MB ( %6.2f MB),\n",
67*59599516SKenneth E. Jansen                 msg, workfc.myrank, rheapnew, rdiffheap, rheapavailnew, rdiffheapavail, rstacknew, rdiffstack, rstackavailnew, rdiffstackavail );
68*59599516SKenneth E. Jansen 
69*59599516SKenneth E. Jansen     memstats.rheap = rheapnew;
70*59599516SKenneth E. Jansen     memstats.rheapavail = rheapavailnew;
71*59599516SKenneth E. Jansen     memstats.rstack = rstacknew;
72*59599516SKenneth E. Jansen     memstats.rstackavail = rstackavailnew ;
73*59599516SKenneth E. Jansen 
74*59599516SKenneth E. Jansen /*
75*59599516SKenneth E. Jansen     Kernel_GetMemorySize( KERNEL_MEMSIZE_SHARED, &sharednew);
76*59599516SKenneth E. Jansen     Kernel_GetMemorySize( KERNEL_MEMSIZE_PERSIST, &persistnew);
77*59599516SKenneth E. Jansen     Kernel_GetMemorySize( KERNEL_MEMSIZE_GUARD, &guardnew);
78*59599516SKenneth E. Jansen     Kernel_GetMemorySize( KERNEL_MEMSIZE_MMAP, &mmapnew);
79*59599516SKenneth E. Jansen 
80*59599516SKenneth E. Jansen     double rsharednew, rpersistnew, rguardnew, rmmapnew;
81*59599516SKenneth E. Jansen     rsharednew = (double) sharednew*inv1024sq;
82*59599516SKenneth E. Jansen     rpersistnew = (double) persistnew*inv1024sq;
83*59599516SKenneth E. Jansen     rguardnew = (double) guardnew*inv1024sq;
84*59599516SKenneth E. Jansen     rmmapnew = (double) mmapnew*inv1024sq;
85*59599516SKenneth E. Jansen 
86*59599516SKenneth E. Jansen     double  rdiffshared, rdiffpersist, rdiffguard, rdiffmmap;
87*59599516SKenneth E. Jansen     rdiffshared = rsharednew - memstats.rshared;
88*59599516SKenneth E. Jansen     rdiffpersist = rpersistnew - memstats.rpersist;
89*59599516SKenneth E. Jansen     rdiffguard = rguardnew - memstats.rguard;
90*59599516SKenneth E. Jansen     rdiffmmap = rmmapnew - memstats.rmmap;
91*59599516SKenneth E. Jansen 
92*59599516SKenneth E. Jansen     printf("MEM %s (rank %d ): allocated heap: %6.2f MB ( %6.2f MB), avail. heap: %6.2f MB (%6.2f MB)\n",msg, workfc.myrank, rheapnew, rdiffheap, rheapavailnew, rdiffheapavail );
93*59599516SKenneth E. Jansen     printf("MEM %s (rank %d ): shared: %6.2f MB, persist.: %6.2f MB ( %6.2f MB), guard: %6.2f MB ( %6.2f MB), mmap: %6.2f MB ( %6.2f MB) \n", msg, workfc.myrank, rsharednew, rdiffshared,
94*59599516SKenneth E. Jansen           rpersistnew, rdiffpersist, rguardnew, rdiffguard, rmmapnew, rdiffmmap);
95*59599516SKenneth E. Jansen 
96*59599516SKenneth E. Jansen     memstats.rshared = rsharednew;
97*59599516SKenneth E. Jansen     memstats.rpersist = rpersistnew;
98*59599516SKenneth E. Jansen     memstats.rguard = rguardnew;
99*59599516SKenneth E. Jansen     memstats.rmmap = rmmapnew;
100*59599516SKenneth E. Jansen */
101*59599516SKenneth E. Jansen 
102*59599516SKenneth E. Jansen //   } // if irank == myrank
103*59599516SKenneth E. Jansen //   MPI_Barrier(MPI_COMM_WORLD);
104*59599516SKenneth E. Jansen //  } // for irank=1 -> numpe
105*59599516SKenneth E. Jansen 
106*59599516SKenneth E. Jansen   } // if irank == chosen ranks
107*59599516SKenneth E. Jansen 
108*59599516SKenneth E. Jansen #endif
109*59599516SKenneth E. Jansen 
110*59599516SKenneth E. Jansen }
111*59599516SKenneth E. Jansen 
112