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