scheme for checkpoint group data
authorNikhil Jain <nikhil@illinois.edu>
Wed, 24 Oct 2012 09:01:46 +0000 (09:01 +0000)
committerNikhil Jain <nikhil@illinois.edu>
Wed, 24 Oct 2012 09:01:46 +0000 (09:01 +0000)
src/ck-core/ckcheckpoint.C
src/ck-core/cklocation.C
src/ck-core/ckmemcheckpoint.C
src/ck-ldb/HybridBaseLB.C

index e3b513b96cdfb1ce847f63bb582b36c098e86f54..332c71133834e15720388f4d070f404ffd805690 100644 (file)
@@ -440,6 +440,8 @@ void CkPupGroupData(PUP::er &p)
           gobj->pup(p);
           DEBCHK("Group PUP'ed: gid = %d, name = %s\n",
                        gobj->ckGetGroupID().idx, tmpInfo[i].name);
+      //   CkPrintf("Group PUP'ed: gid = %d, name = %s\n",
+                       //gobj->ckGetGroupID().idx, tmpInfo[i].name);
        }
        delete [] tmpInfo;
 }
index 5560bff16dead84497bbadd3b7c3f5f63651bf2c..9a3de30e64d557017e403a91f6f31dc40ed23083 100644 (file)
@@ -13,7 +13,7 @@
 #include "ck.h"
 #include "trace.h"
 #include "TopoManager.h"
-
+#include <vector>
 #include<sstream>
 
 #if CMK_LBDB_ON
@@ -1862,7 +1862,8 @@ void CkLocMgr::flushAllRecs(void)
 {
   void *objp;
   void *keyp;
-    
+  int flag_local = 0;  
+  int flag_remote = 0;  
   CkHashtableIterator *it=hash.iterator();
   CmiImmediateLock(hashImmLock);
   while (NULL!=(objp=it->next(&keyp))) {
@@ -1872,17 +1873,22 @@ void CkLocMgr::flushAllRecs(void)
       //In the case of taking core out of memory (in BigSim's emulation)
       //the meta data in the location manager are not deleted so we need
       //this condition
+      
       if(_BgOutOfCoreFlag!=1){
-      //  hash.remove(*(CkArrayIndex *)&idx);
-       // delete rec;
-       // it->seek(-1);//retry this hash slot
+        //hash.remove(*(CkArrayIndex *)&idx);
+        //delete rec;
+        //it->seek(-1);//retry this hash slot
+        flag_remote++;
       }
     }
     else {
         callMethod((CkLocRec_local*)rec, &CkMigratable::ckDestroy);
         it->seek(-1);//retry this hash slot
+        flag_local++;
     }
   }
+  if(CkMyPe()==33)
+    CkPrintf("[%d] local:%d remote:%d\n",CkMyPe(),flag_local,flag_remote);
   delete it;
   CmiImmediateUnlock(hashImmLock);
 }
