NAMD
Classes | Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Friends | List of all members
ComputeMap Class Reference

#include <ComputeMap.h>

Classes

struct  ComputeData
 
struct  PatchRec
 

Public Types

enum  { numPidsAllocated =8 }
 

Public Member Functions

void checkMap ()
 
 ~ComputeMap (void)
 
void registerCompute (ComputeID cid, Compute *c)
 
int numComputes (void)
 
int node (ComputeID cid)
 
void setNode (ComputeID cid, NodeID node)
 
NodeID newNode (ComputeID cid)
 
void setNewNode (ComputeID cid, NodeID node)
 
int numPids (ComputeID cid)
 
int pid (ComputeID cid, int i)
 
int trans (ComputeID cid, int i)
 
ComputeType type (ComputeID cid)
 
int partition (ComputeID cid)
 
int numPartitions (ComputeID cid)
 
void setNumPartitions (ComputeID cid, char numPartitions)
 
char newNumPartitions (ComputeID cid)
 
void setNewNumPartitions (ComputeID cid, char numPartitions)
 
int allocateCids ()
 
ComputeID storeCompute (int node, int maxPids, ComputeType type, int partition=-1, int numPartitions=0)
 
void newPid (ComputeID cid, int pid, int trans=13)
 
ComputeID cloneCompute (ComputeID src, int partition)
 
void printComputeMap (void)
 
void saveComputeMap (const char *fname)
 
void loadComputeMap (const char *fname)
 
Computecompute (ComputeID cid)
 

Static Public Member Functions

static ComputeMapInstance ()
 
static ComputeMapObject ()
 

Protected Member Functions

void pack (MOStream *msg)
 
void unpack (MIStream *msg)
 
void initPtrs ()
 
void extendPtrs ()
 
 ComputeMap (void)
 

Friends

class ComputeMgr
 
class WorkDistrib
 

Detailed Description

Definition at line 85 of file ComputeMap.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
numPidsAllocated 

Definition at line 183 of file ComputeMap.h.

Constructor & Destructor Documentation

◆ ~ComputeMap()

ComputeMap::~ComputeMap ( void  )

Definition at line 40 of file ComputeMap.C.

41 {
42  delete [] computePtrs;
43 }

◆ ComputeMap()

ComputeMap::ComputeMap ( void  )
protected

Definition at line 33 of file ComputeMap.C.

Referenced by Instance().

34 {
35  nComputes=0;
36  computePtrs=0;
37 }

Member Function Documentation

◆ allocateCids()

int ComputeMap::allocateCids ( )

Definition at line 141 of file ComputeMap.C.

Referenced by WorkDistrib::mapComputes().

142 {
143  nComputes = 0;
144  computeData.resize(500);
145  computeData.resize(0);
146 
147  return 0;
148 }

◆ checkMap()

void ComputeMap::checkMap ( void  )

Definition at line 46 of file ComputeMap.C.

References DebugM.

Referenced by ComputeMgr::updateLocalComputes5().

47 {
48  int computeCount = nComputes;
49  for (int i=0; i<nComputes; i++) {
50  if (computePtrs[i]) {
51  computeCount++;
52  if (! (computePtrs[i]->cid == i)) {
53  DebugM(4, "ComputeID("<<computePtrs[i]->cid<<") != ComputeID("
54  << i <<")\n");
55  }
56  }
57  }
58  DebugM(4, "Compute Count = " << computeCount << "\n");
59 }
#define DebugM(x, y)
Definition: Debug.h:75

◆ cloneCompute()

ComputeID ComputeMap::cloneCompute ( ComputeID  src,
int  partition 
)

Definition at line 183 of file ComputeMap.C.

References partition().

Referenced by ComputeMgr::splitComputes().

184 {
185  const int cid = computeData.size();
186  computeData.resize(cid+1);
187 
188  computeData[cid] = computeData[src];
189  computeData[cid].partition = partition;
190  computeData[cid].node = -1;
191 
192  return cid;
193 }
int partition(ComputeID cid)
Definition: ComputeMap.C:126

◆ compute()

Compute* ComputeMap::compute ( ComputeID  cid)
inline

Definition at line 171 of file ComputeMap.h.

Referenced by LdbCoordinator::initialize(), and ComputeMgr::updateLocalComputes().

171 { return computePtrs[cid]; };

◆ extendPtrs()

void ComputeMap::extendPtrs ( )
protected

Definition at line 87 of file ComputeMap.C.

References NAMD_bug().

Referenced by ComputeMgr::splitComputes().

