doc: Add serial to list of ci file reserved words
[charm.git] / src / ck-ldb / NborBaseLB.h
1 /**
2  * \addtogroup CkLdb
3 */
4 /*@{*/
5
6 #ifndef NBORBASELB_H
7 #define NBORBASELB_H
8
9 #include "BaseLB.h"
10 #include "NborBaseLB.decl.h"
11
12 #include "topology.h"
13
14 void CreateNborBaseLB();
15
16 /// for backward compatibility
17 typedef LBMigrateMsg NLBMigrateMsg;
18
19 class NLBStatsMsg;
20
21 class NborBaseLB : public BaseLB
22 {
23 private:
24   CProxy_NborBaseLB  thisProxy;
25   LBTopology         *topo;
26 public:
27   NborBaseLB(const CkLBOptions &);
28   NborBaseLB(CkMigrateMessage *m):BaseLB(m) {}
29   ~NborBaseLB();
30
31   static void staticAtSync(void*);
32   void AtSync(void); // Everything is at the PE barrier
33
34   void ReceiveStats(CkMarshalledNLBStatsMessage &m);            // Receive stats on PE 0
35   void ResumeClients(CkReductionMsg *msg);
36   void ResumeClients(int balancing);
37   void ReceiveMigration(LBMigrateMsg *);        // Receive migration data
38
39   // Migrated-element callback
40   static void staticMigrated(void* me, LDObjHandle h, int waitBarrier);
41   void Migrated(LDObjHandle h, int waitBarrier);
42
43   void MigrationDone(int balancing);  // Call when migration is complete
44
45   struct LDStats {  // Passed to Strategy
46     int from_pe;
47     LBRealType total_walltime;
48     LBRealType idletime;
49     LBRealType bg_walltime;
50     LBRealType obj_walltime;
51 #if CMK_LB_CPUTIMER
52     LBRealType total_cputime;
53     LBRealType bg_cputime;
54     LBRealType obj_cputime;
55 #endif
56     int pe_speed;
57     CmiBool available;
58     CmiBool move;
59
60     int n_objs;
61     LDObjData* objData;
62     int n_comm;
63     LDCommData* commData;
64
65     inline void clearBgLoad() {
66       bg_walltime = idletime = 0.0;
67 #if CMK_LB_CPUTIMER
68       bg_cputime = 0.0;
69 #endif
70     }
71   };
72
73 protected:
74   virtual CmiBool QueryBalanceNow(int) { return CmiTrue; };  
75   virtual CmiBool QueryMigrateStep(int) { return CmiTrue; };  
76   virtual LBMigrateMsg* Strategy(LDStats* stats, int n_nbrs);
77
78   int NeighborIndex(int pe);   // return the neighbor array index
79
80   LDStats myStats;
81
82 private:
83   void FindNeighbors();
84   NLBStatsMsg* AssembleStats();
85
86   int stats_msg_count;
87   NLBStatsMsg** statsMsgsList;
88   LDStats* statsDataList;
89   int migrates_completed;
90   int migrates_expected;
91   LBMigrateMsg** mig_msgs;
92   int mig_msgs_received;
93   int mig_msgs_expected;
94   int* neighbor_pes;
95   int receive_stats_ready;
96   double start_lb_time;
97 };
98
99 class NLBStatsMsg {
100 public:
101   int from_pe;
102   int serial;
103   int pe_speed;
104   double total_walltime;
105   double idletime;
106   double bg_walltime;
107   double obj_walltime;   // may not needed
108 #if CMK_LB_CPUTIMER
109   double total_cputime;
110   double bg_cputime;
111   double obj_cputime;   // may not needed
112 #endif
113   int n_objs;
114   LDObjData *objData;
115   int n_comm;
116   LDCommData *commData;
117 public:
118   NLBStatsMsg(int osz, int csz);
119   NLBStatsMsg(NLBStatsMsg *s);
120   NLBStatsMsg()  {}
121   ~NLBStatsMsg();
122   void pup(PUP::er &p);
123 }; 
124
125 #endif /* NBORBASELB_H */
126
127 /*@}*/