@@ -1988,19 +1994,21 @@ void CkLocMgr::pup(PUP::er &p){
                map->registerArray(emptyIndex,thisgroup);
                // _lbdb is the fixed global groupID
                initLB(lbdbID);
-
-#if (defined(_FAULT_MLOG_) || defined(_FAULT_CAUSAL_))     
+  //  CkPrintf("unpacking loca manager\n");
+//#if (defined(_FAULT_MLOG_) || defined(_FAULT_CAUSAL_)) ||CMK_MEM_CHECKPOINT    
+#if 1
         int count;
         p | count;
         DEBUG(CmiPrintf("[%d] Unpacking Locmgr %d has %d home elements\n",CmiMyPe(),thisgroup.idx,count));
-        homeElementCount = count;
+    //    CmiPrintf("[%d] Unpacking Locmgr %d has %d home elements\n",CmiMyPe(),thisgroup.idx,count);
+        //homeElementCount = count;
 
         for(int i=0;i<count;i++){
             CkArrayIndex idx;
             int pe;
             idx.pup(p);
             p | pe;
-            DEBUG(CmiPrintf("[%d] idx %s is a home element exisiting on pe %d\n",CmiMyPe(),idx2str(idx),pe));
+  //          CmiPrintf("[%d] idx %s is a home element exisiting on pe %d\n",CmiMyPe(),idx2str(idx),pe);
             inform(idx,pe);
             CkLocRec *rec = elementNrec(idx);
             CmiAssert(rec!=NULL);
@@ -2018,27 +2026,48 @@ void CkLocMgr::pup(PUP::er &p){
  * indexes of local elements dont need to be packed
  * since they will be recreated later anyway
  */
-#if (defined(_FAULT_MLOG_) || defined(_FAULT_CAUSAL_))     
+ //   CkPrintf("packing loca manager\n");
+//#if (defined(_FAULT_MLOG_) || defined(_FAULT_CAUSAL_))  || CMK_MEM_CHECKPOINT   
+#if 1
         int count=0,count1=0;
         void *objp;
         void *keyp;
+        CkVec<int> pe_list;
+        //std::vector<CkArrayIndex> idx_list;
+        CkVec<CkArrayIndex> idx_list;
         CkHashtableIterator *it = hash.iterator();
+     // if(CkMyPe()==0)
+       // CmiPrintf("before first %lf\n",CmiWallTimer());
       while (NULL!=(objp=it->next(&keyp))) {
-      CkLocRec *rec=*(CkLocRec **)objp;
-        CkArrayIndex &idx=*(CkArrayIndex *)keyp;
+          CkLocRec *rec=*(CkLocRec **)objp;
+          CkArrayIndex &idx=*(CkArrayIndex *)keyp;
             if(rec->type() != CkLocRec::local){
                 if(homePe(idx) == CmiMyPe()){
+                  int pe;
+                  CkArrayIndex max = idx;
+                  pe = rec->lookupProcessor();
+                  idx_list.push_back(max);
+                  pe_list.push_back(pe);
                     count++;
                 }
             }
         }
+      //if(CkMyPe()==0)
+       // CmiPrintf("after first %lf %d\n",CmiWallTimer(),count);
         p | count;
-        DEBUG(CmiPrintf("[%d] Packing Locmgr %d has %d home elements\n",CmiMyPe(),thisgroup.idx,count));
+    //    CmiPrintf("[%d] Packing Locmgr %d has %d home elements\n",CmiMyPe(),thisgroup.idx,count);
 
                // releasing iterator memory
                delete it;
 
-        it = hash.iterator();
+    //  if(CkMyPe()==0)
+   //     CmiPrintf("before second %lf\n",CmiWallTimer());
+      for(int i=0;i<pe_list.length();i++){
+        CkArrayIndex max = idx_list[i];
+        max.pup(p);
+        p|pe_list[i];
+      }
+    /*    it = hash.iterator();
       while (NULL!=(objp=it->next(&keyp))) {
       CkLocRec *rec=*(CkLocRec **)objp;
         CkArrayIndex &idx=*(CkArrayIndex *)keyp;
@@ -2053,10 +2082,12 @@ void CkLocMgr::pup(PUP::er &p){
                 }
             }
         }
-        CmiAssert(count == count1);
+      if(CkMyPe()==0)
+        CmiPrintf("after second %lf\n",CmiWallTimer());
+      //  CmiAssert(count == count1);
 
                // releasing iterator memory
-               delete it;
+               delete it;*/
 
 #endif
 
@@ -2228,12 +2259,8 @@ CmiBool CkLocMgr::addElementToRec(CkLocRec_local *rec,ManagerRec *m,
        return CmiTrue;
 }
 void CkLocMgr::updateLocation(const CkArrayIndex &idx,int nowOnPe) {
-       inform(idx,nowOnPe);
+  inform(idx,nowOnPe);
        CProxy_CkMemCheckPT checkptMgr(ckCheckPTGroupID);
-       if(CkInRestarting()){
-               //CkPrintf("[%d] reply to %d at %lf\n",CkMyPe(),nowOnPe,CmiWallTimer());
-               //checkptMgr[nowOnPe].gotReply();
-       }
 }
 
 /*************************** LocMgr: DELETION *****************************/
index 01850d58a3e0cc7f4c3380df4e9dbc093433aff5..4b26f15ba401129e63a3ab829cb7553a06671b87 100644 (file)
@@ -603,6 +603,8 @@ static inline void _handleProcData(PUP::er &p)
 
 void CkMemCheckPT::sendProcData()
 {
+  if(CkMyPe()==0)
+     CkPrintf("begin send proc checkpoint data at %lf\n",CmiWallTimer()); 
   // find out size of buffer
   int size;
   {
@@ -620,11 +622,15 @@ void CkMemCheckPT::sendProcData()
   msg->pe = CkMyPe();
   msg->len = size;
   msg->reportPe = cpStarter;  //in case other processor isn't in checkpoint mode
+  if(CkMyPe()==0)
+     CkPrintf("end packing proc checkpoint data at %lf\n",CmiWallTimer()); 
   thisProxy[ChkptOnPe(CkMyPe())].recvProcData(msg);
 }
 
 void CkMemCheckPT::recvProcData(CkProcCheckPTMessage *msg)
 {
+  if(CkMyPe()==1)
+     CkPrintf("recv proc checkpoint data from 0 at %lf\n",CmiWallTimer()); 
   if (CpvAccess(procChkptBuf)) delete CpvAccess(procChkptBuf);
   CpvAccess(procChkptBuf) = msg;
   DEBUGF("[%d] CkMemCheckPT::recvProcData report to %d\n", CkMyPe(), msg->reportPe);
@@ -683,15 +689,14 @@ void CkMemCheckPT::cpFinish()
     CmiPrintf("[%d] Checkpoint finished in %f seconds, sending callback ... \n", CkMyPe(), CmiWallTimer()-startTime);
     cpCallback.send();
     peCount = 0;
-#if !CMK_CHKP_ALL
     thisProxy.report();
-#endif
   }
 }
 
 // for debugging, report checkpoint info
 void CkMemCheckPT::report()
 {
+#if !CMK_CHKP_ALL
   int objsize = 0;
   int len = ckTable.length();
   for (int i=0; i<len; i++) {
@@ -700,7 +705,10 @@ void CkMemCheckPT::report()
     objsize += entry->getSize();
   }
   CmiAssert(CpvAccess(procChkptBuf));
-//  CkPrintf("[%d] Checkpoint object size: %d len: %d Processor data: %d \n", CkMyPe(), objsize, len, CpvAccess(procChkptBuf)->len);
+  //CkPrintf("[%d] Checkpoint object size: %d len: %d Processor data: %d \n", CkMyPe(), objsize, len, CpvAccess(procChkptBuf)->len);
+#else
+  CkPrintf("[%d] Checkpoint Processor data: %d \n", CkMyPe(), CpvAccess(procChkptBuf)->len);
+#endif
 }
 
 /*****************************************************************************
@@ -956,10 +964,14 @@ void CkMemCheckPT::gotData()
 
 void CkMemCheckPT::updateLocations(int n, CkGroupID *g, CkArrayIndex *idx,int nowOnPe)
 {
+
+         CkPrintf("[%d] receive from %d at %lf\n",CkMyPe(),nowOnPe,CmiWallTimer());
   for (int i=0; i<n; i++) {
     CkLocMgr *mgr = CProxy_CkLocMgr(g[i]).ckLocalBranch();
     mgr->updateLocation(idx[i], nowOnPe);
   }
+       thisProxy[nowOnPe].gotReply();
+               CkPrintf("[%d] reply to %d at %lf\n",CkMyPe(),nowOnPe,CmiWallTimer());
 }
 
 // restore array elements
@@ -1022,7 +1034,7 @@ void CkMemCheckPT::recoverArrayElements()
   for (int i=0; i<CkNumPes(); i++) {
     if (gmap[i].size() && i!=CkMyPe()&& i==thisFailedPe) {
       thisProxy[i].updateLocations(gmap[i].size(), gmap[i].getVec(), imap[i].getVec(), CkMyPe());
-       //CkPrintf("[%d] send to %d at %lf\n",CkMyPe(),i,CmiWallTimer());
+       CkPrintf("[%d] send to %d at %lf\n",CkMyPe(),i,CmiWallTimer());
        flag++; 
          }
   }
@@ -1046,7 +1058,7 @@ if(flag == 0)
 }
 
 void CkMemCheckPT::gotReply(){
-       //CkPrintf("[%d] got reply at %lf\n",CkMyPe(),CmiWallTimer());
+    CkPrintf("[%d] got reply at %lf\n",CkMyPe(),CmiWallTimer());
     contribute(CkCallback(CkReductionTarget(CkMemCheckPT, finishUp), thisProxy));
 }
 
@@ -1067,7 +1079,8 @@ void CkMemCheckPT::recoverAll(CkArrayCheckPTMessage * msg,CkVec<CkGroupID> * gma
                        mgr->resume(idx,p,CmiFalse);
 #else
                        if(homePe == thisFailedPe && homePe!=CkMyPe()){
-                               mgr->resume(idx,p,CmiTrue);
+                               mgr->resume(idx,p,CmiFalse);
+                               //mgr->resume(idx,p,CmiTrue);
        // CkPrintf("[%d] send to crashed pe %d\n",CkMyPe(),thisFailedPe);
       }
       else
index 853acf1d596871d7de207fecdee94eb052fa09a3..4c576f6c69d4249b3f7773518f12fc24163781e4 100644 (file)
@@ -27,6 +27,9 @@ void HybridBaseLB::staticMigrated(void* data, LDObjHandle h, int waitBarrier)
 
 void HybridBaseLB::staticAtSync(void* data)
 {
+#if CMK_MEM_CHECKPOINT 
+  CkSetInLdb();
+#endif
   HybridBaseLB *me = (HybridBaseLB*)(data);
 
   me->AtSync();
@@ -553,6 +556,9 @@ LBMigrateMsg* HybridBaseLB::Strategy(LDStats* stats)
 void HybridBaseLB::ReceiveMigration(LBMigrateMsg *msg)
 {
 #if CMK_LBDB_ON
+#if CMK_MEM_CHECKPOINT
+  CkResetInLdb();
+#endif
   FindNeighbors();
 
   int atlevel = msg->level - 1;