ESyS-Particle  2.3.4
Timer.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2017 by The University of Queensland //
4 // Centre for Geoscience Computing //
5 // http://earth.uq.edu.au/centre-geoscience-computing //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.apache.org/licenses/LICENSE-2.0 //
10 // //
12 
13 #ifndef __MPI_TIMER_H_
14 #define __MPI_TIMER_H_
15 
16 //--- MPI includes ---
17 #include <mpi.h>
18 
19 //--- STL includes ---
20 #include <string>
21 #include <map>
22 
23 #include <boost/shared_ptr.hpp>
24 
28 class MpiWTimer
29 {
30 public:
31  MpiWTimer();
32 
33  MpiWTimer(const std::string &name);
34  void setStart(const double &wTime);
35  void pause(const double &wTime);
36  void resume(const double &wTime);
37  void setStop(const double &wTime, bool elapseIsStopMinusStart=false);
38  double getTiming() const;
39  const std::string &getName() const;
40 
41  bool isPaused() const;
42 
43  void zeroise();
44 protected:
45  void isPaused(bool paused);
46 
47 private:
48  std::string m_name;
49  double m_startTime;
50  double m_stopTime;
51  bool m_isPaused;
52  double m_pauseTime;
53  double m_resumeTime;
54  double m_elapsedTime;
55 };
56 
57 class MpiWTimers;
58 
63 {
64 public:
65  TimingDataWriter(const std::string &fileName, MpiWTimers &timers);
66 
67  std::ostream &getOStream();
68 
69  const std::string &getFileName() const;
70 
71  void writeHeader();
72 
73  void appendData();
74 
75 private:
76  std::string m_fileName;
79  typedef boost::shared_ptr<std::ofstream> OFStreamPtr;
81 };
82 
87 {
88 public:
89  MpiWTimers();
90 
91  void start(const std::string &name);
92  void stop(const std::string &name, bool elapseIsStopMinusStart=false);
93  void pause(const std::string &name);
94  void resume(const std::string &name);
95  void zeroise(const std::string &name);
96  void zeroise();
97  bool timerExists(const std::string &name) const;
98  double getTiming(const std::string &name) const;
99 
100  void writeHeader(std::ostream &oStream);
101  void appendData(std::ostream &oStream);
102  void appendData(const std::string &fileName);
103  void clear();
104 
105 protected:
106  //void createTimer(const std::string &timerName);
107 
108  MpiWTimer *findTimer(const std::string &timerName);
109  const MpiWTimer *findTimer(const std::string &timerName) const;
110 
111  MpiWTimer &findOrCreateTimer(const std::string &timerName);
112 
113  TimingDataWriter &getWriter(const std::string &fileName);
114 
115 private:
116  typedef std::map<std::string, MpiWTimer> NameMpiWTimerMap;
118 
119  typedef std::map<std::string, TimingDataWriter> FileNameWriterMap;
121 };
122 
123 #endif //__MPI_TIMER_H_
MpiWTimers::resume
void resume(const std::string &name)
Definition: Timer.cpp:217
MpiWTimer::isPaused
bool isPaused() const
Definition: Timer.cpp:54
MpiWTimer::m_name
std::string m_name
Definition: Timer.h:48
MpiWTimers::m_fileNameWriterMap
FileNameWriterMap m_fileNameWriterMap
Definition: Timer.h:120
TimingDataWriter::TimingDataWriter
TimingDataWriter(const std::string &fileName, MpiWTimers &timers)
Definition: Timer.cpp:106
TimingDataWriter::m_pTimers
MpiWTimers * m_pTimers
Definition: Timer.h:77
MpiWTimers::MpiWTimers
MpiWTimers()
Definition: Timer.cpp:143
MpiWTimer::zeroise
void zeroise()
Definition: Timer.cpp:20
MpiWTimers::NameMpiWTimerMap
std::map< std::string, MpiWTimer > NameMpiWTimerMap
Definition: Timer.h:116
MpiWTimer::m_stopTime
double m_stopTime
Definition: Timer.h:50
TimingDataWriter
Definition: Timer.h:63
MpiWTimers::FileNameWriterMap
std::map< std::string, TimingDataWriter > FileNameWriterMap
Definition: Timer.h:119
MpiWTimer::m_isPaused
bool m_isPaused
Definition: Timer.h:51
MpiWTimer::m_elapsedTime
double m_elapsedTime
Definition: Timer.h:54
MpiWTimer
Definition: Timer.h:29
MpiWTimer::setStop
void setStop(const double &wTime, bool elapseIsStopMinusStart=false)
Definition: Timer.cpp:91
MpiWTimers::zeroise
void zeroise()
Definition: Timer.cpp:228
MpiWTimers::m_timerMap
NameMpiWTimerMap m_timerMap
Definition: Timer.h:117
MpiWTimer::getName
const std::string & getName() const
Definition: Timer.cpp:79
MpiWTimer::getTiming
double getTiming() const
Definition: Timer.cpp:100
TimingDataWriter::OFStreamPtr
boost::shared_ptr< std::ofstream > OFStreamPtr
Definition: Timer.h:79
MpiWTimers
Definition: Timer.h:87
MpiWTimers::findOrCreateTimer
MpiWTimer & findOrCreateTimer(const std::string &timerName)
Definition: Timer.cpp:171
MpiWTimers::getTiming
double getTiming(const std::string &name) const
Definition: Timer.cpp:197
TimingDataWriter::m_oFStreamPtr
OFStreamPtr m_oFStreamPtr
Definition: Timer.h:80
MpiWTimers::getWriter
TimingDataWriter & getWriter(const std::string &fileName)
Definition: Timer.cpp:251
TimingDataWriter::getOStream
std::ostream & getOStream()
Definition: Timer.cpp:119
TimingDataWriter::m_fileName
std::string m_fileName
Definition: Timer.h:76
MpiWTimers::appendData
void appendData(std::ostream &oStream)
Definition: Timer.cpp:270
Timer.h
NULL
#define NULL
Definition: t_list.h:17
MpiWTimer::resume
void resume(const double &wTime)
Definition: Timer.cpp:73
MpiWTimer::m_resumeTime
double m_resumeTime
Definition: Timer.h:53
TimingDataWriter::appendData
void appendData()
Definition: Timer.cpp:135
MpiWTimers::writeHeader
void writeHeader(std::ostream &oStream)
Definition: Timer.cpp:237
TimingDataWriter::writeHeader
void writeHeader()
Definition: Timer.cpp:127
TimingDataWriter::getFileName
const std::string & getFileName() const
Definition: Timer.cpp:114
MpiWTimer::MpiWTimer
MpiWTimer()
Definition: Timer.cpp:30
TimingDataWriter::m_haveWrittenHeader
bool m_haveWrittenHeader
Definition: Timer.h:78
MpiWTimers::pause
void pause(const std::string &name)
Definition: Timer.cpp:211
MpiWTimers::stop
void stop(const std::string &name, bool elapseIsStopMinusStart=false)
Definition: Timer.cpp:191
MpiWTimer::m_pauseTime
double m_pauseTime
Definition: Timer.h:52
MpiWTimers::findTimer
MpiWTimer * findTimer(const std::string &timerName)
Definition: Timer.cpp:153
MpiWTimers::clear
void clear()
Definition: Timer.cpp:205
MpiWTimer::m_startTime
double m_startTime
Definition: Timer.h:49
MpiWTimer::setStart
void setStart(const double &wTime)
Definition: Timer.cpp:84
MpiWTimer::pause
void pause(const double &wTime)
Definition: Timer.cpp:64
MpiWTimers::start
void start(const std::string &name)
Definition: Timer.cpp:186
MpiWTimers::timerExists
bool timerExists(const std::string &name) const
Definition: Timer.cpp:181