** Name: timer.h
** Purpose: Header file for Timer class
** Author: Kevin Rosenberg
-** Date Started: Sep 2000
+** Date Started: Sep 2000
**
** This is part of the CTSim program
** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: timer.h,v 1.6 2001/01/28 19:10:18 kevin Exp $
+** $Id$
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License (version 2) as
** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
******************************************************************************/
+#ifndef _TIMER_H
+#define _TIMER_H
+
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
{
public:
Timer (void)
- { m_timeStart = ttime(); }
+ { m_timeStart = ttime(); }
virtual ~Timer (void)
- {}
+ {}
virtual double timerEnd (void)
{
- m_timeEnd = ttime();
- m_timeElapsed = m_timeEnd - m_timeStart;
-
- return (m_timeElapsed);
+ m_timeEnd = ttime();
+ m_timeElapsed = m_timeEnd - m_timeStart;
+
+ return (m_timeElapsed);
}
virtual void timerReport (const char* const msg) const
{
- std::cout << msg << ": " << m_timeElapsed << " seconds" << std::endl;
+ std::cout << msg << ": " << m_timeElapsed << " seconds" << std::endl;
}
virtual double timerEndAndReport (const char* const msg)
{
- double t = timerEnd ();
- timerReport (msg);
- return (t);
+ double t = timerEnd ();
+ timerReport (msg);
+ return (t);
}
double getTimeElapsed (void) const
- { return m_timeElapsed; }
+ { return m_timeElapsed; }
protected:
double m_timeStart;
double m_timeElapsed;
double ttime(void) const
- {
+ {
#ifdef HAVE_GETTIMEOFDAY
- struct timeval now;
- if (gettimeofday (&now, NULL))
- return 0;
-
- return (now.tv_sec + static_cast<double>(now.tv_usec) / 1000000.);
+ struct timeval now;
+ if (gettimeofday (&now, NULL))
+ return 0;
+
+ return (now.tv_sec + static_cast<double>(now.tv_usec) / 1000000.);
#elif defined(MSVC)
- struct _timeb now;
- _ftime (&now);
- return (now.time + static_cast<double>(now.millitm) / 1000.);
+ struct _timeb now;
+ _ftime (&now);
+ return (now.time + static_cast<double>(now.millitm) / 1000.);
#else
- return 0;
+ return 0;
#endif
- }
+ }
};
{
public:
TimerMPI (MPI::Intracomm& comm)
- : m_comm(comm)
+ : m_comm(comm)
{
- m_timeStart = MPI::Wtime();
+ m_timeStart = MPI::Wtime();
}
virtual ~TimerMPI (void)
virtual double timerEnd (void)
{
- m_timeEnd = MPI::Wtime();
- m_timeElapsed = m_timeEnd - m_timeStart;
-
- return (m_timeElapsed);
+ m_timeEnd = MPI::Wtime();
+ m_timeElapsed = m_timeEnd - m_timeStart;
+
+ return (m_timeElapsed);
}
virtual void timerReport (const char* const msg)
{
- if (m_comm.Get_rank() == 0)
- std::cout << msg << ": " << m_timeElapsed << " seconds" << std::endl;
+ if (m_comm.Get_rank() == 0)
+ std::cout << msg << ": " << m_timeElapsed << " seconds" << std::endl;
}
virtual double timerEndAndReport (const char* const msg)
{
- double t = timerEnd ();
- timerReport (msg);
- return (t);
+ double t = timerEnd ();
+ timerReport (msg);
+ return (t);
}
virtual void timerReportAllProcesses (const char* const msg)
{
- timerReport (msg);
+ timerReport (msg);
}
protected:
{
public:
TimerCollectiveMPI (MPI::Intracomm& comm)
- : TimerMPI::TimerMPI (comm)
+ : TimerMPI::TimerMPI (comm)
{
- m_comm.Barrier();
- m_timeStart = MPI::Wtime();
+ m_comm.Barrier();
+ m_timeStart = MPI::Wtime();
}
virtual ~TimerCollectiveMPI (void)
virtual double timerEnd (void)
{
- m_timeEnd = MPI::Wtime();
- m_timeElapsed = m_timeEnd - m_timeStart;
- m_comm.Reduce (&m_timeElapsed, &m_timeMin, 1, MPI::DOUBLE, MPI::MIN, 0);
- m_comm.Reduce (&m_timeElapsed, &m_timeMax, 1, MPI::DOUBLE, MPI::MAX, 0);
-
- return (m_timeElapsed);
+ m_timeEnd = MPI::Wtime();
+ m_timeElapsed = m_timeEnd - m_timeStart;
+ m_comm.Reduce (&m_timeElapsed, &m_timeMin, 1, MPI::DOUBLE, MPI::MIN, 0);
+ m_comm.Reduce (&m_timeElapsed, &m_timeMax, 1, MPI::DOUBLE, MPI::MAX, 0);
+
+ return (m_timeElapsed);
}
virtual double timerEndAndReport (const char* const msg)
{
- double t = timerEnd ();
- timerReport (msg);
- return (t);
+ double t = timerEnd ();
+ timerReport (msg);
+ return (t);
}
virtual void timerReport (const char* const msg)
{
- if (m_comm.Get_rank() == 0)
- std::cout << msg << " " << "Minimum=" << m_timeMin << ", Maximum=" << m_timeMax << " seconds" << std::endl;
+ if (m_comm.Get_rank() == 0)
+ std::cout << msg << " " << "Minimum=" << m_timeMin << ", Maximum=" << m_timeMax << " seconds" << std::endl;
}
virtual void timerReportAllProcesses (const char* const msg)
{
- std::cout << msg << ": " << "Minimum=" << m_timeMin << ", Maximum=" << m_timeMax << " seconds (Rank " << m_comm.Get_rank() << ")" << std::endl;
+ std::cout << msg << ": " << "Minimum=" << m_timeMin << ", Maximum=" << m_timeMax << " seconds (Rank " << m_comm.Get_rank() << ")" << std::endl;
}
private:
#endif
+#endif // _TIMER_H