aboutsummaryrefslogtreecommitdiff
path: root/Carpet/CarpetLib/src/timestat.cc
blob: 86767cff40e28a78fcaeb52e6d9bc6d2fd501639 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <algorithm>
#include <cassert>
#include <cmath>
#include <iostream>

#include <mpi.h>

#include "cctk.h"
#include "cctk_Arguments.h"
#include "cctk_Parameters.h"

#include "timestat.hh"



using namespace std;



timestat::timestat ()
  : wtime(0.0), wtime2(0.0), count(0.0),
    running(false)
{
}

void timestat::addstat (double const t)
{
  wtime += t;
  wtime2 += t*t;
  ++count;
}

void timestat::start ()
{
  assert (! running);
  running = true;
  starttime = MPI_Wtime();
}

void timestat::stop ()
{
  assert (running);
  running = false;
  double const endtime = MPI_Wtime();
  addstat (endtime - starttime);
}



ostream& operator<< (ostream& os, const timestat& wt)
{
  double const avg = wt.wtime / wt.count;
  double const stddev = sqrt(max(0.0, wt.wtime2 / wt.count - avg * avg));
  os << "timestat[seconds]:"
     << " cnt: " << wt.count
     << " sum: " << wt.wtime
     << " avg: " << avg
     << " stddev: " << stddev;
  return os;
}



timestat wtime_copyfrom_recv;
timestat wtime_copyfrom_send;
timestat wtime_copyfrom_wait;

timestat wtime_copyfrom_recv_maketyped;
timestat wtime_copyfrom_recv_allocate;
timestat wtime_copyfrom_recv_changeproc_recv;
timestat wtime_copyfrom_send_copyfrom_nocomm1;
timestat wtime_copyfrom_send_copyfrom_nocomm2;
timestat wtime_copyfrom_send_changeproc_send;
timestat wtime_copyfrom_wait_changeproc_wait;
timestat wtime_copyfrom_wait_copyfrom_nocomm;
timestat wtime_copyfrom_wait_delete;

timestat wtime_copyfrom_recvinner_allocate;
timestat wtime_copyfrom_recvinner_recv;
timestat wtime_copyfrom_sendinner_allocate;
timestat wtime_copyfrom_sendinner_copy;
timestat wtime_copyfrom_sendinner_send;
timestat wtime_copyfrom_recvwaitinner_wait;
timestat wtime_copyfrom_recvwaitinner_copy;
timestat wtime_copyfrom_recvwaitinner_delete;
timestat wtime_copyfrom_sendwaitinner_wait;
timestat wtime_copyfrom_sendwaitinner_delete;

timestat wtime_changeproc_recv;
timestat wtime_changeproc_send;
timestat wtime_changeproc_wait;

timestat wtime_irecv;
timestat wtime_isend;
timestat wtime_isendwait;
timestat wtime_irecvwait;



extern "C" void CarpetLib_printtimestats (CCTK_ARGUMENTS);

void CarpetLib_printtimestats (CCTK_ARGUMENTS)
{
  DECLARE_CCTK_ARGUMENTS;
  DECLARE_CCTK_PARAMETERS;
  if (print_timestats) {
    cout << "Timing statistics from CarpetLib:" << endl
         << "   wtime_copyfrom_recv:                  " << wtime_copyfrom_recv                  << endl
         << "   wtime_copyfrom_send:                  " << wtime_copyfrom_send                  << endl
         << "   wtime_copyfrom_wait:                  " << wtime_copyfrom_wait                  << endl
         << endl
         << "   wtime_copyfrom_recv_maketyped:        " << wtime_copyfrom_recv_maketyped        << endl   
         << "   wtime_copyfrom_recv_allocate:         " << wtime_copyfrom_recv_allocate         << endl
         << "   wtime_copyfrom_recv_changeproc_recv:  " << wtime_copyfrom_recv_changeproc_recv  << endl
         << "   wtime_copyfrom_send_copyfrom_nocomm1: " << wtime_copyfrom_send_copyfrom_nocomm1 << endl
         << "   wtime_copyfrom_send_copyfrom_nocomm2: " << wtime_copyfrom_send_copyfrom_nocomm2 << endl
         << "   wtime_copyfrom_send_changeproc_send:  " << wtime_copyfrom_send_changeproc_send  << endl
         << "   wtime_copyfrom_wait_changeproc_wait:  " << wtime_copyfrom_wait_changeproc_wait  << endl
         << "   wtime_copyfrom_wait_copyfrom_nocomm2: " << wtime_copyfrom_wait_copyfrom_nocomm  << endl
         << "   wtime_copyfrom_wait_delete:           " << wtime_copyfrom_wait_delete           << endl
         << endl
         << "   wtime_copyfrom_recvinner_allocate:    " << wtime_copyfrom_recvinner_allocate    << endl
         << "   wtime_copyfrom_recvinner_recv:        " << wtime_copyfrom_recvinner_recv        << endl
         << "   wtime_copyfrom_sendinner_allocate:    " << wtime_copyfrom_sendinner_allocate    << endl
         << "   wtime_copyfrom_sendinner_copy:        " << wtime_copyfrom_sendinner_copy        << endl
         << "   wtime_copyfrom_sendinner_send:        " << wtime_copyfrom_sendinner_send        << endl
         << "   wtime_copyfrom_recvwaitinner_wait:    " << wtime_copyfrom_recvwaitinner_wait    << endl
         << "   wtime_copyfrom_recvwaitinner_copy:    " << wtime_copyfrom_recvwaitinner_copy    << endl
         << "   wtime_copyfrom_recvwaitinner_delete:  " << wtime_copyfrom_recvwaitinner_delete  << endl
         << "   wtime_copyfrom_sendwaitinner_wait:    " << wtime_copyfrom_sendwaitinner_wait    << endl
         << "   wtime_copyfrom_sendwaitinner_delete:  " << wtime_copyfrom_sendwaitinner_delete  << endl
         << endl
         << "   wtime_changeproc_recv:                " << wtime_changeproc_recv                << endl
         << "   wtime_changeproc_send:                " << wtime_changeproc_send                << endl
         << "   wtime_changeproc_wait:                " << wtime_changeproc_wait                << endl
         << endl
         << "   wtime_irecv:                          " << wtime_irecv                          << endl
         << "   wtime_isend:                          " << wtime_isend                          << endl
         << "   wtime_isendwait:                      " << wtime_isendwait                      << endl
         << "   wtime_irecvwait:                      " << wtime_irecvwait                      << endl
         << endl;
  }
}