705fb2fc65478a21b8175f39276437126ecb439f
[charm.git] / src / ck-core / ckmemcheckpoint.h
1 #ifndef _CKCHECKPT_
2 #define _CKCHECKPT_
3
4 #include "CkMemCheckpoint.decl.h"
5
6 extern CkGroupID ckCheckPTGroupID;
7
8 class CkArrayCheckPTReqMessage: public CMessage_CkArrayCheckPTReqMessage {
9 public: 
10   CkArrayCheckPTReqMessage()  {}
11 };
12
13 class CkArrayCheckPTMessage: public CMessage_CkArrayCheckPTMessage {
14 public:
15         CkArrayID  aid;
16         CkGroupID  locMgr;
17         CkArrayIndexMax index;
18         double *packData;
19         int bud1, bud2;
20         int len;
21         int cp_flag;          // 1: from checkpoint 0: from recover
22 };
23
24 class CkProcCheckPTMessage: public CMessage_CkProcCheckPTMessage {
25 public:
26         int pe;
27         int reportPe;           // chkpt starter
28         int failedpe;
29         int cur_restart_phase;
30         int len;
31         char *packData;
32 };
33
34 // table entry
35 class CkMemCheckPTInfo {
36    friend class CkMemCheckPT;
37 private:
38    CkArrayID aid;
39    CkGroupID locMgr;
40    CkArrayIndexMax index;
41    int pNo;   //another buddy
42    CkArrayCheckPTMessage* ckBuffer; 
43 public:
44    CkMemCheckPTInfo(CkArrayID a, CkGroupID loc, CkArrayIndexMax idx, int no):
45             aid(a), locMgr(loc), index(idx), pNo(no), ckBuffer(NULL)  {}
46    ~CkMemCheckPTInfo() { if (ckBuffer) delete ckBuffer; }
47    void updateBuffer(CkArrayCheckPTMessage *data) { 
48         if (ckBuffer) delete ckBuffer;
49         ckBuffer = data;
50    }
51 };
52
53 class CkMemCheckPT: public CBase_CkMemCheckPT {
54 public:
55   CkMemCheckPT();
56   CkMemCheckPT(CkMigrateMessage *m):CBase_CkMemCheckPT(m) { }
57   ~CkMemCheckPT();
58   void pup(PUP::er& p);
59   void doItNow(int sp, CkCallback &);
60   void restart(int failedPe);
61   void removeArrayElements();
62   void createEntry(CkArrayID aid, CkGroupID loc, CkArrayIndexMax index, int buddy);
63   void recvData(CkArrayCheckPTMessage *);
64   void recvProcData(CkProcCheckPTMessage *);
65   void cpFinish();
66   void report();
67   void recoverBuddies();
68   void recoverArrayElements();
69   void quiescence(CkCallback &);
70   void resetReductionMgr();
71   void finishUp();
72   void inmem_restore(CkArrayCheckPTMessage *m);
73   void resetLB(int diepe);
74 public:
75   static CkCallback  cpCallback;
76
77   static int inRestarting;
78   static double startTime;
79   static char*  stage;
80 private:
81   CkVec<CkMemCheckPTInfo *> ckTable;
82
83   int recvCount, peCount;
84   int cpStarter;
85   CkVec<int> failedPes;
86   int thisFailedPe;
87 private:
88   inline int iFailed() { return isFailed(CkMyPe()); }
89   int isFailed(int pe);
90   int totalFailed();
91   void failed(int pe);
92   inline int isMaster(int pe);
93
94   void sendProcData();
95 };
96
97 // called in initCharm
98 void CkMemRestart(const char *);
99
100 // called by user applications
101 // to start a checkpointing
102 void CkStartMemCheckpoint(CkCallback &cb);
103
104 // true if inside a restarting phase
105 int CkInRestarting(); 
106
107 #endif