e4d787221984d5b5751bf7815ba63362463e9678
[charm.git] / examples / bigsim / tools / log2proj / log2proj.C
1
2 #include <math.h>
3 #include "log2proj.decl.h"
4 #include "blue.h"
5 #include "blue_impl.h"
6 #include "bigsim_logs.h"
7 #include "charm++.h"
8 #include "trace-projections.h"
9
10 extern BgTimeLineRec* currTline;
11 extern int currTlineIdx;
12
13 class Main : public Chare
14 {
15 public:
16 Main(CkArgMsg* m)
17 {
18   int totalProcs, numX, numY, numZ, numCth, numWth, numPes;
19
20   // load bg trace summary file
21   printf("Loading bgTrace ... \n");
22   int status = BgLoadTraceSummary("bgTrace", totalProcs, numX, numY, numZ, numCth, numWth, numPes);
23   if (status == -1) exit(1);
24   printf("========= BgLog Version: %d ========= \n", bglog_version);
25   printf("Found %d (%dx%dx%d:%dw-%dc) simulated procs on %d real procs.\n", totalProcs, numX, numY, numZ, numWth, numCth, numPes);
26                                                                                 
27   int* allNodeOffsets = BgLoadOffsets(totalProcs,numPes);
28
29   // load each individual trace file for each bg proc
30   for (int i=0; i<totalProcs; i++) 
31   {
32     BgTimeLineRec tline;
33     int procNum = i;
34     currTline = &tline;
35     currTlineIdx = procNum;
36     int fileNum = BgReadProc(procNum,numWth,numPes,totalProcs,allNodeOffsets,tline);
37     CmiAssert(fileNum != -1);
38     printf("Loading bglog of proc %d from bgTrace%d succeed. \n", i, fileNum);
39                                                                                 
40     // some senity checking and generate projection log
41     printf("Proc %d has %d logs. \n", i, tline.length());
42     char fname[128];
43     sprintf(fname, "%s.%d.log", "app", procNum);
44     FILE *lf = fopen(fname, "w");
45     fprintf(lf, "PROJECTIONS-RECORD\n");
46     printf("generate projections log %s\n", fname);
47     toProjectionsFile p(lf);
48     LogEntry *foo = new LogEntry(0.0, 6);
49     foo->pup(p);
50
51     double lastT = 0;
52     for (int idx = 0; idx < tline.length(); idx ++)
53     {
54       BgTimeLog *bglog = tline[idx];
55 #if 1
56       if (fabs(bglog->execTime - ( bglog->endTime - bglog->startTime)) > 1e-6)
57         printf("Invalid log [%d,%d]: startT: %f endT: %f execT: %f\n", i, idx,
58                bglog->startTime, bglog->endTime, bglog->execTime);
59 #endif
60
61       LogEntry *beginLog = new LogEntry(bglog->startTime, 2);
62       beginLog->event = bglog->msgId.msgID();
63       beginLog->pe = bglog->msgId.node();
64       beginLog->eIdx = bglog->charm_ep==-1?0:bglog->charm_ep; 
65       beginLog->pup(p);
66       delete beginLog;
67
68       for(int midx=0; midx < bglog->msgs.length(); midx++){
69         BgMsgEntry *msg = bglog->msgs[midx];
70         if (msg->sendTime < bglog->startTime || msg->sendTime > bglog->endTime)
71           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);
72         LogEntry *sendLog = new LogEntry(msg->sendTime, 1);
73         sendLog->event = msg->msgID;
74         sendLog->pup(p);
75         delete sendLog;
76       }
77
78       LogEntry *endLog = new LogEntry(bglog->startTime+bglog->execTime, 3);
79       endLog->pup(p);
80       delete endLog;
81       lastT = bglog->endTime;
82     }
83
84     foo = new LogEntry(lastT, 7);
85     foo->pup(p);
86     fclose(lf);
87   }
88
89   delete [] allNodeOffsets;
90   printf("End of program\n");
91 }
92
93 };
94
95 #include "log2proj.def.h"