change the function API to write trace logs.
authorGengbin Zheng <gzheng@illinois.edu>
Fri, 15 Aug 2008 19:26:56 +0000 (19:26 +0000)
committerGengbin Zheng <gzheng@illinois.edu>
Fri, 15 Aug 2008 19:26:56 +0000 (19:26 +0000)
src/langs/bluegene/bigsim_api.C
src/langs/bluegene/bigsim_logs.h
src/langs/bluegene/blue.C

index d5318ddf1cdf7cdb81e6ee21c3e38b5f96fe2fe0..4f09ece4cea141a7a4dedeae026eb6867f475860 100644 (file)
@@ -38,6 +38,11 @@ void BgEndLastLog(BgTimeLineRec &tlinerec)
   tlinerec.logEntryClose();
 }
 
+//
+// BigSim APIs for writing trace log files
+//
+
+//  dump timeline into ASCII format
 void BgWriteThreadTimeLine(char *pgm, int x, int y, int z, int th, BgTimeLine &tline)
 {
   char *fname = (char *)malloc(strlen(pgm)+100);
@@ -52,6 +57,7 @@ void BgWriteThreadTimeLine(char *pgm, int x, int y, int z, int th, BgTimeLine &t
   free(fname);
 }
 
+// write bgTrace file
 void BgWriteTraceSummary(int numPes, int x, int y, int z, int numWth, int numCth, char *traceroot)
 {
   char* d = new char[512];
@@ -84,7 +90,14 @@ void BgWriteTraceSummary(int numPes, int x, int y, int z, int numWth, int numCth
   fclose(f);
 }
 
-void BgWriteTimelines(int seqno, BgTimeLineRec *tlinerecs, int nlocalProcs, int numWth, char *traceroot)
+// write bgTrace<seqno> file with an array of timelines
+//
+// note that target processors are mapped to bgTrace* files in round-robin 
+// fashion
+// that is "tlinerecs" should contains timelines of target processors of 
+//   i, i+p, i+2p ..., where p is the number of emulating processors, i.e.
+//   the number of bgTrace* files to write.
+void BgWriteTimelines(int seqno, BgTimeLineRec **tlinerecs, int nlocalProcs, char *traceroot)
 {
   int *procOffsets = new int[nlocalProcs];
 
@@ -102,11 +115,11 @@ void BgWriteTimelines(int seqno, BgTimeLineRec *tlinerecs, int nlocalProcs, int
   int procTableSize = (nlocalProcs)*sizeof(int);
   fseek(f,procTableSize,SEEK_CUR); 
 
-  int numNodes = nlocalProcs / numWth;
+//  int numNodes = nlocalProcs / numWth;
   for(int i=0;i<nlocalProcs;i++) {
-    BgTimeLineRec &t = tlinerecs[i];
+    BgTimeLineRec *t = tlinerecs[i];
     procOffsets[i] = ftell(f);
-    t.pup(p);
+    t->pup(p);
   }
   
   fseek(f,procTablePos,SEEK_SET);
@@ -116,3 +129,4 @@ void BgWriteTimelines(int seqno, BgTimeLineRec *tlinerecs, int nlocalProcs, int
   CmiPrintf("BgWriteTimelines> Wrote to disk for %d simulated nodes. \n", nlocalProcs);
   delete [] d;
 }
+
index 451c37c8fc6e169ce599e4753e795b69fc23ef21..ea2e654ac2647a7364838139fa6fd3f2ff173bfe 100644 (file)
@@ -314,7 +314,7 @@ int BgReadProc(int procNum, int numWth, int numPes, int totalProcs, int* allNode
 int* BgLoadOffsets(int totalProcs, int numPes);
 void BgWriteThreadTimeLine(char *fname, int x, int y, int z, int th, BgTimeLine &tline);
 void BgWriteTraceSummary(int numPes, int x, int y=1, int z=1, int numWth=1, int numCth=1, char *traceroot=NULL);
-void BgWriteTimelines(int seqno, BgTimeLineRec *tlinerecs, int nlocalProcs, int numWth=1, char *traceroot=NULL);
+void BgWriteTimelines(int seqno, BgTimeLineRec **tlinerecs, int nlocalNodes, char *traceroot=NULL);
 extern "C" void BgGenerateLogs();
 
 #endif
index 6d54b131146bf707f86fbe00333dafcbd9f1e943..a5b1b8302e8e03bfbb4d0050c30e0fca6c037dd7 100644 (file)
@@ -1670,7 +1670,7 @@ static void writeToDisk()
 
   char* d = new char[1025];
   //Num of simulated procs on this real pe
-  int numProcs = cva(numNodes)*cva(bgMach).numWth;
+  int numLocalProcs = cva(numNodes)*cva(bgMach).numWth;
 
   const PUP::machineInfo &machInfo = PUP::machineInfo::current();
 
@@ -1679,7 +1679,7 @@ static void writeToDisk()
     
     sprintf(d, "%sbgTrace", cva(bgMach).traceroot?cva(bgMach).traceroot:""); 
     FILE *f2 = fopen(d,"w");
-    //Total real and toal BG processors
+    //Total emulating processors and total target BG processors
     int numPes=CmiNumPes();
     int totalProcs = BgNumNodes()*cva(bgMach).numWth;
 
@@ -1702,17 +1702,18 @@ static void writeToDisk()
   sprintf(d, "%sbgTrace%d", cva(bgMach).traceroot?cva(bgMach).traceroot:"", CmiMyPe()); 
   FILE *f = fopen(d,"w");
  
-  int *procOffsets = new int[numProcs];
   if(f==NULL)
     CmiPrintf("Creating bgTrace%d failed\n",CmiMyPe());
   PUP::toDisk p(f);
   
   p((char *)&machInfo, sizeof(machInfo));      // machine info
-  p|numProcs;
+  p|numLocalProcs;
 
   // CmiPrintf("Timelines are: \n");
   int procTablePos = ftell(f);
-  int procTableSize = (numProcs)*sizeof(int);
+
+  int *procOffsets = new int[numLocalProcs];
+  int procTableSize = (numLocalProcs)*sizeof(int);
   fseek(f,procTableSize,SEEK_CUR); 
 
   for (int j=0; j<cva(numNodes); j++){
@@ -1724,7 +1725,7 @@ static void writeToDisk()
   }
   
   fseek(f,procTablePos,SEEK_SET);
-  p(procOffsets,numProcs);
+  p(procOffsets,numLocalProcs);
   fclose(f);
 
   CmiPrintf("[%d] Wrote to disk for %d BG nodes. \n", CmiMyPe(), cva(numNodes));