aboutsummaryrefslogtreecommitdiff
path: root/Carpet/CarpetLib/src/timestat.cc
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@aei.mpg.de>2005-01-01 17:14:00 +0000
committerErik Schnetter <schnetter@aei.mpg.de>2005-01-01 17:14:00 +0000
commit049cec8e042a508511fdb0f0948de63f84f9b8be (patch)
tree6e97657e7b8f46ca38382cdccf678df6362dfaa5 /Carpet/CarpetLib/src/timestat.cc
parent6561ae56dd8805af9a45b9d5af972e71ac29bd4d (diff)
CarpetLib: Move class timestat into its own file
darcs-hash:20050101171429-891bb-130630de8631b8f9bbe494e135662ffb089ecca0.gz
Diffstat (limited to 'Carpet/CarpetLib/src/timestat.cc')
-rw-r--r--Carpet/CarpetLib/src/timestat.cc120
1 files changed, 120 insertions, 0 deletions
diff --git a/Carpet/CarpetLib/src/timestat.cc b/Carpet/CarpetLib/src/timestat.cc
new file mode 100644
index 000000000..0c43c6ed3
--- /dev/null
+++ b/Carpet/CarpetLib/src/timestat.cc
@@ -0,0 +1,120 @@
+#include <algorithm>
+#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_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_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;
+ }
+}