X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=include%2Ftimer.h;h=9e4118eba052e5213788b92c1b279658017c3abb;hp=2200685db7cf338e698b891ae944824938d6db47;hb=f7ee98f7d964ed361068179f0e7ea4475ed1abdf;hpb=38ff0dd072e5929bf4a204982f858049dff09b81 diff --git a/include/timer.h b/include/timer.h index 2200685..9e4118e 100644 --- a/include/timer.h +++ b/include/timer.h @@ -1,3 +1,33 @@ +/***************************************************************************** +** FILE IDENTIFICATION +** +** Name: timer.h +** Purpose: Header file for Timer class +** Author: Kevin Rosenberg +** Date Started: Sep 2000 +** +** This is part of the CTSim program +** Copyright (c) 1983-2001 Kevin Rosenberg +** +** $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 +** published by the Free Software Foundation. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program; if not, write to the Free Software +** 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 @@ -14,33 +44,33 @@ class Timer { 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; @@ -48,21 +78,21 @@ class Timer 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(now.tv_usec) / 1000000.); + struct timeval now; + if (gettimeofday (&now, NULL)) + return 0; + + return (now.tv_sec + static_cast(now.tv_usec) / 1000000.); #elif defined(MSVC) - struct _timeb now; - _ftime (&now); - return (now.time + static_cast(now.millitm) / 1000.); + struct _timeb now; + _ftime (&now); + return (now.time + static_cast(now.millitm) / 1000.); #else - return 0; + return 0; #endif - } + } }; @@ -74,9 +104,9 @@ class TimerMPI : public Timer { public: TimerMPI (MPI::Intracomm& comm) - : m_comm(comm) + : m_comm(comm) { - m_timeStart = MPI::Wtime(); + m_timeStart = MPI::Wtime(); } virtual ~TimerMPI (void) @@ -84,28 +114,28 @@ class TimerMPI : public Timer 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: @@ -116,10 +146,10 @@ class TimerCollectiveMPI : public TimerMPI { 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) @@ -127,30 +157,30 @@ class TimerCollectiveMPI : public TimerMPI 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: @@ -160,5 +190,6 @@ class TimerCollectiveMPI : public TimerMPI #endif +#endif // _TIMER_H