fixed a bug in node replay.
authorGengbin Zheng <gzheng@illinois.edu>
Sun, 23 May 2010 05:26:35 +0000 (00:26 -0500)
committerGengbin Zheng <gzheng@illinois.edu>
Sun, 23 May 2010 05:26:35 +0000 (00:26 -0500)
modify +wth automatically in case the +wth provided in the command line is not t
he same.

src/langs/bluegene/bigsim_record.C
src/langs/bluegene/blue.C

index 3b2c414c71c7fad94c25000e36bf1fb1c590f555..c024c35b488cc76d05d1a90b5f34457637f43949 100644 (file)
@@ -106,7 +106,10 @@ void BgRead_nodeinfo(int node, int &startpe, int &endpe)
     char fName[128];
     sprintf(fName,"bgnode_%06d.log",node);
     FILE *fp = fopen(fName, "r");
-    CmiAssert(fp!=NULL);
+    if (fp==NULL) {
+      CmiPrintf("BgReplayNode> metadata file for node %d does not exist!\n", node);
+      CmiAbort("BgRead_nodeinfo");
+    }
     fscanf(fp, "%d %d\n", &startpe, &endpe);
     fclose(fp);
 }
index 6126706d2e5df45fe7b7eaf8f65f134ab477cc32..3adc254eaff1722da67b960b3e366aa3a37527f5 100644 (file)
@@ -606,7 +606,7 @@ void nodeBCastMsgHandlerFunc(char *msg)
   if (gnodeID < -1) {
     gnodeID = - (gnodeID+100);
     if (cva(bgMach).replaynode != -1) {
-      if (gnodeID == cva(bgMach).replaynode/cva(bgMach).numWth)
+      if (gnodeID == cva(bgMach).replaynode)
           lnodeID = 0;
       else
           lnodeID = -1;
@@ -672,7 +672,7 @@ void threadBCastMsgHandlerFunc(char *msg)
   if (cva(bgMach).replay != -1) {
     if (gnodeID < -1) {
       gnodeID = - (gnodeID+100);
-      if (gnodeID == cva(bgMach).replaynode/cva(bgMach).numWth && threadID == cva(bgMach).replaynode%cva(bgMach).numWth)
+      if (gnodeID == cva(bgMach).replay/cva(bgMach).numWth && threadID == cva(bgMach).replay%cva(bgMach).numWth)
         return;
     }
     CmiBgMsgThreadID(msg) = 0;
@@ -684,7 +684,7 @@ void threadBCastMsgHandlerFunc(char *msg)
   if (gnodeID < -1) {
       gnodeID = - (gnodeID+100);
       if (cva(bgMach).replaynode != -1) {
-        if (gnodeID == cva(bgMach).replaynode/cva(bgMach).numWth)
+        if (gnodeID == cva(bgMach).replaynode)
           lnodeID = 0;
         else
           lnodeID = -1;
@@ -978,7 +978,7 @@ void BgSendLocalPacket(int threadID, int handlerID, WorkType type,
 {
   nodeInfo *myNode = cta(threadinfo)->myNode;
 
-  if (cva(bgMach).inReplayMode()) {     // replay mode
+  if (cva(bgMach).replay!=-1) {     // replay mode
     threadID = 0;
     CmiAssert(threadID != -1);
   }
@@ -1617,6 +1617,12 @@ CmiStartFn bgMain(int argc, char **argv)
     cva(bgMach).replaynode = 0;    // default to 0
   }
   if (cva(bgMach).replaynode >= 0) {
+    int startpe, endpe;
+    BgRead_nodeinfo(replaynode, startpe, endpe);
+    if (cva(bgMach).numWth != endpe-startpe+1) {
+      cva(bgMach).numWth = endpe-startpe+1;     // update wth
+      CmiPrintf("BG info> numWth is changed to %d.\n", cva(bgMach).numWth);
+    }
     if (CmiNumPes()>1)
       CmiAbort("BG> bgreplay mode must run on one physical processor.");
     if (cva(bgMach).x!=1 || cva(bgMach).y!=1 || cva(bgMach).z!=1)