13 { m_timeStart = ttime(); }
18 virtual double timerEnd (void)
21 m_timeElapsed = m_timeEnd - m_timeStart;
23 return (m_timeElapsed);
26 virtual void timerReport (const char* const msg) const
28 cout << msg << ": " << m_timeElapsed << " seconds" << endl;
31 virtual double timerEndAndReport (const char* const msg)
33 double t = timerEnd ();
38 double getTimeElapsed (void) const
39 { return m_timeElapsed; }
46 double ttime(void) const
48 #ifdef HAVE_GETTIMEOFDAY
50 if (gettimeofday (&now, NULL))
53 return (now.tv_sec + static_cast<double>(now.tv_usec) / 1000000.);
65 class TimerMPI : public Timer
68 TimerMPI (MPI::Intracomm& comm)
71 m_timeStart = MPI::Wtime();
74 virtual ~TimerMPI (void)
77 virtual double timerEnd (void)
79 m_timeEnd = MPI::Wtime();
80 m_timeElapsed = m_timeEnd - m_timeStart;
82 return (m_timeElapsed);
85 virtual void timerReport (const char* const msg)
87 if (m_comm.Get_rank() == 0)
88 cout << msg << ": " << m_timeElapsed << " seconds" << endl;
91 virtual double timerEndAndReport (const char* const msg)
93 double t = timerEnd ();
98 virtual void timerReportAllProcesses (const char* const msg)
104 MPI::Intracomm& m_comm;
107 class TimerCollectiveMPI : public TimerMPI
110 TimerCollectiveMPI (MPI::Intracomm& comm)
111 : TimerMPI::TimerMPI (comm)
114 m_timeStart = MPI::Wtime();
117 virtual ~TimerCollectiveMPI (void)
120 virtual double timerEnd (void)
122 m_timeEnd = MPI::Wtime();
123 m_timeElapsed = m_timeEnd - m_timeStart;
124 m_comm.Reduce (&m_timeElapsed, &m_timeMin, 1, MPI::DOUBLE, MPI::MIN, 0);
125 m_comm.Reduce (&m_timeElapsed, &m_timeMax, 1, MPI::DOUBLE, MPI::MAX, 0);
127 return (m_timeElapsed);
130 virtual double timerEndAndReport (const char* const msg)
132 double t = timerEnd ();
137 virtual void timerReport (const char* const msg)
139 if (m_comm.Get_rank() == 0)
140 cout << msg << " " << "Minimum=" << m_timeMin << ", Maximum=" << m_timeMax << " seconds" << endl;
143 virtual void timerReportAllProcesses (const char* const msg)
145 cout << msg << ": " << "Minimum=" << m_timeMin << ", Maximum=" << m_timeMax << " seconds (Rank " << m_comm.Get_rank() << ")" << endl;