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