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
cycle_count_stop()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 }
cycle_count_start()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
cycle_count_print()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