Remove archaic CVS headers
[charm.git] / src / ck-perf / trace-bluegene.h
1 /*****************************************************************************
2  * $Source$
3  * $Author$
4  * $Date$
5  * $Revision$
6  *****************************************************************************/
7
8 /**
9  * \addtogroup CkPerf
10 */
11 /*@{*/
12
13 #ifndef _TRACE_BLUEGENE_H
14 #define _TRACE_BLUEGENE_H
15
16 #include "trace.h"
17
18 // Bigsim emulator specific tracing subroutines.
19 class TraceBluegene : public Trace {
20
21  private:
22     FILE* pfp;
23  public:
24     TraceBluegene(char** argv);
25     ~TraceBluegene();
26     virtual void setTraceOnPE(int flag) { _traceOn = 1; }  // always on
27     int traceOnPE() { return 1; }
28     void getForwardDep(void* log, void** fDepPtr);
29     void getForwardDepForAll(void** logs1, void** logs2, int logsize,void* fDepPtr);
30     void tlineEnd(void** parentLogPtr);
31     void bgAddTag(const char *str);
32     void bgDummyBeginExec(const char* name,void** parentLogPtr, int split);
33     void bgBeginExec(char* msg, char *str);
34     void bgAmpiBeginExec(char *msg, char *str, void **logs, int count);
35     void bgAmpiLog(unsigned short op, unsigned int size);
36     void bgSetInfo(char *msg, const char *str, void **logs, int count);
37     void bgEndExec(int);
38     virtual void beginExecute(envelope *);
39     virtual void beginExecute(CmiObjId *tid) {}
40     virtual void beginExecute(int event,int msgType,int ep,int srcPe, int mlen,CmiObjId *idx);
41     void addBackwardDep(void *log);
42     void userBracketEvent(int eventID, double bt, double et) {} // from trace.h
43     void userBracketEvent(const char* name, double bt, double et, void** parentLogPtr);
44     void userBracketEvent(const char* name, double bt, double et, void** parentLogPtr, CkVec<void*> bgLogList);
45     void bgPrint(const char* str);
46     void bgMark(char* str);
47     void creatFiles();
48     void writePrint(char *, double t);
49     void traceClose();
50 };
51
52 CkpvExtern(TraceBluegene*, _tracebg);
53 extern int traceBluegeneLinked;
54
55 #if CMK_TRACE_ENABLED
56 #  define _TRACE_BG_ONLY(code) do{ BgGetTime(); if(traceBluegeneLinked && CpvAccess(traceOn)){ code; } resetVTime(); } while(0)
57 #else
58 #  define _TRACE_BG_ONLY(code) /*empty*/
59 #endif
60
61 /* tracing for Blue Gene - before trace projector era */
62 #if CMK_TRACE_ENABLED && CMK_TRACE_IN_CHARM
63 // for Sdag only
64 // fixme - think of better api for tracing sdag code
65 #define BgPrint(x)  _TRACE_BG_ONLY(CkpvAccess(_tracebg)->bgPrint(x))
66 #define BgMark_(x)  _TRACE_BG_ONLY(CkpvAccess(_tracebg)->bgMark(x))
67 #define _TRACE_BG_BEGIN_EXECUTE_NOMSG(x,pLogPtr,split)  _TRACE_BG_ONLY(CkpvAccess(_tracebg)->bgDummyBeginExec(x,pLogPtr,split))
68 #define _TRACE_BG_BEGIN_EXECUTE(msg, str)  _TRACE_BG_ONLY(CkpvAccess(_tracebg)->bgBeginExec(msg, str))
69 #define _TRACE_BG_SET_INFO(msg, str, logs, count)  _TRACE_BG_ONLY(CkpvAccess(_tracebg)->bgSetInfo(msg, str, logs, count))
70 #define _TRACE_BG_AMPI_BEGIN_EXECUTE(msg, str, logs, count)  _TRACE_BG_ONLY(CkpvAccess(_tracebg)->bgAmpiBeginExec(msg, str, logs, count))
71 #define _TRACE_BG_END_EXECUTE(commit)   _TRACE_BG_ONLY(CkpvAccess(_tracebg)->bgEndExec(commit))
72 #define _TRACE_BG_TLINE_END(pLogPtr) _TRACE_BG_ONLY(CkpvAccess(_tracebg)->tlineEnd(pLogPtr))
73 #define _TRACE_BG_FORWARD_DEPS(logs1,logs2,size,fDep)  _TRACE_BG_ONLY(CkpvAccess(_tracebg)->getForwardDepForAll(logs1,logs2, size,fDep))
74 #define _TRACE_BG_ADD_BACKWARD_DEP(log)  _TRACE_BG_ONLY(CkpvAccess(_tracebg)->addBackwardDep(log))
75 #define _TRACE_BG_USER_EVENT_BRACKET(x,bt,et,pLogPtr) _TRACE_BG_ONLY(CkpvAccess(_tracebg)->userBracketEvent(x,bt,et,pLogPtr))
76 #define _TRACE_BGLIST_USER_EVENT_BRACKET(x,bt,et,pLogPtr,bgLogList) _TRACE_BG_ONLY(CkpvAccess(_tracebg)->userBracketEvent(x,bt,et,pLogPtr,bgLogList))
77 #define TRACE_BG_ADD_TAG(str)   _TRACE_BG_ONLY(CkpvAccess(_tracebg)->bgAddTag(str))
78
79 # define TRACE_BG_AMPI_LOG(op,size)                                     \
80     _TRACE_BG_ONLY(CkpvAccess(_tracebg)->bgAmpiLog(op,size))
81
82 # define TRACE_BG_AMPI_SUSPEND()     \
83         _TRACE_BG_END_EXECUTE(1); \
84         /* if(CpvAccess(traceOn)) traceSuspend(); */
85
86 # define TRACE_BG_AMPI_START(t, str)  { \
87         void* _bgParentLog = NULL;      \
88         /*_TRACE_BG_TLINE_END(&_bgParentLog);*/ \
89         if(CpvAccess(traceOn) && t) CthTraceResume(t);  \
90         _TRACE_BG_BEGIN_EXECUTE_NOMSG(str, &_bgParentLog, 1);      \
91         }
92
93 # define TRACE_BG_AMPI_BREAK(t, str, event, count, connect)     \
94         {       \
95         void *curLog;    /* store current log in timeline */    \
96         _TRACE_BG_TLINE_END(&curLog);   \
97         TRACE_BG_AMPI_SUSPEND();        \
98         /* TRACE_BG_AMPI_START(t, str);  */  \
99         void * _bgParentLog = NULL;      \
100          _TRACE_BG_BEGIN_EXECUTE_NOMSG(str, &_bgParentLog, 1);  \
101         for(int i=0;i<count;i++) {      \
102                 _TRACE_BG_ADD_BACKWARD_DEP(((void**)event)[i]);      \
103         }       \
104         if (connect) _TRACE_BG_ADD_BACKWARD_DEP(curLog);      \
105         }
106         
107
108 #define TRACE_BG_AMPI_WAITALL(reqs)     \
109         {       \
110         /* TRACE_BG_AMPI_SUSPEND(); */  \
111         CthThread th = getAmpiInstance(MPI_COMM_WORLD)->getThread();    \
112         TRACE_BG_AMPI_BREAK(th, "AMPI_WAITALL", NULL, 0, 0);    \
113         _TRACE_BG_ADD_BACKWARD_DEP(curLog);     \
114         for(int i=0;i<count;i++) {      \
115           if (request[i] == MPI_REQUEST_NULL) continue; \
116           void *log = (*reqs)[request[i]]->event;       \
117           _TRACE_BG_ADD_BACKWARD_DEP(log);      \
118         }       \
119         }
120 extern "C" void BgSetStartEvent();
121 #else
122 # define BgPrint(x)  
123 # define BgMark_(x)  
124 #define _TRACE_BG_BEGIN_EXECUTE_NOMSG(x,pLogPtr,split)
125 #define _TRACE_BG_BEGIN_EXECUTE(msg, str)
126 #define _TRACE_BG_SET_INFO(msg, str, logs, count) 
127 #define _TRACE_BG_AMPI_BEGIN_EXECUTE(msg, str, logs, count)
128 #define _TRACE_BG_END_EXECUTE(commit)
129 #define _TRACE_BG_TLINE_END(x)  
130 #define _TRACE_BG_FORWARD_DEP(logs1,logs2,size,fDep)
131 #define _TRACE_BG_BACKWARD_DEP(log)     
132 #define _TRACE_BG_USER_EVENT_BRACKET(x,bt,et,pLogPtr)
133 #define _TRACE_BGLIST_USER_EVENT_BRACKET(x,bt,et,pLogPtr,bgLogList)
134 #define _TRACE_BG_ADD_TAG(str)
135         
136 # define TRACE_BG_AMPI_LOG(op, size)
137 # define TRACE_BG_AMPI_SUSPEND()
138 # define TRACE_BG_AMPI_RESUME(t, msg, str, log)
139 # define TRACE_BG_AMPI_START(t, str)
140 # define TRACE_BG_NEWSTART(t, str, events, count)
141 # define TRACE_BG_AMPI_BREAK(t, str, event, count)
142 # define TRACE_BG_AMPI_WAITALL(reqs)
143 # define TRACE_BG_AMPI_SET_SIZE(size)
144 #endif   /* CMK_TRACE_IN_CHARM */
145
146 extern "C" void BgPrintf(const char *str);
147 extern "C" void BgMark(char *str);
148
149 #endif
150
151 /*@}*/