xref: /phasta/phSolver/common/memoryusage.c (revision 1e99f302ca5103688ae35115c2fefb7cfa6714f1)
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 
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 
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