10 #include <sys/timeb.h>
17 { m_timeStart = ttime(); }
22 virtual double timerEnd (void)
25 m_timeElapsed = m_timeEnd - m_timeStart;
27 return (m_timeElapsed);
30 virtual void timerReport (const char* const msg) const
32 std::cout << msg << ": " << m_timeElapsed << " seconds" << std::endl;
35 virtual double timerEndAndReport (const char* const msg)
37 double t = timerEnd ();
42 double getTimeElapsed (void) const
43 { return m_timeElapsed; }
50 double ttime(void) const
52 #ifdef HAVE_GETTIMEOFDAY
54 if (gettimeofday (&now, NULL))
57 return (now.tv_sec + static_cast<double>(now.tv_usec) / 1000000.);
61 return (now.time + static_cast<double>(now.millitm) / 1000.);
73 class TimerMPI : public Timer
76 TimerMPI (MPI::Intracomm& comm)
79 m_timeStart = MPI::Wtime();
82 virtual ~TimerMPI (void)
85 virtual double timerEnd (void)
87 m_timeEnd = MPI::Wtime();
88 m_timeElapsed = m_timeEnd - m_timeStart;
90 return (m_timeElapsed);
93 virtual void timerReport (const char* const msg)
95 if (m_comm.Get_rank() == 0)
96 std::cout << msg << ": " << m_timeElapsed << " seconds" << std::endl;
99 virtual double timerEndAndReport (const char* const msg)
101 double t = timerEnd ();
106 virtual void timerReportAllProcesses (const char* const msg)
112 MPI::Intracomm& m_comm;
115 class TimerCollectiveMPI : public TimerMPI
118 TimerCollectiveMPI (MPI::Intracomm& comm)
119 : TimerMPI::TimerMPI (comm)
122 m_timeStart = MPI::Wtime();
125 virtual ~TimerCollectiveMPI (void)
128 virtual double timerEnd (void)
130 m_timeEnd = MPI::Wtime();
131 m_timeElapsed = m_timeEnd - m_timeStart;
132 m_comm.Reduce (&m_timeElapsed, &m_timeMin, 1, MPI::DOUBLE, MPI::MIN, 0);
133 m_comm.Reduce (&m_timeElapsed, &m_timeMax, 1, MPI::DOUBLE, MPI::MAX, 0);
135 return (m_timeElapsed);
138 virtual double timerEndAndReport (const char* const msg)
140 double t = timerEnd ();
145 virtual void timerReport (const char* const msg)
147 if (m_comm.Get_rank() == 0)
148 std::cout << msg << " " << "Minimum=" << m_timeMin << ", Maximum=" << m_timeMax << " seconds" << std::endl;
151 virtual void timerReportAllProcesses (const char* const msg)
153 std::cout << msg << ": " << "Minimum=" << m_timeMin << ", Maximum=" << m_timeMax << " seconds (Rank " << m_comm.Get_rank() << ")" << std::endl;