4c0dfe0bfd02a4f78ca9712ab2ddd40210916d85
[charm.git] / src / ck-perf / trace-common.h
1 /**
2  * \addtogroup CkPerf
3 */
4 /*@{*/
5
6 #ifndef __TRACE_COMMON_H__
7 #define __TRACE_COMMON_H__
8
9
10 #include <stdlib.h>
11 #if defined(_WIN32) && !defined(__CYGWIN__)
12 #include <direct.h>
13 #define CHDIR _chdir
14 #define GETCWD _getcwd
15 #define PATHSEP '\\'
16 #define PATHSEPSTR "\\"
17 #else
18 #include <unistd.h>
19 #define CHDIR chdir
20 #define GETCWD getcwd
21 #define PATHSEP '/'
22 #define PATHSEPSTR "/"
23 #endif
24
25
26 #define  CREATION           1
27 #define  BEGIN_PROCESSING   2
28 #define  END_PROCESSING     3
29 #define  ENQUEUE            4
30 #define  DEQUEUE            5
31 #define  BEGIN_COMPUTATION  6
32 #define  END_COMPUTATION    7
33 #define  BEGIN_INTERRUPT    8
34 #define  END_INTERRUPT      9
35 #define  MESSAGE_RECV       10
36 #define  BEGIN_TRACE        11
37 #define  END_TRACE          12
38 #define  USER_EVENT         13
39 #define  BEGIN_IDLE         14
40 #define  END_IDLE           15
41 #define  BEGIN_PACK         16
42 #define  END_PACK           17
43 #define  BEGIN_UNPACK       18
44 #define  END_UNPACK         19
45 #define  CREATION_BCAST     20
46
47 #define  CREATION_MULTICAST 21
48
49 #define  BEGIN_FUNC         22
50 #define  END_FUNC           23
51
52 /* Memory tracing */
53 #define  MEMORY_MALLOC      24
54 #define  MEMORY_FREE        25
55
56 /* Trace user supplied data */
57 #define USER_SUPPLIED       26
58
59 /* Trace memory usage */
60 #define MEMORY_USAGE_CURRENT       27
61
62 /* Trace user supplied note (text string)  */
63 #define USER_SUPPLIED_NOTE       28
64
65 /* Trace user supplied note (text string, with start, end times, and user event id)  */
66 #define USER_SUPPLIED_BRACKETED_NOTE       29
67
68 /* Support for Phases and time-partial logs */
69 #define END_PHASE           30
70 #define SURROGATE_BLOCK     31 /* inserted by cluster analysis only */
71
72 #define  USER_EVENT_PAIR    100
73
74 CkpvExtern(CmiInt8, CtrLogBufSize);
75 CkpvExtern(char*, traceRoot);
76 CkpvExtern(char*, partitionRoot);
77 CkpvExtern(int, traceRootBaseLength);
78 CkpvExtern(char*, selective);
79 CkpvExtern(bool, verbose);
80 CkpvExtern(double, traceInitTime);
81 CkpvExtern(double, traceInitCpuTime);
82
83 #if CMK_BIGSIM_CHARM
84 #define  TRACE_TIMER   BgGetTime
85 #define  TRACE_CPUTIMER   BgGetTime
86 inline double TraceTimer() { return TRACE_TIMER(); }
87 inline double TraceTimer(double t) { return t; }
88 inline double TraceCpuTimer() { return TRACE_TIMER(); }
89 inline double TraceCpuTimer(double t) { return t; }
90 #else
91 #define  TRACE_TIMER   CmiWallTimer
92 #define  TRACE_CPUTIMER   CmiCpuTimer
93 inline double TraceTimer() { return TRACE_TIMER() - CkpvAccess(traceInitTime); }
94 inline double TraceTimer(double t) { return t - CkpvAccess(traceInitTime); }
95 inline double TraceCpuTimer() { return TRACE_CPUTIMER() - CkpvAccess(traceInitCpuTime); }
96 inline double TraceCpuTimer(double t) { return t - CkpvAccess(traceInitCpuTime); }
97 #endif
98
99 #define TRACE_WARN(msg) if (CkpvAccess(verbose)) CmiPrintf(msg)
100
101 /** Tracing-specific registered Charm entities: */
102 extern int _threadMsg, _threadChare, _threadEP;
103 extern int _packMsg, _packChare, _packEP;
104 extern int _unpackMsg, _unpackChare, _unpackEP;
105 extern int _sdagMsg, _sdagChare, _sdagEP;
106
107 /** Write out the common parts of the .sts file. */
108 extern void traceWriteSTS(FILE *stsfp,int nUserEvents);
109
110 extern "C" void (*registerMachineUserEvents())();
111
112 #if CMK_HAS_COUNTER_PAPI
113 #include <papi.h>
114 #ifdef USE_SPP_PAPI
115 #define NUMPAPIEVENTS 6
116 #else
117 #define NUMPAPIEVENTS 2
118 #endif
119 CkpvExtern(int, papiEventSet);
120 CkpvExtern(LONG_LONG_PAPI*, papiValues);
121 CkpvExtern(int, papiStarted);
122 CkpvExtern(int, papiStopped);
123 extern int papiEvents[NUMPAPIEVENTS];
124 void initPAPI(); 
125 #endif
126
127 #endif
128
129 /*@}*/