7614a2a807cc36e3c188bf60efba38a53a284330
[charm.git] / src / ck-perf / trace-controlPoints.h
1 #ifndef _VERBOSE_H
2 #define _VERBOSE_H
3
4 #include <stdio.h>
5 #include <errno.h>
6
7 #include "trace.h"
8 #include "envelope.h"
9 #include "register.h"
10 #include "trace-common.h"
11
12 /**
13  *   \addtogroup ControlPointFramework
14  *   @{
15  */
16
17
18 /**
19  *    An instrumentation module making use of
20  *    the tracing framework hooks provided in Charm++. It is used 
21  *    by the control point framework to monitor idle time.
22  *
23  *  Only the more common hooks are listened to in this module.
24  */
25 class TraceControlPoints : public Trace {
26  private:
27
28   double lastBeginExecuteTime;
29   int lastbeginMessageSize;
30
31   /** The amount of time spent executing entry methods */
32   double totalEntryMethodTime;
33
34
35   /** The start of the idle region */
36   double lastBeginIdle;
37   
38   /** The amount of time spent idle */
39   double totalIdleTime;
40   
41   /** The time we last rest the idle/entry totals */
42   double lastResetTime;
43
44   /** The highest seen memory usage */
45   double memUsage;
46
47   
48
49  public:
50   TraceControlPoints(char **argv);
51   
52   // a user event has just occured
53   void userEvent(int eventID);
54   // a pair of begin/end user event has just occured
55   void userBracketEvent(int eventID, double bt, double et);
56   
57   // "creation" of message(s) - message Sends
58   void creation(envelope *, int epIdx, int num=1);
59   void creationMulticast(envelope *, int epIdx, int num=1, int *pelist=NULL);
60   void creationDone(int num=1);
61   
62   void messageRecv(char *env, int pe);
63   
64   // **************************************************************
65   // begin/end execution of a Charm++ entry point
66   // NOTE: begin/endPack and begin/endUnpack can be called in between
67   //       a beginExecute and its corresponding endExecute.
68   void beginExecute(envelope *);
69   void beginExecute(CmiObjId *tid);
70   void beginExecute(
71                     int event,   // event type defined in trace-common.h
72                     int msgType, // message type
73                     int ep,      // Charm++ entry point id
74                     int srcPe,   // Which PE originated the call
75                     int ml,      // message size
76                     CmiObjId* idx);    // index
77   void endExecute(void);
78   
79   // begin/end idle time for this pe
80   void beginIdle(double curWallTime);
81   void endIdle(double curWallTime);
82   
83   // begin/end of execution
84   void beginComputation(void);
85   void endComputation(void);
86   
87   /* Memory tracing */
88   void malloc(void *where, int size, void **stack, int stackSize);
89   void free(void *where, int size);
90   
91   // do any clean-up necessary for tracing
92   void traceClose();
93
94
95   // ==================================================================
96   // The following methods are not required for a tracing module
97
98   /** reset the idle time and entry method execution time accumulators */
99   void resetTimings();
100
101   /** Reset the idle, overhead, and memory measurements */
102   void resetAll();
103
104   /** Fraction of the time spent idle */
105   double idleRatio(){
106     double t = CmiWallTimer() - lastResetTime;
107     return (totalIdleTime) / t;
108   }
109
110   /** Fraction of time spent as overhead */
111   double overheadRatio(){
112     double t = CmiWallTimer() - lastResetTime;
113     return (t - totalIdleTime - totalEntryMethodTime) / t;
114   }
115
116   /** Highest memory usage (in MB) value we've seen since last time */
117   double memoryUsageMB(){
118     return ((double)memUsage) / 1024.0 / 1024.0;
119   }
120
121
122
123 };
124
125
126 TraceControlPoints *localControlPointTracingInstance();
127
128
129 /*! @} */
130 #endif
131