change mem checkpoint so that when checkpointing, the buddy that is likely to host...
authorGengbin Zheng <gzheng@illinois.edu>
Thu, 1 Apr 2010 04:38:11 +0000 (23:38 -0500)
committerGengbin Zheng <gzheng@illinois.edu>
Thu, 1 Apr 2010 04:38:11 +0000 (23:38 -0500)
src/ck-core/charm++.h
src/ck-core/ckarray.ci
src/ck-core/ckmemcheckpoint.C
src/ck-core/ckmemcheckpoint.ci

index e13c1e4fd2cf24230d765c4d36c4bcd61cdc99d0..d72f5287a29971d9959a175fbff6042c9c0d2ef6 100644 (file)
@@ -284,6 +284,7 @@ public:
        CkArrayIndexMax &operator=(const CkArrayIndex &that) 
                {copyFrom(that); return *this;}
         void print() { CmiPrintf("%d: %d %d %d\n", nInts,index[0], index[1], index[2]); }
+        void sprint(char *str) { sprintf(str, "%d: %d %d %d", nInts,index[0], index[1], index[2]); }
        void pup(PUP::er &p) {
                p|nInts;
                p|dimension;
index 8d795fc7112565bc0c4d8c3d21dd2d826862bdb5..d31eac5b524c5c55da96ebb8dfb921c4907f5d04 100644 (file)
@@ -30,9 +30,9 @@ module CkArray {
     entry ArrayElement();
     //Calls destructor:
     entry void ckDestroy(void);
+    entry void recvBroadcast(CkMessage *);
     // CMK_MEM_CHECKPOINT
     entry void inmem_checkpoint(CkArrayCheckPTReqMessage *);
-       entry void recvBroadcast(CkMessage *);
   };
 
 
index c8d4747729af6d970ed14ea4dd5a480eaf2a142e..7212b21ccba129ab930f5ada72d6b7c4ca99343b 100644 (file)
@@ -142,6 +142,8 @@ void ArrayElement::init_checkpt() {
 void ArrayElement::inmem_checkpoint(CkArrayCheckPTReqMessage *m) {
 #if CMK_MEM_CHECKPOINT
   //DEBUGF("[p%d] HERE checkpoint to %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();
   CmiAssert(myRec!=NULL);
   int size;
@@ -428,7 +430,9 @@ void CkMemCheckPT::doItNow(int starter, CkCallback &cb)
   for (int i=0; i<len; i++) {
     CkCheckPTInfo *entry = ckTable[i];
       // always let the bigger number processor send request
-    if (CkMyPe() < entry->pNo) continue;
+    //if (CkMyPe() < entry->pNo) continue;
+      // always let the smaller number processor send request, may on same proc
+    if (!isMaster(entry->pNo)) continue;
       // call inmem_checkpoint to the array element, ask it to send
       // back checkpoint data via recvData().
     CkArrayCheckPTReqMessage *msg = new CkArrayCheckPTReqMessage;
@@ -447,7 +451,7 @@ static inline void _handleProcData(PUP::er &p)
     // save readonlys, and callback BTW
     CkPupROData(p);
 
-    // save mainchares into MainChares.dat
+    // save mainchares 
     if(CkMyPe()==0) CkPupMainChareData(p, (CkArgMsg*)NULL);
        
 #ifndef CMK_CHARE_USE_PTR
@@ -583,6 +587,7 @@ inline int CkMemCheckPT::isMaster(int buddype)
   }
   return 0;
 #else
+    // smaller one
   int mype = CkMyPe();
 //CkPrintf("ismaster: %d %d\n", pe, mype);
   if (CkNumPes() - totalFailed() == 2) {
index cc697dfed7db1cc945226e1269434d658b0a7c4c..672e00ca7d2ed41b11ec14ea4983f15b2f0ae1ec 100644 (file)
@@ -16,7 +16,7 @@ module CkMemCheckpoint {
         entry CkMemCheckPT(int w);
        entry void createEntry(CkArrayID, CkGroupID, CkArrayIndexMax, int);
        // checkpointing
-        entry void doItNow(int spe, CkCallback &);  //checkpointing
+        entry [expedited] void doItNow(int spe, CkCallback &);  //checkpointing
        entry void recvData(CkArrayCheckPTMessage *);
        entry void gotData();
        entry void recvProcData(CkProcCheckPTMessage *);