1*0d32f9a8SKenneth E. Jansen #include <stdio.h> 2*0d32f9a8SKenneth E. Jansen #include <stdlib.h> 3*0d32f9a8SKenneth E. Jansen #include <stdint.h> 4*0d32f9a8SKenneth E. Jansen #include <mpi.h> 5*0d32f9a8SKenneth E. Jansen #ifdef __bgq__ 6*0d32f9a8SKenneth E. Jansen #include <hwi/include/bqc/A2_inlines.h> 7*0d32f9a8SKenneth E. Jansen #endif 8*0d32f9a8SKenneth E. Jansen #include "FCMangle.h" 9*0d32f9a8SKenneth E. Jansen 10*0d32f9a8SKenneth E. Jansen static uint64_t start; 11*0d32f9a8SKenneth E. Jansen static uint64_t total; 12*0d32f9a8SKenneth E. Jansen 13*0d32f9a8SKenneth E. Jansen 14*0d32f9a8SKenneth E. Jansen #define cycle_count_stop FortranCInterface_GLOBAL_(cycle_count_stop, CYCLE_COUNT_STOP) 15*0d32f9a8SKenneth E. Jansen #define cycle_count_start FortranCInterface_GLOBAL_(cycle_count_start, CYCLE_COUNT_START) 16*0d32f9a8SKenneth E. Jansen #define cycle_count_print FortranCInterface_GLOBAL_(cycle_count_print, CYCLE_COUNT_PRINT) 17*0d32f9a8SKenneth E. Jansen 18*0d32f9a8SKenneth E. Jansen void cycle_count_stop() 19*0d32f9a8SKenneth E. Jansen { 20*0d32f9a8SKenneth E. Jansen #ifdef __bgq__ 21*0d32f9a8SKenneth E. Jansen uint64_t tb = GetTimeBase(); 22*0d32f9a8SKenneth E. Jansen if(__builtin_expect(tb < start, 0)) 23*0d32f9a8SKenneth E. Jansen { 24*0d32f9a8SKenneth E. Jansen total += tb + (UINT64_MAX-start); 25*0d32f9a8SKenneth E. Jansen } 26*0d32f9a8SKenneth E. Jansen else 27*0d32f9a8SKenneth E. Jansen { 28*0d32f9a8SKenneth E. Jansen total += tb-start; 29*0d32f9a8SKenneth E. Jansen } 30*0d32f9a8SKenneth E. Jansen #else 31*0d32f9a8SKenneth E. Jansen total = 0; //FIEX ME for non BGQ env 32*0d32f9a8SKenneth E. Jansen #endif 33*0d32f9a8SKenneth E. Jansen } 34*0d32f9a8SKenneth E. Jansen void cycle_count_start() 35*0d32f9a8SKenneth E. Jansen { 36*0d32f9a8SKenneth E. Jansen #ifdef __bgq__ 37*0d32f9a8SKenneth E. Jansen start = GetTimeBase(); 38*0d32f9a8SKenneth E. Jansen #else 39*0d32f9a8SKenneth E. Jansen start = 0; //FIEX ME for non BGQ env 40*0d32f9a8SKenneth E. Jansen #endif 41*0d32f9a8SKenneth E. Jansen } 42*0d32f9a8SKenneth E. Jansen 43*0d32f9a8SKenneth E. Jansen void cycle_count_print() 44*0d32f9a8SKenneth E. Jansen { 45*0d32f9a8SKenneth E. Jansen uint64_t iresult; 46*0d32f9a8SKenneth E. Jansen int rank; 47*0d32f9a8SKenneth E. Jansen MPI_Comm_rank(MPI_COMM_WORLD, &rank); 48*0d32f9a8SKenneth E. Jansen MPI_Allreduce(&total, &iresult, 1, MPI_LONG_LONG_INT, 49*0d32f9a8SKenneth E. Jansen MPI_MAX, MPI_COMM_WORLD); 50*0d32f9a8SKenneth E. Jansen if(rank == 0) 51*0d32f9a8SKenneth E. Jansen printf("fillsparse : %llu cycles\n", iresult); 52*0d32f9a8SKenneth E. Jansen total = 0; 53*0d32f9a8SKenneth E. Jansen } 54