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
39namespace sc {
40
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);
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
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
140class 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);
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:
Classes which need runtime information about themselves and their relationship to other classes can v...
Definition class.h:244
static std::ostream & out0()
Return an ostream that writes from node 0.
A template class that maintains references counts.
Definition ref.h:332
The RegionTimer class is used to record the time spent in a section of code.
Definition regtime.h:89
virtual void print(std::ostream &=ExEnv::out0()) const
Print the object.
Definition regtime.h:41
The Timer class uses RegionTimer to time intervals in an exception safe manner.
Definition regtime.h:140
~Timer()
Stop timing a region, if active.
void reset(const char *=0)
Stop timing the current region, if active.
Timer(const char *name)
Start timing a region using the default RegionTimer and activate the timer.
Timer(const Ref< RegionTimer > &, const char *name)
Start timing a region using the given RegionTimer.

Generated at Fri May 31 2024 00:00:00 for MPQC 2.3.1 using the documentation package Doxygen 1.11.0.