NAMD
LdbCoordinator.h
Go to the documentation of this file.
1 
7 /*****************************************************************************
8  * $Source: /home/cvs/namd/cvsroot/namd2/src/LdbCoordinator.h,v $
9  * $Author: jim $
10  * $Date: 2013/09/06 19:11:37 $
11  * $Revision: 1.47 $
12  *****************************************************************************/
13 
14 #ifndef LDBCOORDINATOR_H
15 #define LDBCOORDINATOR_H
16 
17 #include <stdio.h>
18 
19 #include <charm++.h>
20 
21 #ifdef LB_MANAGER_VERSION
22 #include <LBManager.h>
23 typedef LBManager LdbInfra;
24 #else
25 #include <LBDatabase.h>
26 typedef LBDatabase LdbInfra;
27 #endif
28 
29 #include "NamdTypes.h"
30 #include "BOCgroup.h"
31 #include "LdbCoordinator.decl.h"
32 
40 #if CMK_LBID_64BIT
41 typedef CmiUInt8 LdbId;
42 #else
43 typedef LDObjid LdbId;
44 #endif
45 
46 inline const int& LdbIdField(const LdbId& id, const int index) {
47 #if CMK_LBID_64BIT
48  return *(((int*)&id) + index);
49 #else
50  return id.id[index];
51 #endif
52 }
53 
54 inline int& LdbIdField(LdbId& id, const int index) {
55 #if CMK_LBID_64BIT
56  return *(((int*)&id) + index);
57 #else
58  return id.id[index];
59 #endif
60 }
61 
66 enum {
68  PATCH_TYPE = -2,
70 };
71 
72 class PatchMap;
73 class ComputeMap;
74 class Controller;
75 class Sequencer;
76 class computeInfo;
77 class patchInfo;
78 class processorInfo;
79 
80 enum {LDB_PATCHES = 4096};
81 enum {LDB_COMPUTES = 16384};
82 enum {COMPUTEMAX = 16384};
83 enum {PATCHMAX = 4096};
84 enum {PROCESSORMAX = 512};
85 
87 
88 class LdbCoordinator : public CBase_LdbCoordinator
89 {
90 public:
92  ~LdbCoordinator(void);
93  static LdbCoordinator *Object() {
94  return CkpvAccess(LdbCoordinator_instance);
95  }
96 
97  void initialize(PatchMap *pmap, ComputeMap *cmap, int reinit=0);
98  void createLoadBalancer();
99  void patchLoad(PatchID id, int nAtoms, int timestep);
100 
101  void startWork(const LDObjHandle &handle) { // start timer
102  theLbdb->ObjectStart(handle);
103  }
104  void pauseWork(const LDObjHandle &handle) { // stop timer only
105  theLbdb->ObjectStop(handle);
106  }
107  void skipWork(const LDObjHandle &handle) { // increment counter only
109  }
110  void endWork(const LDObjHandle &handle) { // both
111  theLbdb->ObjectStop(handle);
113  }
114 
115  void rebalance(Sequencer *seq, PatchID id);
116  void rebalance(Controller *seq);
117  void nodeDone(CkReductionMsg *);
118  void updateComputesReady();
119  void barrier(void);
120  void resume(void);
121  void resumeReady(CkQdMsg *msg);
122  void resume2(void);
123  int getNumStepsToRun(void) { return numStepsToRun; }
124  static void staticMigrateFn(LDObjHandle handle, int dest);
125  static void staticStatsFn(LDOMHandle h, int state);
126  static void staticQueryEstLoadFn(LDOMHandle h);
127  static void staticReceiveAtSync(void* data);
128  static void staticResumeFromSync(void* data);
129  void AtSyncBarrierReached(void);
130  void Migrate(LDObjHandle handle, int dest);
131  void RecvMigrate(LdbMigrateMsg*);
133  void ResumeFromSync(void);
134 
135 public:
136  void ExecuteMigrations(void);
137  void awakenSequencers(void);
138  int requiredProxies(PatchID id, int []);
139  void printRequiredProxies(PatchID id, FILE *fp);
140  void printLocalLdbReport(void);
141 
156  int nPatches;
159 
161  int numStepsToRun; // tells Controller how many time steps to run
162  // before another load balancing
164  int totalStepsDone; // keeps a count of the total number of
165  // time steps to stop load balancing
167 
168  FILE *ldbStatsFP;
172 
174  LDBarrierClient ldBarrierHandle;
175  LDOMid myOMid;
176  LDOMHandle myHandle;
181  LDObjHandle* patchHandles;
182 
185 private:
186  int collPes;
187  int reverted;
188  int initTotalProxies;
189  int finalTotalProxies;
190  int initMaxPeProxies;
191  int finalMaxPeProxies;
192  int initMaxPatchProxies;
193  int finalMaxPatchProxies;
194  double initTime;
195  double finalTime;
196  double initMemory;
197  double finalMemory;
198  double initAvgPeLoad;
199  double finalAvgPeLoad;
200  double initMaxPeLoad;
201  double finalMaxPeLoad;
202 };
203 
204 class CollectLoadsMsg : public CMessage_CollectLoadsMsg {
205 public:
206  int firstPe;
207  int lastPe;
208  int reverted;
215  double initTime;
216  double finalTime;
217  double initMemory;
218  double finalMemory;
223  char strategyName[16];
224 };
225 
226 class LdbMigrateMsg : public CMessage_LdbMigrateMsg
227 {
228 public:
229  LDObjHandle handle;
230  int from;
231  int to;
233 };
234 
235 
236 #endif // LDBCOORDINATOR_H
237 
void barrier(void)
void sendCollectLoads(CollectLoadsMsg *)
void LdbCoordinator_initproc()
represents bonded compute
Controller * controllerThread
void collectLoads(CollectLoadsMsg *)
void resumeReady(CkQdMsg *msg)
Sequencer ** sequencerThreads
LDObjHandle * patchHandles
void updateComputesReady()
void resume(void)
void AtSyncBarrierReached(void)
void createLoadBalancer()
void startWork(const LDObjHandle &handle)
void Migrate(LDObjHandle handle, int dest)
void printRequiredProxies(PatchID id, FILE *fp)
void pauseWork(const LDObjHandle &handle)
represents nonbonded or self compute
void awakenSequencers(void)
void patchLoad(PatchID id, int nAtoms, int timestep)
void ResumeFromSync(void)
char strategyName[16]
ComputeMap * computeMap
PatchMap * patchMap
void initialize(PatchMap *pmap, ComputeMap *cmap, int reinit=0)
LdbMigrateMsg * migrateMsgs
LDOMHandle myHandle
void rebalance(Sequencer *seq, PatchID id)
void skipWork(const LDObjHandle &handle)
int PatchID
Definition: NamdTypes.h:182
const int & LdbIdField(const LdbId &id, const int index)
static LdbCoordinator * Object()
static void staticQueryEstLoadFn(LDOMHandle h)
void ExpectMigrate(LdbMigrateMsg *)
void nodeDone(CkReductionMsg *)
static void staticReceiveAtSync(void *data)
represents a patch
LBDatabase LdbInfra
void endWork(const LDObjHandle &handle)
LDObjid LdbId
LdbInfra * theLbdb
int getNumStepsToRun(void)
void printLocalLdbReport(void)
computeInfo * computeArray
int requiredProxies(PatchID id, int[])
static void staticMigrateFn(LDObjHandle handle, int dest)
LdbMigrateMsg * next
void resume2(void)
LDObjHandle handle
patchInfo * patchArray
LDBarrierClient ldBarrierHandle
static void staticResumeFromSync(void *data)
static void staticStatsFn(LDOMHandle h, int state)
processorInfo * processorArray
void ExecuteMigrations(void)
void RecvMigrate(LdbMigrateMsg *)