Changes for out-of-core emulation in BigSim. Details could be referred to Chao Mei...
[charm.git] / src / ck-core / ckcheckpoint.h
1 /*
2 Charm++ File: Checkpoint Library
3 added 01/03/2003 by Chao Huang, chuang10@uiuc.edu
4
5 CkStartCheckpoint() is a function to start the procedure
6 of saving the status of a Charm++ program into disk files.
7 A corresponding restarting mechanism can later use the
8 files saved to restore the execution. A callback should
9 be provided to continue after the checkpoint is done.
10
11 Checkpoint manager is a Group to aid the saving and
12 restarting of Charm++ programs. ...
13
14 --- Updated 12/14/2003 by Gengbin, gzheng@uiuc.edu
15     rewrote to allow code reuse with following 5 functions, 
16     these functions each handle both packing and unpacking of a system data:
17         void CkPupROData(PUP::er &p);
18         void CkPupMainChareData(PUP::er &p);
19         void CkPupGroupData(PUP::er &p);
20         void CkPupNodeGroupData(PUP::er &p);
21         void CkPupArrayElementsData(PUP::er &p);
22     Completely changed the data file format for array elements to become
23     one file for each processor. 
24     Two main checkpoint/restart subroutines are greatly simplified.
25 */
26 #ifndef _CKCHECKPOINT_H
27 #define _CKCHECKPOINT_H
28
29 #include "CkCheckpoint.decl.h"
30 // loop over all CkLocMgr and do "code"
31 #define  CKLOCMGR_LOOP(code)    \
32   for(i=0;i<numGroups;i++) {    \
33     IrrGroup *obj = CkpvAccess(_groupTable)->find((*CkpvAccess(_groupIDTable))[i]).getObj();    \
34     if(obj->isLocMgr())  {      \
35       CkLocMgr *mgr = (CkLocMgr*)obj;   \
36       code      \
37     }   \
38   }
39 /***
40   * Location iterator that save each location
41  ***/
42 void printIndex(const CkArrayIndex &idx,char *dest);
43
44 /**
45  * There is only one Checkpoint Manager in the whole system
46 **/
47 class CkCheckpointMgr : public CBase_CkCheckpointMgr {
48 private:
49         CkCallback restartCB;
50         double chkptStartTimer;
51 public:
52         CkCheckpointMgr() { }
53         CkCheckpointMgr(CkMigrateMessage *m):CBase_CkCheckpointMgr(m) { }
54         void Checkpoint(const char *dirname,CkCallback& cb);
55         void SendRestartCB(CkReductionMsg *m);
56         void pup(PUP::er& p){ CBase_CkCheckpointMgr::pup(p); p|restartCB; }
57 };
58
59 // utility functions to pup system global tables
60 void CkPupROData(PUP::er &p);
61 void CkPupMainChareData(PUP::er &p, CkArgMsg *args);
62 void CkPupGroupData(PUP::er &p);
63 void CkPupNodeGroupData(PUP::er &p);
64 void CkPupArrayElementsData(PUP::er &p, int notifyListeners=1);
65 void CkPupProcessorData(PUP::er &p);
66 void CkRemoveArrayElements();
67 //void CkTestArrayElements();
68
69 void CkStartCheckpoint(char* dirname,const CkCallback& cb);
70 void CkRestartMain(const char* dirname, CkArgMsg *args);
71
72
73 #endif //_CKCHECKPOINT_H