NAMD
ComputeMap.h
Go to the documentation of this file.
1 
7 #ifndef COMPUTEMAP_H
8 #define COMPUTEMAP_H
9 
10 #include "NamdTypes.h"
11 #include "ProcessorPrivate.h"
12 #include "ResizeArray.h"
13 
14 class Compute;
15 class ComputeMgr;
16 class MIStream;
17 class MOStream;
18 template<class Type> class ObjectArena;
19 
21 {
34  // JLai
37  // End of JLai entry
47 #ifdef DPMTA
48  computeDPMTAType,
49 #endif
50 #ifdef DPME
51  computeDPMEType,
52 #endif
54 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
57 #ifdef BONDED_CUDA
58  computeBondedCUDAType,
59 #endif
60 #endif
74 /* BEGIN gf */
76 /* END gf */
85 };
86 
88 {
89 public:
90  static ComputeMap *Instance();
91  inline static ComputeMap *Object() { return instance; }
92 
93  void checkMap();
94 
95  ~ComputeMap(void);
96 
98  computePtrs[cid] = c;
99  }
100 
101  // numComputes() returns the number of compute objects known
102  // by the map.
103  inline int numComputes(void) {
104  return nComputes;
105  }
106 
107  // node(cid) returns the node where the compute object currently exists.
108  inline int node(ComputeID cid) {
109  return computeData[cid].node;
110  }
111 
112  inline void setNode(ComputeID cid, NodeID node) {
113  computeData[cid].node = node;
114  }
115 
116  // newNode(cid,node) sets up map to tell WorkDistrib to send
117  // compute to new node
118  inline NodeID newNode(ComputeID cid) {
119  return (computeData[cid].moveToNode);
120  }
121 
122  inline void setNewNode(ComputeID cid, NodeID node) {
123  computeData[cid].moveToNode = node;
124  }
125 
126  // numPids(cid) returns the number of patch ids which are registered
127  // with this compute object.
128  int numPids(ComputeID cid);
129 
130  // pid(cid,i) returns the i-th patch id registered
131  // with the patch.
132  int pid(ComputeID cid, int i);
133  int trans(ComputeID cid, int i);
134 
135  // type(cid) returns the compute type of the given ComputeID
137  int partition(ComputeID cid);
138  int numPartitions(ComputeID cid);
139 
140  inline void setNumPartitions(ComputeID cid, char numPartitions) {
141  computeData[cid].numPartitions = numPartitions;
142  }
143  inline char newNumPartitions(ComputeID cid) {
144  return (computeData[cid].newNumPartitions);
145  }
146  inline void setNewNumPartitions(ComputeID cid, char numPartitions) {
147  computeData[cid].newNumPartitions = numPartitions;
148  }
149 
150  int allocateCids();
151 
152  // storeCompute(cid,node,maxPids) tells the ComputeMap to store
153  // information about the indicated patch, and allocate space
154  // for up to maxPids dependents
155  ComputeID storeCompute(int node,int maxPids,ComputeType type,
156  int partition=-1, int numPartitions=0);
157 
158  // newPid(cid,pid) stores the n patch ids associated with
159  // compute id cid.
160  void newPid(ComputeID cid, int pid, int trans = 13);
161 
162  #if defined(NAMD_MIC)
163  void setDirectToDevice(const ComputeID cid, const int d);
164  int directToDevice(const ComputeID cid) const;
165  #endif
166 
168 
169  void printComputeMap(void);
170  void saveComputeMap(const char *fname);
171  void loadComputeMap(const char *fname);
172 
173  Compute *compute(ComputeID cid) { return computePtrs[cid]; };
174 
175  friend class ComputeMgr;
176 
177  struct PatchRec
178  {
180  int trans;
181 
182  PatchRec() : pid(-1), trans(-1) { ; }
183  };
184 
185  enum { numPidsAllocated=8 };
186 
187  struct ComputeData
188  {
190  node = -1; moveToNode = -1;
191  newNumPartitions = 0;
192  numPids = 0;
193  #if defined(NAMD_MIC)
194  directToDevice = 0;
195  #endif
196  }
197  int node;
200  char partition;
203  char numPids;
205  #if defined(NAMD_MIC)
206  char directToDevice;
207  #endif
208  };
209 protected:
210  friend class WorkDistrib;
211  void pack(MOStream *msg);
212  void unpack(MIStream *msg);
213  void initPtrs();
214  void extendPtrs();
215 
216  ComputeMap(void);
217 
218 private:
219  int nComputes;
220  ResizeArray<ComputeData> computeData;
221  Compute **computePtrs;
222 
223  static ComputeMap *instance;
224 };
225 
226 #endif /* COMPUTEMAP_H */
227 
void checkMap()
Definition: ComputeMap.C:46
void setNewNumPartitions(ComputeID cid, char numPartitions)
Definition: ComputeMap.h:146
int numComputes(void)
Definition: ComputeMap.h:103
void saveComputeMap(const char *fname)
Definition: ComputeMap.C:260
int32 ComputeID
Definition: NamdTypes.h:288
void initPtrs()
Definition: ComputeMap.C:80
ComputeType
Definition: ComputeMap.h:20
void registerCompute(ComputeID cid, Compute *c)
Definition: ComputeMap.h:97
void loadComputeMap(const char *fname)
Definition: ComputeMap.C:276
void setNumPartitions(ComputeID cid, char numPartitions)
Definition: ComputeMap.h:140
ComputeID storeCompute(int node, int maxPids, ComputeType type, int partition=-1, int numPartitions=0)
Definition: ComputeMap.C:151
void setNode(ComputeID cid, NodeID node)
Definition: ComputeMap.h:112
int allocateCids()
Definition: ComputeMap.C:141
char newNumPartitions(ComputeID cid)
Definition: ComputeMap.h:143
void printComputeMap(void)
Definition: ComputeMap.C:204
~ComputeMap(void)
Definition: ComputeMap.C:40
ComputeType type(ComputeID cid)
Definition: ComputeMap.C:118
void pack(MOStream *msg)
Definition: ComputeMap.C:61
int numPartitions(ComputeID cid)
Definition: ComputeMap.C:133
void setNewNode(ComputeID cid, NodeID node)
Definition: ComputeMap.h:122
int partition(ComputeID cid)
Definition: ComputeMap.C:126
int32 NodeID
Definition: NamdTypes.h:289
void extendPtrs()
Definition: ComputeMap.C:87
static ComputeMap * Instance()
Definition: ComputeMap.C:24
void newPid(ComputeID cid, int pid, int trans=13)
Definition: ComputeMap.C:196
Compute * compute(ComputeID cid)
Definition: ComputeMap.h:173
ComputeID cloneCompute(ComputeID src, int partition)
Definition: ComputeMap.C:183
static ComputeMap * Object()
Definition: ComputeMap.h:91
int node(ComputeID cid)
Definition: ComputeMap.h:108
int numPids(ComputeID cid)
Definition: ComputeMap.C:101
PatchRec pids[numPidsAllocated]
Definition: ComputeMap.h:204
int pid(ComputeID cid, int i)
Definition: ComputeMap.C:107
int trans(ComputeID cid, int i)
Definition: ComputeMap.C:112
void unpack(MIStream *msg)
Definition: ComputeMap.C:68
int32 PatchID
Definition: NamdTypes.h:287
ComputeMap(void)
Definition: ComputeMap.C:33
NodeID newNode(ComputeID cid)
Definition: ComputeMap.h:118