11 { m_timeStart = ttime(); }
16 virtual double timerEnd (void)
19 m_timeElapsed = m_timeEnd - m_timeStart;
21 return (m_timeElapsed);
24 virtual void timerReport (const char* const msg) const
26 cout << msg << ": " << m_timeElapsed << " seconds" << endl;
29 virtual double timerEndAndReport (const char* const msg)
35 double getTimeElapsed (void) const
36 { return m_timeElapsed; }
43 double ttime(void) const
46 if (gettimeofday (&now, NULL))
49 return (now.tv_sec + static_cast<double>(now.tv_usec) / 1000000.);
58 class TimerMPI : public Timer
61 TimerMPI (MPI::Intracomm& comm)
64 m_timeStart = MPI::Wtime();
67 virtual ~TimerMPI (void)
70 virtual double timerEnd (void)
72 m_timeEnd = MPI::Wtime();
73 m_timeElapsed = m_timeEnd - m_timeStart;
75 return (m_timeElapsed);
78 virtual void timerReport (const char* const msg)
80 if (m_comm.Get_rank() == 0)
81 cout << msg << ": " << m_timeElapsed << " seconds" << endl;
84 virtual double timerEndAndReport (const char* const msg)
90 virtual void timerReportAllProcesses (const char* const msg)
96 MPI::Intracomm& m_comm;
99 class TimerCollectiveMPI : public TimerMPI
102 TimerCollectiveMPI (MPI::Intracomm& comm)
103 : TimerMPI::TimerMPI (comm)
106 m_timeStart = MPI::Wtime();
109 virtual ~TimerCollectiveMPI (void)
112 virtual double timerEnd (void)
114 m_timeEnd = MPI::Wtime();
115 m_timeElapsed = m_timeEnd - m_timeStart;
116 m_comm.Reduce (&m_timeElapsed, &m_timeMin, 1, MPI::DOUBLE, MPI::MIN, 0);
117 m_comm.Reduce (&m_timeElapsed, &m_timeMax, 1, MPI::DOUBLE, MPI::MAX, 0);
119 return (m_timeElapsed);
122 virtual double timerEndAndReport (const char* const msg)
128 virtual void timerReport (const char* const msg)
130 if (m_comm.Get_rank() == 0)
131 cout << msg << " " << "Minimum=" << m_timeMin << ", Maximum=" << m_timeMax << " seconds" << endl;
134 virtual void timerReportAllProcesses (const char* const msg)
136 cout << msg << ": " << "Minimum=" << m_timeMin << ", Maximum=" << m_timeMax << " seconds (Rank " << m_comm.Get_rank() << ")" << endl;