NAMD
WorkDistrib.h
Go to the documentation of this file.
1 
7 #ifndef _WORKDISTRIB_H
8 #define _WORKDISTRIB_H
9 
10 #include "charm++.h"
11 
12 #include "main.h"
13 
14 #include "NamdTypes.h"
15 #include "BOCgroup.h"
16 #include "ComputeMap.h"
17 #include "WorkDistrib.decl.h"
18 
19 class Node;
20 class Compute;
21 class Molecule;
22 
23 // For Compute objects to enqueue themselves when ready to compute
24 class LocalWorkMsg : public CMessage_LocalWorkMsg
25 {
26 public:
28 };
29 
30 class FinishWorkMsg : public CMessage_FinishWorkMsg
31 {
32 public:
34  int data;
35 };
36 
37 enum { maxPatchDepends = 126 };
38 
39 class PatchMapMsg;
41 
42 class WorkDistrib : public CBase_WorkDistrib
43 {
44 public:
45  WorkDistrib();
46  ~WorkDistrib(void);
47 
48  // static void messageMovePatchDone();
49  // void movePatchDone();
50 
51  static void messageEnqueueWork(Compute *);
52  static void messageFinishCUDA(Compute *);
53  static void messageFinishMIC(Compute *);
54  void enqueueWork(LocalWorkMsg *msg);
55  void enqueueExcls(LocalWorkMsg *msg);
56  void enqueueBonds(LocalWorkMsg *msg);
57  void enqueueAngles(LocalWorkMsg *msg);
58  void enqueueDihedrals(LocalWorkMsg *msg);
59  void enqueueImpropers(LocalWorkMsg *msg);
60  void enqueueThole(LocalWorkMsg *msg); // Drude model
61  void enqueueAniso(LocalWorkMsg *msg); // Drude model
64  // JLai
66  // End of JLai
67  void enqueuePme(LocalWorkMsg *msg);
68  void enqueueSelfA1(LocalWorkMsg *msg);
69  void enqueueSelfA2(LocalWorkMsg *msg);
70  void enqueueSelfA3(LocalWorkMsg *msg);
71  void enqueueSelfB1(LocalWorkMsg *msg);
72  void enqueueSelfB2(LocalWorkMsg *msg);
73  void enqueueSelfB3(LocalWorkMsg *msg);
74  void enqueueWorkA1(LocalWorkMsg *msg);
75  void enqueueWorkA2(LocalWorkMsg *msg);
76  void enqueueWorkA3(LocalWorkMsg *msg);
77  void enqueueWorkB1(LocalWorkMsg *msg);
78  void enqueueWorkB2(LocalWorkMsg *msg);
79  void enqueueWorkB3(LocalWorkMsg *msg);
80  void enqueueWorkC(LocalWorkMsg *msg);
81  void enqueueCUDA(LocalWorkMsg *msg);
82  void enqueueCUDAP2(LocalWorkMsg *msg);
83  void enqueueCUDAP3(LocalWorkMsg *msg);
84  void finishCUDAPatch(FinishWorkMsg *msg);
85  void finishCUDA(LocalWorkMsg *msg);
86  void finishCUDAP2(LocalWorkMsg *msg);
87  void finishCUDAP3(LocalWorkMsg *msg);
88  void enqueueMIC(LocalWorkMsg *msg);
89  void finishMIC(LocalWorkMsg *msg);
90  void enqueueLCPO(LocalWorkMsg *msg);
91 
92  void mapComputes(void);
93  void sendPatchMap(void);
94  void sendComputeMap(void);
95  void saveComputeMapChanges(int,CkGroupID);
97  void doneSaveComputeMap(CkReductionMsg *);
98 
99  FullAtomList *createAtomLists(const char *basename=0);
100  void createHomePatches(void);
101  void distributeHomePatches(void);
102 
103  void reinitAtoms(const char *basename=0);
104  void patchMapInit(void);
105  void assignNodeToPatch(void);
106 
107  void savePatchMap(PatchMapMsg *msg);
108  inline void setPatchMapArrived(bool s) {patchMapArrived=s;}
109 
110 #ifdef MEM_OPT_VERSION
111  void fillAtomListForOnePatch(int pid, FullAtomList &alist);
112  void random_velocities_parallel(BigReal Temp,InputAtomList &inAtoms);
113 #endif
114 
115  static int peOrderingInit; // used during startup
116  static int *peDiffuseOrdering; // pes in diffuse order
117  static int *peDiffuseOrderingIndex; // index of pe in diffuse order
118  static int *peCompactOrdering; // pes in compact order
119  static int *peCompactOrderingIndex; // index of pe in compact order
120 
122  inline bool operator() (int a, int b) const {
123  const int *index = WorkDistrib::peDiffuseOrderingIndex;
124  return ( index[a] < index[b] );
125  }
126  };
128  inline bool operator() (int a, int b) const {
129  const int *index = WorkDistrib::peCompactOrderingIndex;
130  return ( index[a] < index[b] );
131  }
132  };
133 
134  static void sortPmePes(int *pmepes, int xdim, int ydim);
135 
136  static void peOrderingReady();
137 
138  // MIC-Specific
139  static void send_initHostDeviceLDB();
140  /* entry */ void initHostDeviceLDB();
141  static void send_contributeHostDeviceLDB(int peSetLen, int * peSet);
142  /* entry */ void contributeHostDeviceLDB(int peSetLen, int * peSet);
143  static void send_setDeviceLDBParams(int dt, int hs, int sp1, int pp1, int pp2);
144  /* entry */ void setDeviceLDBParams(int dt, int hs, int sp1, int pp1, int pp2);
145 
146  static void buildNodeAwarePeOrdering(void);
147 
148 private:
149  void mapComputeNonbonded(void);
150  void mapComputeLCPO(void);
151  void mapComputeNode(ComputeType);
152  void mapComputeHomePatches(ComputeType);
153  void mapComputeHomeTuples(ComputeType);
154  void mapComputePatch(ComputeType);
155  void assignPatchesToLowestLoadNode(void);
156  void assignPatchesRecursiveBisection(void);
157  void assignPatchesRoundRobin(void);
158  void assignPatchesSpaceFillingCurve(void);
159  void assignPatchesBitReversal(void);
160  int assignPatchesTopoGridRecBisection();
161 
162  void sortNodesAndAssign(int *assignedNode, int baseNodes = 0);
163  void velocities_from_PDB(const char *filename,
164  Vector *v, int totalAtoms);
165  void velocities_from_binfile(const char *fname, Vector *vels, int n);
166  void random_velocities(BigReal Temp, Molecule *structure,
167  Vector *v, int totalAtoms);
168  void remove_com_motion(Vector *vel, Molecule *structure, int n);
169 
170  bool patchMapArrived;
171  bool computeMapArrived;
172 
173  int saveComputeMapReturnEP;
174  CkGroupID saveComputeMapReturnChareID;
175 };
176 
177 #endif /* WORKDISTRIB_H */
178 
void setDeviceLDBParams(int dt, int hs, int sp1, int pp1, int pp2)
Definition: WorkDistrib.C:3552
void enqueueMIC(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3268
void enqueueOneFourNbThole(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3146
static void sortPmePes(int *pmepes, int xdim, int ydim)
Definition: WorkDistrib.C:307
static void messageFinishMIC(Compute *)
Definition: WorkDistrib.C:3071
void setPatchMapArrived(bool s)
Definition: WorkDistrib.h:108
void enqueueAngles(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3110
static void messageFinishCUDA(Compute *)
Definition: WorkDistrib.C:3038
Definition: Node.h:78
static int * peCompactOrdering
Definition: WorkDistrib.h:118
void finishCUDAP3(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3264
void enqueueCrossterms(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3140
void enqueuePme(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3161
void enqueueWorkA3(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3214
ComputeType
Definition: ComputeMap.h:20
void enqueueWork(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3092
void enqueueGromacsPair(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3153
void enqueueSelfA1(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3172
void finishCUDAP2(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3261
Definition: Vector.h:72
static void send_contributeHostDeviceLDB(int peSetLen, int *peSet)
Definition: WorkDistrib.C:3532
void enqueueExcls(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3098
void enqueueBonds(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3104
void enqueueAniso(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3134
void enqueueSelfB1(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3188
void enqueueWorkB1(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3220
static void messageEnqueueWork(Compute *)
Definition: WorkDistrib.C:2866
static void peOrderingReady()
Definition: WorkDistrib.C:173
void enqueueSelfA3(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3182
Molecule stores the structural information for the system.
Definition: Molecule.h:174
bool operator()(int a, int b) const
Definition: WorkDistrib.h:122
void patchMapInit(void)
Definition: WorkDistrib.C:1238
void recvComputeMapChanges(ComputeMapChangeMsg *)
Definition: WorkDistrib.C:377
Compute * compute
Definition: WorkDistrib.h:33
void enqueueCUDA(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3244
void sendComputeMap(void)
Definition: WorkDistrib.C:1211
void enqueueWorkB2(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3225
void enqueueCUDAP2(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3247
void enqueueSelfB3(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3198
void enqueueWorkC(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3238
void reinitAtoms(const char *basename=0)
Definition: WorkDistrib.C:1085
void enqueueThole(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3128
void enqueueWorkA2(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3209
void createHomePatches(void)
Definition: WorkDistrib.C:989
Compute * compute
Definition: WorkDistrib.h:27
void enqueueImpropers(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3122
void enqueueLCPO(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3167
void finishCUDA(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3258
~WorkDistrib(void)
Definition: WorkDistrib.C:124
void enqueueCUDAP3(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3250
static int * peDiffuseOrderingIndex
Definition: WorkDistrib.h:117
void enqueueWorkA1(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3204
static int * peDiffuseOrdering
Definition: WorkDistrib.h:116
static int peOrderingInit
Definition: WorkDistrib.h:115
void sendPatchMap(void)
Definition: WorkDistrib.C:1111
void saveComputeMapChanges(int, CkGroupID)
Definition: WorkDistrib.C:359
void finishCUDAPatch(FinishWorkMsg *msg)
Definition: WorkDistrib.C:3254
void savePatchMap(PatchMapMsg *msg)
Definition: WorkDistrib.C:1147
static int * peCompactOrderingIndex
Definition: WorkDistrib.h:119
static void buildNodeAwarePeOrdering(void)
Definition: WorkDistrib.C:183
static void send_setDeviceLDBParams(int dt, int hs, int sp1, int pp1, int pp2)
Definition: WorkDistrib.C:3545
void mapComputes(void)
Definition: WorkDistrib.C:2407
void enqueueSelfA2(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3177
void distributeHomePatches(void)
Definition: WorkDistrib.C:1063
void enqueueSelfB2(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3193
void initHostDeviceLDB()
Definition: WorkDistrib.C:3526
static void send_initHostDeviceLDB()
Definition: WorkDistrib.C:3519
FullAtomList * createAtomLists(const char *basename=0)
Definition: WorkDistrib.C:654
void enqueueDihedrals(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3116
void finishMIC(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3271
void contributeHostDeviceLDB(int peSetLen, int *peSet)
Definition: WorkDistrib.C:3539
void doneSaveComputeMap(CkReductionMsg *)
Definition: WorkDistrib.C:430
bool operator()(int a, int b) const
Definition: WorkDistrib.h:128
void enqueueWorkB3(LocalWorkMsg *msg)
Definition: WorkDistrib.C:3230
double BigReal
Definition: common.h:123
void assignNodeToPatch(void)
Definition: WorkDistrib.C:1456