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