NODE_CHECKPOINT now works for SMP
authorGengbin Zheng <gzheng@illinois.edu>
Wed, 15 Feb 2012 05:27:16 +0000 (21:27 -0800)
committerGengbin Zheng <gzheng@illinois.edu>
Wed, 15 Feb 2012 05:27:16 +0000 (21:27 -0800)
src/ck-core/ckmemcheckpoint.C

index d75e530626a1555c1a19027255e117bfb7e327a4..570a9ec12688895cd2514329c5163a4d43b57fb1 100644 (file)
@@ -51,7 +51,7 @@ void noopck(const char*, ...)
 {}
 
 
-//#define DEBUGF      // CkPrintf
+//#define DEBUGF       CkPrintf
 #define DEBUGF noopck
 
 
@@ -151,7 +151,7 @@ void ArrayElement::init_checkpt() {
 // entry function invoked by checkpoint mgr asking for checkpoint data
 void ArrayElement::inmem_checkpoint(CkArrayCheckPTReqMessage *m) {
 #if CMK_MEM_CHECKPOINT
-  //DEBUGF("[p%d] HERE checkpoint to %d %d \n", CkMyPe(), budPEs[0], budPEs[1]);
+//  DEBUGF("[p%d] HERE checkpoint to PE %d %d \n", CkMyPe(), budPEs[0], budPEs[1]);
 //char index[128];   thisIndexMax.sprint(index);
 //printf("[%d] checkpointing %s\n", CkMyPe(), index);
   CkLocMgr *locMgr = thisArray->getLocMgr();
@@ -502,7 +502,7 @@ void CkMemCheckPT::sendProcData()
   }
   int packSize = size;
   CkProcCheckPTMessage *msg = new (packSize, 0) CkProcCheckPTMessage;
-  DEBUGF("[%d] CkMemCheckPT::sendProcData - size: %d\n", CkMyPe(), size);
+  DEBUGF("[%d] CkMemCheckPT::sendProcData - size: %d to %d\n", CkMyPe(), size, ChkptOnPe(CkMyPe()));
   {
     PUP::toMem p(msg->packData);
     _handleProcData(p);
@@ -618,7 +618,12 @@ inline int CkMemCheckPT::isMaster(int buddype)
   if (CkNumPes() - totalFailed() == 2) {
     return mype < buddype;
   }
+#if NODE_CHECKPOINT
+  int pe_per_node = CmiNumPesOnPhysicalNode(CmiPhysicalNodeID(mype));
+  for (int i=pe_per_node; i<CkNumPes(); i+=pe_per_node) {
+#else
   for (int i=1; i<CkNumPes(); i++) {
+#endif
     int me = (mype+i)%CkNumPes();
     if (isFailed(me)) continue;
     if (me == buddype) return 1;
@@ -677,7 +682,7 @@ void CkMemCheckPT::resetLB(int diepe)
 #endif
 
   // if I am the crashed pe, rebuild my failedPEs array
-  if (CkMyPe() == diepe)
+  if (CkMyNode() == diepe)
     for (i=0; i<CkNumPes(); i++) 
       if (bitmap[i]==0) failed(i);