Branch data Line data Source code
1 : : #ifndef CPUTIMER_HPP
2 : : #define CPUTIMER_HPP
3 : :
4 : : #include "moab/MOABConfig.h"
5 : : #ifdef MOAB_HAVE_MPI
6 : : #include "moab_mpi.h"
7 : : #endif
8 : :
9 : : #include <ctime>
10 : :
11 : : namespace moab
12 : : {
13 : :
14 : : class CpuTimer
15 : : {
16 : : private:
17 : : #ifdef MOAB_HAVE_MPI
18 : : int mpi_initialized;
19 : : #endif
20 : : double tAtBirth, tAtLast;
21 : : double runtime();
22 : :
23 : : public:
24 : 636 : CpuTimer()
25 : : #ifdef MOAB_HAVE_MPI
26 : 636 : : mpi_initialized( 0 )
27 : : #endif
28 : : {
29 : : #ifdef MOAB_HAVE_MPI
30 : 636 : int flag = 0;
31 [ + - ][ + - ]: 636 : if( MPI_SUCCESS == MPI_Initialized( &flag ) && flag ) { mpi_initialized = 1; }
[ + + ][ + + ]
32 : : #endif
33 [ + - ]: 636 : tAtBirth = runtime();
34 : 636 : tAtLast = tAtBirth;
35 : 636 : }
36 : 39 : double time_since_birth()
37 : : {
38 : 39 : return ( tAtLast = runtime() ) - tAtBirth;
39 : : };
40 : 940 : double time_elapsed()
41 : : {
42 : 940 : double tmp = tAtLast;
43 : 940 : return ( tAtLast = runtime() ) - tmp;
44 : : }
45 : : };
46 : :
47 : 1615 : inline double CpuTimer::runtime()
48 : : {
49 : : #ifdef MOAB_HAVE_MPI
50 [ + + ]: 1615 : if( mpi_initialized )
51 : 1078 : return MPI_Wtime();
52 : : else
53 : 537 : return (double)clock() / CLOCKS_PER_SEC;
54 : : #else
55 : : return (double)clock() / CLOCKS_PER_SEC;
56 : : #endif
57 : : }
58 : : } // namespace moab
59 : :
60 : : #endif
|