a new example of how to change bgtrace logs/
[charm.git] / examples / bigsim / tools / changelog / changelog.C
1
2 #include <math.h>
3 #include "blue.h"
4 #include "blue_impl.h"
5
6 #define OUTPUTDIR "newtraces/"
7
8 extern BgTimeLineRec* currTline;
9 extern int currTlineIdx;
10
11 int main()
12 {
13   int totalProcs, numX, numY, numZ, numCth, numWth, numPes;
14
15   // load bg trace summary file
16   printf("Loading bgTrace ... \n");
17   int status = BgLoadTraceSummary("bgTrace", totalProcs, numX, numY, numZ, numCth, numWth, numPes);
18   if (status == -1) exit(1);
19   printf("========= BgLog Version: %d ========= \n", bglog_version);
20   printf("Found %d (%dx%dx%d:%dw-%dc) simulated procs on %d real procs.\n", totalProcs, numX, numY, numZ, numWth, numCth, numPes);
21                                                                                 
22   int* allNodeOffsets = BgLoadOffsets(totalProcs,numPes);
23
24   // load timelines from each emulating processor
25   for (int i=0; i<numPes; i++) 
26   {
27     BgTimeLineRec *tlinerecs = new BgTimeLineRec[totalProcs/numPes+1];
28     int rec_count = 0;
29
30       // procNum is the target PE on this emulating processor
31     for(int procNum=i;procNum<totalProcs;procNum+=numPes){
32
33       BgTimeLineRec &tlinerec = tlinerecs[rec_count];
34       rec_count++;
35
36       currTline = &tlinerec;
37       currTlineIdx = procNum;
38       int fileNum = BgReadProc(procNum,numWth,numPes,totalProcs,allNodeOffsets,tlinerec);
39       CmiAssert(fileNum != -1 && fileNum==i);
40       printf("Loading bglog of proc %d from bgTrace%d succeed. \n", procNum, fileNum);
41                                                                                 
42       BgTimeLine &timeLine = tlinerec.timeline;
43
44       // some senity checking
45       printf("Proc %d has %d events. \n", procNum, timeLine.length());
46       for (int idx = 0; idx < timeLine.length(); idx ++)
47       {
48         BgTimeLog *bglog = timeLine[idx];
49         for(int midx=0; midx < bglog->msgs.length(); midx++){
50           BgMsgEntry *msg = bglog->msgs[midx];
51           if (msg->sendTime < bglog->startTime || msg->sendTime > bglog->endTime)
52             printf("[%d] Invalid MsgEntry [%d]: sendTime: %f in log startT: %f endT: %f execT: %f\n", i, idx, msg->sendTime, bglog->startTime, bglog->endTime, bglog->execTime);
53         }  
54       }
55
56     }
57     BgWriteTimelines(i,tlinerecs,rec_count,OUTPUTDIR);
58     delete[] tlinerecs;
59   }
60
61   delete [] allNodeOffsets;
62   printf("End of program\n");
63 }
64