MPQC  2.3.1
regtime.h
1 //
2 // regtime.h
3 //
4 // Copyright (C) 1996 Limit Point Systems, Inc.
5 //
6 // Author: Curtis Janssen <cljanss@limitpt.com>
7 // Maintainer: LPS
8 //
9 // This file is part of the SC Toolkit.
10 //
11 // The SC Toolkit is free software; you can redistribute it and/or modify
12 // it under the terms of the GNU Library General Public License as published by
13 // the Free Software Foundation; either version 2, or (at your option)
14 // any later version.
15 //
16 // The SC Toolkit is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 // GNU Library General Public License for more details.
20 //
21 // You should have received a copy of the GNU Library General Public License
22 // along with the SC Toolkit; see the file COPYING.LIB. If not, write to
23 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24 //
25 // The U.S. Government is granted a limited license as per AL 91-7.
26 //
27 
28 #ifdef __GNUC__
29 #pragma interface
30 #endif
31 
32 #ifndef _util_misc_regtime_h
33 #define _util_misc_regtime_h
34 
35 #include <iostream>
36 #include <string>
37 #include <util/class/class.h>
38 
39 namespace sc {
40 
41 class TimedRegion {
42  private:
43  char *name_;
44  TimedRegion *up_;
45  TimedRegion *subregions_;
46  TimedRegion *next_;
47  TimedRegion *prev_;
48  double cpu_time_;
49  double wall_time_;
50  double cpu_enter_;
51  double wall_enter_;
52  double flops_;
53  double flops_enter_;
54 
55  TimedRegion *insert_after(const char *name);
56  TimedRegion *insert_before(const char *name);
57  public:
58  TimedRegion(const char *name);
59  ~TimedRegion();
60  const char *name() const { return name_; }
61  TimedRegion *findinsubregion(const char *);
62  void cpu_enter(double);
63  void wall_enter(double);
64  void flops_enter(double);
65  void cpu_exit(double);
66  void wall_exit(double);
67  void flops_exit(double);
68  void cpu_add(double t) { cpu_time_ += t; }
69  void wall_add(double t) { wall_time_ += t; }
70  void flops_add(double t) { flops_ += t; }
71  TimedRegion *up() const { return up_; }
72  TimedRegion *subregions() const { return subregions_; }
73  TimedRegion *next() const { return next_; }
74  TimedRegion *prev() const { return prev_; }
75 
76  int nregion();
77  void get_region_names(const char *names[]);
78  void get_wall_times(double *);
79  void get_cpu_times(double *);
80  void get_flops(double *);
81  void get_depth(int *, int depth = 0);
82 };
83 
89 class RegionTimer: public DescribedClass {
90  protected:
91  int wall_time_;
92  int cpu_time_;
93  int flops_;
94 
95  TimedRegion *top_;
96  TimedRegion *current_;
97  TimedRegion *default_;
98 
99  public:
100  RegionTimer(const char *topname = "total",
101  int cpu_time = 0, int wall_time = 1);
102  RegionTimer(const Ref<KeyVal> &);
103  ~RegionTimer();
104  void enter(const char * = 0);
105  void change(const char *newname, const char * oldname = 0);
106  void exit(const char * = 0, bool do_not_throw = false);
107  void set_default(const char *);
108  void unset_default();
109  void enter_default();
110  void exit_default();
111  virtual void print(std::ostream& = ExEnv::out0()) const;
112 
113  void update_top() const;
114 
115  int nregion() const;
116  void get_region_names(const char *names[]) const;
117  void get_wall_times(double *) const;
118  void get_cpu_times(double *) const;
119  void get_flops(double *) const;
120  void get_depth(int *) const;
121 
122  double get_wall_time() const;
123  double get_cpu_time() const;
124  double get_flops() const;
125 
126  void add_wall_time(const char *, double);
127  void add_cpu_time(const char *, double);
128  void add_flops(const char *, double);
129 
130  static RegionTimer *default_regiontimer();
131  static void set_default_regiontimer(const Ref<RegionTimer> &);
132 };
133 
140 class Timer {
141  Ref<RegionTimer> timer_;
142  std::string name_;
143  bool active_;
144  public:
148  Timer(const char *name);
151  Timer(const Ref<RegionTimer> &, const char *name);
153  ~Timer();
157  void reset(const char * = 0);
158 };
159 
160 }
161 
162 #endif
163 
164 // Local Variables:
165 // mode: c++
166 // c-file-style: "CLJ"
167 // End:
sc::Timer
The Timer class uses RegionTimer to time intervals in an exception safe manner.
Definition: regtime.h:140
sc::Ref
A template class that maintains references counts.
Definition: ref.h:332
sc::RegionTimer::print
virtual void print(std::ostream &=ExEnv::out0()) const
Print the object.
sc::Timer::Timer
Timer(const char *name)
Start timing a region using the default RegionTimer and activate the timer.
sc::TimedRegion
Definition: regtime.h:41
sc::Timer::reset
void reset(const char *=0)
Stop timing the current region, if active.
sc::DescribedClass
Classes which need runtime information about themselves and their relationship to other classes can v...
Definition: class.h:244
sc::Timer::~Timer
~Timer()
Stop timing a region, if active.
sc::ExEnv::out0
static std::ostream & out0()
Return an ostream that writes from node 0.
sc::RegionTimer
The RegionTimer class is used to record the time spent in a section of code.
Definition: regtime.h:89

Generated at Sun Jan 26 2020 23:33:04 for MPQC 2.3.1 using the documentation package Doxygen 1.8.16.