5d3d0d132d6d4afa5e74fe50c58ca2b8b486edfb
[charm.git] / examples / bigsim / tools / loadlog / loadlog.C
1
2 #include <math.h>
3 #include "blue.h"
4 #include "blue_impl.h"
5
6 extern BgTimeLineRec* currTline;
7 extern int currTlineIdx;
8
9 int main()
10 {
11   int totalProcs, numX, numY, numZ, numCth, numWth, numPes;
12
13   // load bg trace summary file
14   printf("Loading bgTrace ... \n");
15   int status = BgLoadTraceSummary("bgTrace", totalProcs, numX, numY, numZ, numCth, numWth, numPes);
16   if (status == -1) exit(1);
17   printf("========= BgLog Version: %d ========= \n", bglog_version);
18   printf("Found %d (%dx%dx%d:%dw-%dc) simulated procs on %d real procs.\n", totalProcs, numX, numY, numZ, numWth, numCth, numPes);
19                                                                                 
20   int* allNodeOffsets = BgLoadOffsets(totalProcs,numPes);
21
22   // load each individual trace file for each bg proc
23   for (int i=0; i<totalProcs; i++) 
24   {
25     BgTimeLineRec tline;
26     int procNum = i;
27     currTline = &tline;
28     currTlineIdx = procNum;
29     int fileNum = BgReadProc(procNum,numWth,numPes,totalProcs,allNodeOffsets,tline);
30     CmiAssert(fileNum != -1);
31     printf("Loading bglog of proc %d from bgTrace%d succeed. \n", i, fileNum);
32                                                                                 
33     // some senity checking
34     printf("Proc %d has %d events. \n", i, tline.length());
35     for (int idx = 0; idx < tline.length(); idx ++)
36     {
37       BgTimeLog *bglog = tline[idx];
38 #if 1
39       if (fabs(bglog->execTime - ( bglog->endTime - bglog->startTime)) > 1e-6)
40         printf("Error: Invalid log [%d,#%d]: startT: %f endT: %f execT: %f\n", 
41                i, idx, bglog->startTime, bglog->endTime, bglog->execTime);
42 #endif
43       int bDepLen = bglog->backwardDeps.length();
44       if (bDepLen>0 && bglog->msgId.pe()!=-1) {
45         if (bglog->msgId.pe() != i) {
46           printf("Error: [%d] Invalid log entry --- bDepLen:%d from PE %d\n", i, bDepLen, bglog->msgId.pe());
47         }
48       }
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     // dump bg timeline log to disk in ASCII format
57     BgWriteThreadTimeLine("detail", 0, 0, 0, procNum, tline.timeline);
58   }
59
60   delete [] allNodeOffsets;
61   printf("End of program\n");
62 }
63