diff options
Diffstat (limited to 'Carpet/CarpetLib/src/timestat.cc')
-rw-r--r-- | Carpet/CarpetLib/src/timestat.cc | 120 |
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; + } +} |