add in log summary the meaning of the thread_resume_ep, so that loadlog can tell...
[charm.git] / src / langs / bluegene / bigsim_read.C
1 #include "blue.h"
2 #include "blue_impl.h"
3 #include "blue_types.h"
4 #include "bigsim_logs.h"
5 #include "assert.h"
6
7 BgTimeLineRec* currTline = NULL;
8 int currTlineIdx=0;
9
10 //Used for parallel file I/O
11 int BgReadProc(int procNum, int numWth ,int numPes, int totalProcs, int* allNodeOffsets, BgTimeLineRec& tlinerec){
12
13   /*Right now works only for cyclicMapInfo - needs a more general scheme*/
14   int nodeNum = procNum/numWth;
15   int numNodes = totalProcs/numWth;
16   int fileNum = nodeNum%numPes;
17   int arrayID=0, fileOffset;
18   char fName[20];
19   //BgTimeLineRec* tlinerec = new BgTimeLineRec;
20   
21   currTline = &tlinerec;
22
23   for(int i=0;i<fileNum;i++)
24     arrayID += (numNodes/numPes + ((i < numNodes%numPes)?1:0))*numWth;
25   
26   arrayID += (nodeNum/numPes)*numWth + procNum%numWth;
27   fileOffset = allNodeOffsets[arrayID];
28
29    //   CmiPrintf("nodeNum: %d arrayId:%d numNodes:%d numPes:%d\n",nodeNum,arrayID,numNodes,numPes);
30  
31   sprintf(fName,"bgTrace%d",fileNum);
32   FILE*  f = fopen(fName,"r");
33   if (f == NULL) {
34     printf("Error> Open failed with %s. \n", fName);
35     return -1;
36   }
37 //  PUP::fromDisk p(f);
38   PUP::fromDisk pd(f);
39   PUP::machineInfo machInfo;
40   pd((char *)&machInfo, sizeof(machInfo));
41   if (!machInfo.valid()) CmiAbort("Invalid machineInfo on disk file!\n");
42   PUP::xlater p(machInfo, pd);
43
44   fseek(f,fileOffset,SEEK_SET);
45   tlinerec.pup(p);
46   fclose(f);
47
48   currTline = NULL;
49   return fileNum;
50 }
51
52
53 // user has to remember to free allProcOffsets
54 int* BgLoadOffsets(int totalProcs, int numPes){
55
56   int* allProcOffsets = new int[totalProcs];
57   int arrayOffset=0, procsInPe;
58   char d[128];
59
60   PUP::machineInfo machInfo;
61   for (int i=0; i<numPes; i++){
62     sprintf(d,"bgTrace%d",i);
63     FILE *f = fopen(d,"r");
64     if (f == NULL) {
65       CmiPrintf("BgLoadOffsets: can not open file %s!\n", d);
66       CmiAbort("BgLoadOffsets failed!\n");
67     }  
68     PUP::fromDisk pd(f);
69     pd((char *)&machInfo, sizeof(machInfo));
70     PUP::xlater p(machInfo, pd);
71     if (!machInfo.valid()) CmiAbort("Invalid machineInfo on disk file!\n");
72     p|procsInPe;
73
74     p(allProcOffsets+arrayOffset,procsInPe);
75     arrayOffset += procsInPe;
76     fclose(f);
77   }
78   return  allProcOffsets;
79 }
80
81 static int thread_ep = -1;
82
83 int BgLoadTraceSummary(const char *fname, int &totalProcs, int &numX, int &numY, int &numZ, int &numCth, int &numWth, int &numPes)
84 {
85   BGMach  bgMach ;
86   PUP::machineInfo machInfo;
87
88   FILE* f = fopen(fname,"r");
89   if (f == NULL) {
90     printf("Error> Open failed with %s. \n", fname);
91     return -1;
92   }
93
94   PUP::fromDisk pd(f);
95   pd((char *)&machInfo, sizeof(machInfo));      // load machine info
96   if (!machInfo.valid()) CmiAbort("Invalid machineInfo on disk file!\n");
97   PUP::xlater p(machInfo, pd);
98   p|totalProcs;
99   p|bgMach;
100   numX = bgMach.x;
101   numY = bgMach.y;
102   numZ = bgMach.z;
103   numCth = bgMach.numCth;
104   numWth = bgMach.numWth;
105   p|numPes;
106
107   bglog_version = 0;
108   if (!feof(f)) p|bglog_version;
109
110   if (!feof(f)) p|thread_ep;
111
112   fclose(f);
113   return 0;
114 }
115
116
117 int BgLogGetThreadEP()
118 {
119   return thread_ep;
120 }
121