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)
31 double t = timerEnd ();
36 double getTimeElapsed (void) const
37 { return m_timeElapsed; }
44 double ttime(void) const
47 if (gettimeofday (&now, NULL))
50 return (now.tv_sec + static_cast<double>(now.tv_usec) / 1000000.);
59 class TimerMPI : public Timer
62 TimerMPI (MPI::Intracomm& comm)
65 m_timeStart = MPI::Wtime();
68 virtual ~TimerMPI (void)
71 virtual double timerEnd (void)
73 m_timeEnd = MPI::Wtime();
74 m_timeElapsed = m_timeEnd - m_timeStart;
76 return (m_timeElapsed);
79 virtual void timerReport (const char* const msg)
81 if (m_comm.Get_rank() == 0)
82 cout << msg << ": " << m_timeElapsed << " seconds" << endl;
85 virtual double timerEndAndReport (const char* const msg)
87 double t = timerEnd ();
92 virtual void timerReportAllProcesses (const char* const msg)
98 MPI::Intracomm& m_comm;
101 class TimerCollectiveMPI : public TimerMPI
104 TimerCollectiveMPI (MPI::Intracomm& comm)
105 : TimerMPI::TimerMPI (comm)
108 m_timeStart = MPI::Wtime();
111 virtual ~TimerCollectiveMPI (void)
114 virtual double timerEnd (void)
116 m_timeEnd = MPI::Wtime();
117 m_timeElapsed = m_timeEnd - m_timeStart;
118 m_comm.Reduce (&m_timeElapsed, &m_timeMin, 1, MPI::DOUBLE, MPI::MIN, 0);
119 m_comm.Reduce (&m_timeElapsed, &m_timeMax, 1, MPI::DOUBLE, MPI::MAX, 0);
121 return (m_timeElapsed);
124 virtual double timerEndAndReport (const char* const msg)
126 double t = timerEnd ();
131 virtual void timerReport (const char* const msg)
133 if (m_comm.Get_rank() == 0)
134 cout << msg << " " << "Minimum=" << m_timeMin << ", Maximum=" << m_timeMax << " seconds" << endl;
137 virtual void timerReportAllProcesses (const char* const msg)
139 cout << msg << ": " << "Minimum=" << m_timeMin << ", Maximum=" << m_timeMax << " seconds (Rank " << m_comm.Get_rank() << ")" << endl;