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