87  {
88  if ( ! computePtrs ) NAMD_bug("ComputeMap::extendPtrs() 1");
89  int oldN = nComputes;
90  nComputes = computeData.size();
91  if ( nComputes > oldN ) {
92  Compute **oldPtrs = computePtrs;
93  computePtrs = new Compute*[nComputes];
94  memcpy(computePtrs, oldPtrs, oldN*sizeof(Compute*));
95  memset(computePtrs+oldN, 0, (nComputes-oldN)*sizeof(Compute*));
96  delete [] oldPtrs;
97  }
98 }
void NAMD_bug(const char *err_msg)
Definition: common.C:195

◆ initPtrs()

void ComputeMap::initPtrs ( )
protected

Definition at line 80 of file ComputeMap.C.

Referenced by WorkDistrib::sendComputeMap().

80  {
81  if ( ! computePtrs ) {
82  computePtrs = new Compute*[nComputes];
83  memset(computePtrs, 0, nComputes*sizeof(Compute*));
84  }
85 }

◆ Instance()

ComputeMap * ComputeMap::Instance ( )
static

Definition at line 24 of file ComputeMap.C.

References ComputeMap().

Referenced by Node::Node().

24  {
25  if (instance == 0) {
26  instance = new ComputeMap; // this is never deleted
27  }
28  return instance;
29 }
ComputeMap(void)
Definition: ComputeMap.C:33

◆ loadComputeMap()

void ComputeMap::loadComputeMap ( const char *  fname)

Definition at line 276 of file ComputeMap.C.

References node().

Referenced by WorkDistrib::mapComputes().

277 {
278  FILE *fp = fopen(fname, "r");
279  CmiAssert(fp != NULL);
280  int n;
281  fscanf(fp, "%d\n", &n);
282  CmiAssert(n == nComputes);
283  for(int i=0; i < nComputes; i++)
284  {
285  fscanf(fp, "%d\n", &computeData[i].node);
286  }
287  fclose(fp);
288 }
int node(ComputeID cid)
Definition: ComputeMap.h:106

◆ newNode()

NodeID ComputeMap::newNode ( ComputeID  cid)
inline

Definition at line 116 of file ComputeMap.h.

Referenced by WorkDistrib::recvComputeMapChanges(), ComputeMgr::splitComputes(), ComputeMgr::updateLocalComputes(), and ComputeMgr::updateLocalComputes3().

116  {
117  return (computeData[cid].moveToNode);
118  }

◆ newNumPartitions()

char ComputeMap::newNumPartitions ( ComputeID  cid)
inline

Definition at line 141 of file ComputeMap.h.

Referenced by WorkDistrib::recvComputeMapChanges(), ComputeMgr::splitComputes(), and ComputeMgr::updateLocalComputes().

141  {
142  return (computeData[cid].newNumPartitions);
143  }
char newNumPartitions(ComputeID cid)
Definition: ComputeMap.h:141

◆ newPid()

void ComputeMap::newPid ( ComputeID  cid,
int  pid,
int  trans = 13 
)

Definition at line 196 of file ComputeMap.C.

References pid(), and trans().

197 {
198  computeData[cid].pids[computeData[cid].numPids].pid=pid;
199  computeData[cid].pids[computeData[cid].numPids].trans=trans;
200  computeData[cid].numPids++;
201 }
int pid(ComputeID cid, int i)
Definition: ComputeMap.C:107
int trans(ComputeID cid, int i)
Definition: ComputeMap.C:112

◆ node()

int ComputeMap::node ( ComputeID  cid)
inline

◆ numComputes()

int ComputeMap::numComputes ( void  )
inline

◆ numPartitions()

int ComputeMap::numPartitions ( ComputeID  cid)

Definition at line 133 of file ComputeMap.C.

References computeErrorType.

Referenced by setNewNumPartitions(), setNumPartitions(), ComputeMgr::splitComputes(), storeCompute(), and NamdCentLB::Strategy().

134 {
135  if (nComputes)
136  return computeData[cid].numPartitions;
137  else return computeErrorType;
138 }

◆ numPids()

int ComputeMap::numPids ( ComputeID  cid)

Definition at line 101 of file ComputeMap.C.

Referenced by ProxyMgr::createProxies(), LdbCoordinator::initialize(), printComputeMap(), and ComputeMgr::updateLocalComputes().

102 {
103  return computeData[cid].numPids;
104 }

◆ Object()

static ComputeMap* ComputeMap::Object ( )
inlinestatic

◆ pack()

void ComputeMap::pack ( MOStream msg)
protected

Definition at line 61 of file ComputeMap.C.

References DebugM, and MOStream::put().

Referenced by WorkDistrib::sendComputeMap().

62 {
63  DebugM(4,"Packing ComputeMap\n");
64  msg->put(nComputes);
65  msg->put(nComputes,computeData.begin());
66 }
#define DebugM(x, y)
Definition: Debug.h:75
MOStream * put(char data)
Definition: MStream.h:112

◆ partition()

int ComputeMap::partition ( ComputeID  cid)

Definition at line 126 of file ComputeMap.C.

References computeErrorType.

Referenced by cloneCompute(), dumpbench(), and storeCompute().

127 {
128  if (nComputes)
129  return computeData[cid].partition;
130  else return computeErrorType;
131 }

◆ pid()

int ComputeMap::pid ( ComputeID  cid,
int  i 
)

◆ printComputeMap()

void ComputeMap::printComputeMap ( void  )

Definition at line 204 of file ComputeMap.C.

References DebugM, node(), numPids(), pid(), and type().

205 {
206  DebugM(2,"---------------------------------------");
207  DebugM(2,"---------------------------------------\n");
208 
209  DebugM(2,"nComputes = " << nComputes << '\n');
210  DebugM(2,"nAllocated = " << nComputes << '\n');
211  for(int i=0; i < nComputes; i++)
212  {
213  DebugM(2,"Compute " << i << '\n');
214  DebugM(2," node = " << computeData[i].node << '\n');
215  DebugM(2," numPids = " << computeData[i].numPids << '\n');
216  for(int j=0; j < computeData[i].numPids; j++)
217  {
218  DebugM(2,computeData[i].pids[j].pid);
219  if (!((j+1) % 6))
220  DebugM(2,'\n');
221  }
222  DebugM(2,"\n---------------------------------------");
223  DebugM(2,"---------------------------------------\n");
224 
225  }
226 
227 #ifdef MEM_OPT_VERSION
228 const char *fname = "computeMap.opt";
229 #else
230 const char *fname = "computeMap.orig";
231 #endif
232 
233  FILE *ofp = fopen(fname, "w");
234  fprintf(ofp,"---------------------------------------");
235  fprintf(ofp,"---------------------------------------\n");
236 
237  fprintf(ofp,"nComputes = %d\n", nComputes);
238  fprintf(ofp,"nAllocated = %d\n", nComputes);
239  for(int i=0; i < nComputes; i++)
240  {
241  fprintf(ofp,"Compute %d\n", i);
242  fprintf(ofp," node = %d\n",computeData[i].node);
243  fprintf(ofp," numPids = %d\n",computeData[i].numPids);
244  fprintf(ofp," type = %d\n",computeData[i].type);
245  for(int j=0; j < computeData[i].numPids; j++)
246  {
247  fprintf(ofp,"%d ",computeData[i].pids[j].pid);
248  if (!((j+1) % 6))
249  fprintf(ofp,"\n");
250  }
251  fprintf(ofp,"\n---------------------------------------");
252  fprintf(ofp,"---------------------------------------\n");
253 
254  }
255 
256 fclose(ofp);
257 
258 }
#define DebugM(x, y)
Definition: Debug.h:75
ComputeType type(ComputeID cid)
Definition: ComputeMap.C:118
int node(ComputeID cid)
Definition: ComputeMap.h:106
int numPids(ComputeID cid)
Definition: ComputeMap.C:101
int pid(ComputeID cid, int i)
Definition: ComputeMap.C:107

◆ registerCompute()

void ComputeMap::registerCompute ( ComputeID  cid,
Compute c 
)
inline

Definition at line 95 of file ComputeMap.h.

Referenced by ComputeMgr::updateLocalComputes().

95  {
96  computePtrs[cid] = c;
97  }

◆ saveComputeMap()

void ComputeMap::saveComputeMap ( const char *  fname)

Definition at line 260 of file ComputeMap.C.

References node().

Referenced by WorkDistrib::mapComputes(), and ComputeMgr::updateLocalComputes4().

261 {
262  static int count = 0;
263  char f[128];
264  sprintf(f, "%s.%d", fname, count++);
265  FILE *fp = fopen(f, "w");
266  CmiAssert(fp != NULL);
267  fprintf(fp, "%d\n", nComputes);
268  for(int i=0; i < nComputes; i++)
269  {
270  fprintf(fp, "%d\n", computeData[i].node);
271  }
272  fclose(fp);
273  CkPrintf("ComputeMap has been stored in %s.\n", f);
274 }
int node(ComputeID cid)
Definition: ComputeMap.h:106

◆ setNewNode()

void ComputeMap::setNewNode ( ComputeID  cid,
NodeID  node 
)
inline

Definition at line 120 of file ComputeMap.h.

References node().

Referenced by WorkDistrib::recvComputeMapChanges(), ComputeMgr::splitComputes(), NamdCentLB::Strategy(), ComputeMgr::updateLocalComputes3(), and NamdHybridLB::UpdateLocalLBInfo().

120  {
121  computeData[cid].moveToNode = node;
122  }
int node(ComputeID cid)
Definition: ComputeMap.h:106

◆ setNewNumPartitions()

void ComputeMap::setNewNumPartitions ( ComputeID  cid,
char  numPartitions 
)
inline

Definition at line 144 of file ComputeMap.h.

References numPartitions().

Referenced by WorkDistrib::recvComputeMapChanges(), NamdHybridLB::splitComputes(), ComputeMgr::splitComputes(), NamdCentLB::Strategy(), and ComputeMgr::updateLocalComputes3().

144  {
145  computeData[cid].newNumPartitions = numPartitions;
146  }
int numPartitions(ComputeID cid)
Definition: ComputeMap.C:133

◆ setNode()

void ComputeMap::setNode ( ComputeID  cid,
NodeID  node 
)
inline

Definition at line 110 of file ComputeMap.h.

References node().

Referenced by ComputeMgr::updateLocalComputes3().

110  {
111  computeData[cid].node = node;
112  }
int node(ComputeID cid)
Definition: ComputeMap.h:106

◆ setNumPartitions()

void ComputeMap::setNumPartitions ( ComputeID  cid,
char  numPartitions 
)
inline

Definition at line 138 of file ComputeMap.h.

References numPartitions().

Referenced by ComputeMgr::splitComputes().

138  {
139  computeData[cid].numPartitions = numPartitions;
140  }
int numPartitions(ComputeID cid)
Definition: ComputeMap.C:133

◆ storeCompute()

ComputeID ComputeMap::storeCompute ( int  node,
int  maxPids,
ComputeType  type,
int  partition = -1,
int  numPartitions = 0 
)

Definition at line 151 of file ComputeMap.C.

References NAMD_bug(), numPartitions(), numPidsAllocated, partition(), and type().

154 {
155  if (maxPids > numPidsAllocated) {
156  NAMD_bug("ComputeMap::storeCompute called with maxPids > numPidsAllocated");
157  }
158 
159  int cid;
160 
161  cid = nComputes;
162  nComputes++;
163  computeData.resize(nComputes);
164 
165  computeData[cid].node=inode;
166 
167  computeData[cid].type = type;
168  computeData[cid].partition = partition;
169  computeData[cid].numPartitions = numPartitions;
170 
171  computeData[cid].numPids = 0;
172 
173  #if defined(NAMD_MIC)
174  // Initially in MIC runs, all computes are mapped to the host. The host vs
175  // device LDB scheme will change this mapping later.
176  computeData[cid].directToDevice = 0;
177  #endif
178 
179  return cid;
180 }
void NAMD_bug(const char *err_msg)
Definition: common.C:195
ComputeType type(ComputeID cid)
Definition: ComputeMap.C:118
int numPartitions(ComputeID cid)
Definition: ComputeMap.C:133
int partition(ComputeID cid)
Definition: ComputeMap.C:126

◆ trans()

int ComputeMap::trans ( ComputeID  cid,
int  i 
)

Definition at line 112 of file ComputeMap.C.

Referenced by dumpbench(), newPid(), and registerUserEventsForAllComputeObjs().

113 {
114  return computeData[cid].pids[i].trans;
115 }

◆ type()

ComputeType ComputeMap::type ( ComputeID  cid)

◆ unpack()

void ComputeMap::unpack ( MIStream msg)
protected

Definition at line 68 of file ComputeMap.C.

References DebugM, MIStream::get(), and NAMD_bug().

Referenced by WorkDistrib::sendComputeMap().

69 {
70  DebugM(4,"Unpacking ComputeMap\n");
71  int old = nComputes;
72  msg->get(nComputes);
73  if ( old && old != nComputes ) {
74  NAMD_bug("number of computes in new ComputeMap has changed!\n");
75  }
76  computeData.resize(nComputes);
77  msg->get(nComputes,computeData.begin());
78 }
#define DebugM(x, y)
Definition: Debug.h:75
MIStream * get(char &data)
Definition: MStream.h:29
void NAMD_bug(const char *err_msg)
Definition: common.C:195

Friends And Related Function Documentation

◆ ComputeMgr

friend class ComputeMgr
friend

Definition at line 171 of file ComputeMap.h.

◆ WorkDistrib

friend class WorkDistrib
friend

Definition at line 208 of file ComputeMap.h.


The documentation for this class was generated from the following files: