OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
IpplStats.h
Go to the documentation of this file.
1 // -*- C++ -*-
2 /***************************************************************************
3  *
4  * The IPPL Framework
5  *
6  *
7  * Visit http://people.web.psi.ch/adelmann/ for more details
8  *
9  ***************************************************************************/
10 
11 #ifndef IPPL_STATS_H
12 #define IPPL_STATS_H
13 
14 /***************************************************************************
15  * IpplStats keeps statistics about a given IPPL job, and can report on
16  * a summary of these statistics when asked.
17  *
18  * To add a new type of statistic, do these steps:
19  * 1. Add a new private variable to accumulate the stats
20  * 2. Add a new public method to call to add values to the stat
21  * 3. In the constructor, initialize the stats object with a name in the
22  * colon-initializer list.
23  * 4. Add commands to the rest of ippl to change the stat as needed.
24  * Example:
25  * #ifndef IPPL_NO_STATS
26  * Ippl::Stats.incMessageSent();
27  * #endif
28  *
29  * This interface is extensible ... you can add new types of statistics
30  * by calling 'addStat(description, initval)' with a string description
31  * of the stat, and the initial value it should have. This will return a
32  * unique integer identifier for that stat. Then, you can modify the stat
33  * by calling incStat(statindex, amount) and decStat(statindex, amount).
34  * At the end, then, this statistic will be printed out just like all the
35  * others.
36  ***************************************************************************/
37 
38 // include files
39 #include "Utility/IpplInfo.h"
40 #include "Utility/Timer.h"
41 #include "Utility/Inform.h"
42 
43 #include <vector>
44 
45 class IpplStats {
46 
47 public:
48  // constructor: initialize statistics, and start run timer
49  IpplStats();
50 
51  // destructor
52  ~IpplStats();
53 
54  // print out the statistics to the given Inform object
55  void print(Inform &);
56 
57  // add a statistics object to our list of stats ... return an integer
58  // which is the index of the stat in our list, which can be used with
59  // the 'incStat' and 'decStat' methods to change that statistic
60  int addStat(const char *description, long initval = 0) {
61  StatList.push_back(new StatData(description, initval, true));
62  return (StatList.size() - 1);
63  }
64 
65  // increment or decrement the statistic by the given value. Return the
66  // current value
67  long incStat(int statindx, long val = 1) {
68  StatList[statindx]->Value += val;
69  return StatList[statindx]->Value;
70  }
71  long decStat(int statindx, long val = 1) {
72  StatList[statindx]->Value -= val;
73  return StatList[statindx]->Value;
74  }
75 
76  //
77  // general IPPL operation information
78  //
79 
80  // return a ref to the timer, so that it can be turned on and off
81  Timer &getTime() { return Time; }
82 
83  //
84  // communication statistics operations
85  //
86 
95  void incMessageBytesSent(long bytes) { BytesSent.Value += bytes; }
96  void incMessageBytesReceived(long bytes) { BytesReceived.Value += bytes; }
97  void incBarriers() { ++Barriers.Value; }
99  void incScatters() { ++Scatters.Value; }
100 
101  //
102  // BareField statistics operations
103  //
104 
106  void incLFields() { ++LFields.Value; }
107  void incLFieldBytes(long bytes) { LFieldBytes.Value += bytes; }
117  void incFFTs() { ++FFTs.Value; }
128  //
129  // Particle statistics operations
130  //
131 
138  void incParticlesCreated(long num) { ParticlesCreated.Value += num; }
139  void incParticlesDestroyed(long num) { ParticlesDestroyed.Value += num; }
140  void incParticlesSwapped(long num) { ParticlesSwapped.Value += num; }
141 
142 private:
143  // a simple object used to accumulate a stat, with a name.
144  struct StatData {
145  // constructor
146  StatData(std::vector<StatData *> &datalist, const char *nm, long initval = 0,
147  bool needDelete = false)
148  : Value(initval), Name(nm), NeedDelete(needDelete) {
149  // add ourselves to the list of statistics objects
150  datalist.push_back(this);
151  }
152 
153  // another constructor, without the vector
154  StatData(const char *nm, long initval = 0, bool needDelete = false)
155  : Value(initval), Name(nm), NeedDelete(needDelete) { }
156 
157  // default constructor
158  StatData() : Value(0), Name("") { }
159 
160  // destructor
161  ~StatData() { }
162 
163  // value and name
164  long Value;
165  std::string Name;
166 
167  // if this is true, we need to be deleted by the Stats class
169  };
170 
171  // a vector of statistics data objects, which will be used to print
172  // out the results at the end. All stats should be declared as StatData
173  // variables below; in their constructor, they will put themselves in the
174  // list of statistics objects.
175  std::vector<StatData *> StatList;
176 
177  // a timer to time the whole program (although other timers may certainly be
178  // created throughout the program)
180 
181  // build-in ippl statistics objects
195 
219 
229 
230 };
231 
232 // simple macros used to increment a stat, which is turned on or off
233 // by the IPPL_NO_STATS flag
234 #ifndef IPPL_NO_STATS
235 # define INCIPPLSTAT(stat) Ippl::Stats->stat()
236 # define ADDIPPLSTAT(stat,amount) Ippl::Stats->stat(amount)
237 #else
238 # define INCIPPLSTAT(stat)
239 # define ADDIPPLSTAT(stat,amount)
240 #endif
241 
242 #endif
243 
244 /***************************************************************************
245  * $RCSfile: IpplStats.h,v $ $Author: adelmann $
246  * $Revision: 1.1.1.1 $ $Date: 2003/01/23 07:40:33 $
247  * IPPL_VERSION_ID: $Id: IpplStats.h,v 1.1.1.1 2003/01/23 07:40:33 adelmann Exp $
248  ***************************************************************************/
249 
StatData Expressions
Definition: IpplStats.h:201
StatData IpplParticleBases
Definition: IpplStats.h:221
StatData BFEqualsBF
Definition: IpplStats.h:205
void incIpplParticleBases()
Definition: IpplStats.h:133
void incIBFEqualsExpression()
Definition: IpplStats.h:112
StatData BoundaryConditions
Definition: IpplStats.h:210
void incRepartitions()
Definition: IpplStats.h:109
StatData ParensEqualsExpression
Definition: IpplStats.h:204
StatData MessagesReceived
Definition: IpplStats.h:185
void incParticleGathers()
Definition: IpplStats.h:136
StatData IBFEqualsIBF
Definition: IpplStats.h:206
void incParensEqualsExpression()
Definition: IpplStats.h:113
StatData Decompresses
Definition: IpplStats.h:212
StatData Barriers
Definition: IpplStats.h:192
Timer Time
Definition: IpplStats.h:179
void incBeginScalarCodes()
Definition: IpplStats.h:126
The VALUE command.
Definition: Value.h:28
void incCompressionCompareMax(long c)
Definition: IpplStats.h:123
long incStat(int statindx, long val=1)
Definition: IpplStats.h:67
StatData CompressionCompareMax
Definition: IpplStats.h:214
void incScatters()
Definition: IpplStats.h:99
StatData BytesSent
Definition: IpplStats.h:190
StatData BareFields
Definition: IpplStats.h:196
void incParticleUpdates()
Definition: IpplStats.h:134
StatData FFTs
Definition: IpplStats.h:208
StatData BareFieldIterators
Definition: IpplStats.h:215
long decStat(int statindx, long val=1)
Definition: IpplStats.h:71
void incSubEqualsExpression()
Definition: IpplStats.h:116
StatData ParticleAttribs
Definition: IpplStats.h:220
void incDefaultBareFieldIterators()
Definition: IpplStats.h:125
int addStat(const char *description, long initval=0)
Definition: IpplStats.h:60
StatData MessageReceiveChecks
Definition: IpplStats.h:188
StatData BeginScalarCodes
Definition: IpplStats.h:217
StatData ParticlesSwapped
Definition: IpplStats.h:228
void incMessageReceivedFromQueue()
Definition: IpplStats.h:92
void incMessageSentToOthers()
Definition: IpplStats.h:88
Definition: Timer.h:7
StatData MessagesReceivedFromNetwork
Definition: IpplStats.h:186
StatData LFieldBytes
Definition: IpplStats.h:198
StatData MessagesReceivedFromQueue
Definition: IpplStats.h:187
void print(Inform &)
Definition: IpplStats.cpp:105
StatData ParticleExpressions
Definition: IpplStats.h:223
StatData(std::vector< StatData * > &datalist, const char *nm, long initval=0, bool needDelete=false)
Definition: IpplStats.h:146
StatData BFEqualsExpression
Definition: IpplStats.h:202
void incBFEqualsBF()
Definition: IpplStats.h:114
void incFieldLayouts()
Definition: IpplStats.h:108
constexpr double c
The velocity of light in m/s.
Definition: Physics.h:52
StatData Repartitions
Definition: IpplStats.h:200
void incMessageReceiveChecksFailed()
Definition: IpplStats.h:94
StatData BytesReceived
Definition: IpplStats.h:191
void incMessageReceivedFromNetwork()
Definition: IpplStats.h:91
void incLFieldBytes(long bytes)
Definition: IpplStats.h:107
StatData Reductions
Definition: IpplStats.h:193
StatData CompressionCompares
Definition: IpplStats.h:213
StatData Scatters
Definition: IpplStats.h:194
void incParticleAttribs()
Definition: IpplStats.h:132
void incMessageBytesSent(long bytes)
Definition: IpplStats.h:95
StatData Compresses
Definition: IpplStats.h:211
StatData DefaultBareFieldIterators
Definition: IpplStats.h:216
Timer & getTime()
Definition: IpplStats.h:81
StatData FieldLayouts
Definition: IpplStats.h:199
StatData EndScalarCodes
Definition: IpplStats.h:218
StatData MessagesSentToSelf
Definition: IpplStats.h:184
void incMessageSentToSelf()
Definition: IpplStats.h:89
StatData MessagesSentToOthers
Definition: IpplStats.h:183
StatData(const char *nm, long initval=0, bool needDelete=false)
Definition: IpplStats.h:154
void incBarriers()
Definition: IpplStats.h:97
void incDecompresses()
Definition: IpplStats.h:121
std::string Name
Definition: IpplStats.h:165
StatData ParticleGathers
Definition: IpplStats.h:224
void incEndScalarCodes()
Definition: IpplStats.h:127
void incParticlesCreated(long num)
Definition: IpplStats.h:138
void incMessageReceived()
Definition: IpplStats.h:90
void incParticleScatters()
Definition: IpplStats.h:137
void incBareFieldIterators()
Definition: IpplStats.h:124
void incExpressions()
Definition: IpplStats.h:110
void incMessageReceiveChecks()
Definition: IpplStats.h:93
void incBareFields()
Definition: IpplStats.h:105
StatData IBFEqualsExpression
Definition: IpplStats.h:203
void incFFTs()
Definition: IpplStats.h:117
StatData GuardCellFills
Definition: IpplStats.h:209
void incCompressionCompares(long c)
Definition: IpplStats.h:122
void incParticleExpressions()
Definition: IpplStats.h:135
StatData MessageReceiveChecksFailed
Definition: IpplStats.h:189
StatData ParticlesCreated
Definition: IpplStats.h:226
void incBoundaryConditions()
Definition: IpplStats.h:119
StatData ParticlesDestroyed
Definition: IpplStats.h:227
StatData LFields
Definition: IpplStats.h:197
StatData MessagesSent
Definition: IpplStats.h:182
void incGuardCellFills()
Definition: IpplStats.h:118
void incParticlesDestroyed(long num)
Definition: IpplStats.h:139
Definition: Inform.h:41
void incMessageBytesReceived(long bytes)
Definition: IpplStats.h:96
StatData SubEqualsExpression
Definition: IpplStats.h:207
void incParticlesSwapped(long num)
Definition: IpplStats.h:140
void incLFields()
Definition: IpplStats.h:106
void incBFEqualsExpression()
Definition: IpplStats.h:111
void incCompresses()
Definition: IpplStats.h:120
StatData ParticleScatters
Definition: IpplStats.h:225
std::vector< StatData * > StatList
Definition: IpplStats.h:175
void incIBFEqualsIBF()
Definition: IpplStats.h:115
StatData ParticleUpdates
Definition: IpplStats.h:222
void incMessageSent()
Definition: IpplStats.h:87
void incReductions()
Definition: IpplStats.h:98