MPQC 2.3.1

- Main Page
- Related Pages
- Classes
- Files

- File List

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: