a5601d27b0e7942f1689b90c8f5ce33717330fdf
[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 failedpe;
28         int cur_restart_phase;
29         int len;
30         char *packData;
31 };
32
33 // table entry
34 class CkMemCheckPTInfo {
35    friend class CkMemCheckPT;
36 private:
37    CkArrayID aid;
38    CkGroupID locMgr;
39    CkArrayIndexMax index;
40    int pNo;   //another buddy
41    CkArrayCheckPTMessage* ckBuffer; 
42 public:
43    CkMemCheckPTInfo(CkArrayID a, CkGroupID loc, CkArrayIndexMax idx, int no):
44             aid(a), locMgr(loc), index(idx), pNo(no), ckBuffer(NULL)  {}
45    ~CkMemCheckPTInfo() { if (ckBuffer) delete ckBuffer; }
46    void updateBuffer(CkArrayCheckPTMessage *data) { 
47         if (ckBuffer) delete ckBuffer;
48         ckBuffer = data;
49    }
50 };
51
52 class CkMemCheckPT: public CBase_CkMemCheckPT {
53 public:
54   CkMemCheckPT();
55   CkMemCheckPT(CkMigrateMessage *m):CBase_CkMemCheckPT(m) { }
56   ~CkMemCheckPT();
57   void pup(PUP::er& p);
58   void doItNow(int sp, CkCallback &);
59   void restart(int failedPe);
60   void removeArrayElements();
61   void createEntry(CkArrayID aid, CkGroupID loc, CkArrayIndexMax index, int buddy);
62   void recvData(CkArrayCheckPTMessage *);
63   void recvProcData(CkProcCheckPTMessage *);
64   void cpFinish();
65   void recoverBuddies();
66   void recoverArrayElements();
67   void quiescence(CkCallback &);
68   void resetReductionMgr();
69   void finishUp();
70   void inmem_restore(CkArrayCheckPTMessage *m);
71   void resetLB(int diepe);
72 public:
73   static CkCallback  cpCallback;
74
75   int inRestarting;
76 private:
77   CkVec<CkMemCheckPTInfo *> ckTable;
78
79   int recvCount, peCount;
80   int cpStarter;
81   CkVec<int> failedPes;
82   int thisFailedPe;
83 private:
84   inline int iFailed() { return isFailed(CkMyPe()); }
85   int isFailed(int pe);
86   void failed(int pe);
87
88   void sendProcData();
89 };
90
91 // called by user applications
92 //void CkRegisterRestartCallback(CkCallback *cb);
93 void CkStartCheckPoint(CkCallback &cb);
94
95 int CkInRestart();
96
97 #endif