Adding trace calls
[charm.git] / examples / bigsim / tools / rewritelog / traceBigSim / traceBigSim.h
1 /**
2  *  @author Isaac Dooley
3  *  
4  *  This version is quite different than the initial version.
5  */     
6
7 // CMK_BLUEGENE_CHARM is used during the emulation phase, 
8 // where you genereate the bgTrace logs and the parameter files
9
10 #ifdef CMK_BLUEGENE_CHARM
11 #include "blue.h"
12 #include "blue_impl.h"
13 #endif
14 #include <stdio.h>
15
16
17 CkpvExtern(FILE *, bgfp);
18
19 extern void initBigSimTrace();
20 extern void finalizeBigSimTrace();
21
22 CkpvExtern(unsigned long, bgTraceCounter);
23
24 #endif
25
26 void initBigSimTrace();
27 void finalizeBigSimTrace();
28 void BgSetStartEvent();
29
30
31 //======================PAPI======================= 
32 #define BIG_SIM_PAPI
33
34 #ifdef BIG_SIM_PAPI
35
36 #include <papi.h>
37
38 #define NUM_PAPI_EVENTS 3
39 #define BIGSIM_PAPI
40
41 int errorcode; 
42 int events[NUM_PAPI_EVENTS];
43 long long values[NUM_PAPI_EVENTS]; 
44 char errorstring[PAPI_MAX_STR_LEN+1]; 
45
46 #endif
47 //================================================= 
48
49
50 /** @TODO, wrap this with Ckpv */
51 double startTime;
52 char paramString[1024];
53
54
55 /** A function that starts the bigsim tracing processes with up to 20 parameters. The user should use one of the 20 aliases below which takes the right number of parameters. */
56 void startTraceBigSim_20param( int num_params, double p1 , double p2 , double p3 , double p4 , double p5 , double p6 , double p7 , double p8 , double p9 , double p10 , double p11 , double p12 , double p13 , double p14 , double p15 , double p16 , double p17 , double p18 , double p19 , double p20 ) 
57 {
58
59   sprintf(paramString, "params:{ count=%d}", num_params);
60
61   SimParameters *simParams = Node::Object()->simParameters;
62   if(simParams->bgSplitNumProcs != -1 && simParams->bgSplitMyProc!=-1){
63         if( (CkpvAccess(bgTraceCounter) % simParams->bgSplitNumProcs) == simParams->bgSplitMyProc){
64           // Do slow mambo simulation for this case!
65           CkPrintf("TRACEBIGSIM: Doing cycle accurate simulation for interesting event #%lu\n", CkpvAccess(bgTraceCounter) );
66         }
67         CkpvAccess(bgTraceCounter) ++;
68   }
69   
70   startTime = CmiWallTimer();
71
72
73 #ifdef BIGSIM_PAPI
74     events[0] = PAPI_TOT_CYC;
75     events[1] = PAPI_TLB_TL;
76     events[2] = PAPI_FP_INS;
77
78 /* Other available events:
79                                         PAPI_BR_INS,
80                                         PAPI_BR_MSP,
81                                         PAPI_FP_INS,
82                                         PAPI_TOT_INS,
83                                         PAPI_TOT_IIS,
84                                         PAPI_L1_DCM,
85                                         PAPI_L1_LDM,
86                                         PAPI_L2_TCM,
87                                         PAPI_L3_LDM,
88                                         PAPI_RES_STL,
89                                         PAPI_LD_INS,
90                                         PAPI_TLB_TL  
91 */
92
93     errorcode = PAPI_start_counters(events, NUM_PAPI_EVENTS);
94     if (errorcode != PAPI_OK) {
95         PAPI_perror(errorcode, errorstring, PAPI_MAX_STR_LEN);
96         fprintf(stderr, "PAPI error after start_counters (%d): %s\n", errorcode, errorstring);
97     }
98
99 #endif
100   
101 }
102   
103
104
105 /** 
106         startTraceBigSim() begins tracing an event with a specified set of parameters. These are convenience
107         aliases so that a user can easily add/remove parameters while testing their application.
108         Up to 20 parameters can be specified. These just call through to startTraceBigSim_20param().
109 */
110 void startTraceBigSim()   
111         {startTraceBigSim_20param(0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);}
112 void startTraceBigSim(double p1)   
113         {startTraceBigSim_20param(1, p1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);}
114 void startTraceBigSim(double p1, double p2)   
115         {startTraceBigSim_20param(2, p1, p2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);}
116 void startTraceBigSim(double p1, double p2, double p3)   
117         {startTraceBigSim_20param(3, p1, p2, p3, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);}
118 void startTraceBigSim(double p1, double p2, double p3, double p4)   
119         {startTraceBigSim_20param(4, p1, p2, p3, p4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);}
120 void startTraceBigSim(double p1, double p2, double p3, double p4, double p5)   
121         {startTraceBigSim_20param(5, p1, p2, p3, p4, p5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);}
122 void startTraceBigSim(double p1, double p2, double p3, double p4, double p5, double p6)   
123         {startTraceBigSim_20param(6, p1, p2, p3, p4, p5, p6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);}
124 void startTraceBigSim(double p1, double p2, double p3, double p4, double p5, double p6, double p7)   
125         {startTraceBigSim_20param(7, p1, p2, p3, p4, p5, p6, p7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);}
126 void startTraceBigSim(double p1, double p2, double p3, double p4, double p5, double p6, double p7, double p8)   
127         {startTraceBigSim_20param(8, p1, p2, p3, p4, p5, p6, p7, p8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);}
128 void startTraceBigSim(double p1, double p2, double p3, double p4, double p5, double p6, double p7, double p8, double p9)   
129         {startTraceBigSim_20param(9, p1, p2, p3, p4, p5, p6, p7, p8, p9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);}
130 void startTraceBigSim(double p1, double p2, double p3, double p4, double p5, double p6, double p7, double p8, double p9, double p10)   
131         {startTraceBigSim_20param(10, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);}
132 void startTraceBigSim(double p1, double p2, double p3, double p4, double p5, double p6, double p7, double p8, double p9, double p10, double p11)   
133         {startTraceBigSim_20param(11, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);}
134 void startTraceBigSim(double p1, double p2, double p3, double p4, double p5, double p6, double p7, double p8, double p9, double p10, double p11, double p12)   
135         {startTraceBigSim_20param(12, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);}
136 void startTraceBigSim(double p1, double p2, double p3, double p4, double p5, double p6, double p7, double p8, double p9, double p10, double p11, double p12, double p13)   
137         {startTraceBigSim_20param(13, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);}
138 void startTraceBigSim(double p1, double p2, double p3, double p4, double p5, double p6, double p7, double p8, double p9, double p10, double p11, double p12, double p13, double p14)   
139         {startTraceBigSim_20param(14, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);}
140 void startTraceBigSim(double p1, double p2, double p3, double p4, double p5, double p6, double p7, double p8, double p9, double p10, double p11, double p12, double p13, double p14, double p15)   
141         {startTraceBigSim_20param(15, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, 0.0, 0.0, 0.0, 0.0, 0.0);}
142 void startTraceBigSim(double p1, double p2, double p3, double p4, double p5, double p6, double p7, double p8, double p9, double p10, double p11, double p12, double p13, double p14, double p15, double p16)   
143         {startTraceBigSim_20param(16, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, 0.0, 0.0, 0.0, 0.0);}
144 void startTraceBigSim(double p1, double p2, double p3, double p4, double p5, double p6, double p7, double p8, double p9, double p10, double p11, double p12, double p13, double p14, double p15, double p16, double p17)   
145         {startTraceBigSim_20param(17, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, 0.0, 0.0, 0.0);}
146 void startTraceBigSim(double p1, double p2, double p3, double p4, double p5, double p6, double p7, double p8, double p9, double p10, double p11, double p12, double p13, double p14, double p15, double p16, double p17, double p18)   
147         {startTraceBigSim_20param(18, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, 0.0, 0.0);}
148 void startTraceBigSim(double p1, double p2, double p3, double p4, double p5, double p6, double p7, double p8, double p9, double p10, double p11, double p12, double p13, double p14, double p15, double p16, double p17, double p18, double p19)   
149         {startTraceBigSim_20param(19, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, 0.0);}
150 void startTraceBigSim(double p1, double p2, double p3, double p4, double p5, double p6, double p7, double p8, double p9, double p10, double p11, double p12, double p13, double p14, double p15, double p16, double p17, double p18, double p19, double p20)   
151         {startTraceBigSim_20param(20, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20);}
152
153
154
155
156
157
158 void endTraceBigSim(char * eventname) {
159     char perfCountString[1024]; 
160     perfCountString[0] = 0; 
161  
162 #ifdef BIGSIM_PAPI
163     errorcode = PAPI_read_counters(values, NUM_PAPI_EVENTS); 
164     if (errorcode != PAPI_OK) { 
165         PAPI_perror(errorcode, errorstring, PAPI_MAX_STR_LEN); 
166         fprintf(stderr, "PAPI error after read counters (%d): %s\n", errorcode, errorstring); 
167     } else { 
168         sprintf(perfCountString, 
169                 " PAPI:{ %lld %lld %lld }", 
170                 values[0], 
171                 values[1],
172                 values[2] 
173                 ); 
174     } 
175
176     errorcode = PAPI_stop_counters(values, NUM_PAPI_EVENTS);
177     if (errorcode != PAPI_OK) { 
178         PAPI_perror(errorcode, errorstring, PAPI_MAX_STR_LEN); 
179         fprintf(stderr, "PAPI error after stop counters (%d): %s\n", errorcode, errorstring); 
180     } 
181 #endif
182         double endTime = CmiWallTimer();
183  
184   char timeString[256];
185   sprintf(timeString, "time:{ %f }", endTime-startTime);
186
187   SimParameters *simParams = Node::Object()->simParameters;
188   if(simParams->bgSplitNumProcs != -1 && simParams->bgSplitMyProc!=-1){
189         if( (CkpvAccess(bgTraceCounter) % simParams->bgSplitNumProcs) == simParams->bgSplitMyProc){
190           // Do slow mambo simulation for this case!
191           // Counter is incremented only in startTraceBigSim()
192         }
193   }
194 //  fprintf(CkpvAccess(bgfp),"%s\n",params);
195
196
197   char sequenceString[1024];
198   sequenceString[0] = 0;
199 #ifdef CMK_BLUEGENE_CHARM
200   sprintf();
201
202   BgPrint("endTraceBigSim %f\n");
203   // write event ID
204   int seqno = tTIMELINEREC.length()-1;
205   //  fprintf(CkpvAccess(bgfp),"%d ",seqno);
206   sprintf(sequenceString, "seqno: { %d } ",seqno);
207
208 #endif
209   fprintf(CkpvAccess(bgfp),"%s\n",params);
210
211   
212 #ifdef CMK_BLUEGENE_CHARM
213   printf(CkpvAccess(bgfp), "TRACEBIGSIM: event:{ %s } %s %s %s %s\n", eventname, sequenceString, timeString, perfCountString, paramString);
214 #else
215   printf("TRACEBIGSIM: event:{ %s } %s %s %s %s\n", eventname, sequenceString, timeString, perfCountString, paramString);  
216 #endif
217
218
219 }
220
221
222