NAMD
Classes | Public Types | Public Member Functions | Static Public Member Functions | List of all members
CollectionMaster Class Reference

#include <CollectionMaster.h>

Inheritance diagram for CollectionMaster:

Classes

class  CollectVectorInstance
 
class  CollectVectorInstanceDcdSelection
 
class  CollectVectorSequence
 
class  CollectVectorSequenceDcdSelection
 

Public Types

enum  OperationStatus { NOT_PROCESSED, IN_PROCESS, HAS_PROCESSED }
 

Public Member Functions

 CollectionMaster ()
 
 ~CollectionMaster (void)
 
void receivePositions (CollectVectorMsg *msg)
 
void receivePositionsDcdSelection (CollectVectorMsg *msg)
 
void receiveVelocities (CollectVectorMsg *msg)
 
void receiveForces (CollectVectorMsg *msg)
 
void receiveDataStream (DataStreamMsg *msg)
 
void enqueuePositions (int seq, Lattice &lattice)
 
void enqueuePositionsDcdSelection (int seq, Lattice &lattice)
 
void enqueueVelocities (int seq)
 
void enqueueForces (int seq)
 
void disposePositions (CollectVectorInstance *c)
 
void disposeVelocities (CollectVectorInstance *c)
 
void disposeForces (CollectVectorInstance *c)
 
void blockPositions ()
 
void unblockPositions ()
 
void receiveOutputPosReady (int seq)
 
void receiveOutputVelReady (int seq)
 
void receiveOutputForceReady (int seq)
 
void startNextRoundOutputPos (double totalT)
 
void startNextRoundOutputVel (double totalT)
 
void startNextRoundOutputForce (double totalT)
 
void wrapCoorFinished ()
 

Static Public Member Functions

static CollectionMasterObject ()
 

Detailed Description

Definition at line 43 of file CollectionMaster.h.

Member Enumeration Documentation

◆ OperationStatus

Constructor & Destructor Documentation

◆ CollectionMaster()

CollectionMaster::CollectionMaster ( )

Definition at line 22 of file CollectionMaster.C.

References DebugM.

23 {
24  if (CkpvAccess(CollectionMaster_instance) == 0) {
25  CkpvAccess(CollectionMaster_instance) = this;
26  } else {
27  DebugM(1, "CollectionMaster::CollectionMaster() - another instance of CollectionMaster exists!\n");
28  }
29  dataStreamFile = 0;
30 
31 #ifdef MEM_OPT_VERSION
32  wrapCoorDoneCnt = 0;
33  posDoneCnt = 0;
34  velDoneCnt = 0;
35  parOut = new ParOutput();
36 #endif
37 
38  posTimings = 10; velTimings = forceTimings = 5;
39 #ifdef NODEGROUP_FORCE_REGISTER
40  cmlock = CmiCreateLock();
41 #endif
42 }
#define DebugM(x, y)
Definition: Debug.h:75

◆ ~CollectionMaster()

CollectionMaster::~CollectionMaster ( void  )

Definition at line 45 of file CollectionMaster.C.

46 {
47 #ifdef NODEGROUP_FORCE_REGISTER
48  CmiDestroyLock(cmlock);
49 #endif
50 }

Member Function Documentation

◆ blockPositions()

void CollectionMaster::blockPositions ( )
inline

◆ disposeForces()

void CollectionMaster::disposeForces ( CollectVectorInstance c)

Definition at line 218 of file CollectionMaster.C.

References ResizeArray< Elem >::begin(), CollectionMaster::CollectVectorInstance::data, DebugM, CollectionMaster::CollectVectorInstance::fdata, Output::force(), CollectionMaster::CollectVectorInstance::free(), memusage_MB(), Node::Object(), Node::output, CollectionMaster::CollectVectorInstance::seq, and ResizeArray< Elem >::size().

Referenced by enqueueForces(), and receiveForces().

219 {
220 #ifndef MEM_OPT_VERSION
221  DebugM(3,"Collected forces at " << c->seq << std::endl);
222  int seq = c->seq;
223  int size = c->data.size();
224  if ( ! size ) size = c->fdata.size();
225  Vector *data = c->data.begin();
226  FloatVector *fdata = c->fdata.begin();
227  double exectime = CmiWallTimer();
228  double mem = memusage_MB();
229 #ifdef NODEGROUP_FORCE_REGISTER
230  if (Node::Object()->simParameters->CUDASOAintegrate) {
231  CProxy_PatchData cpdata(CkpvAccess(BOCclass_group).patchData);
232  Output *pout = cpdata.ckLocalBranch()->ptrOutput;
233  pout->force(seq,size,data,fdata);
234  }
235  else
236 #endif
237  {
238  Node::Object()->output->force(seq,size,data,fdata);
239  }
240  c->free();
241  exectime = CmiWallTimer()-exectime;
242  if ( forceTimings ) {
243  CkPrintf("The last force output (seq=%d) takes %.3f seconds, %.3f MB of memory in use\n", seq, exectime, mem);
244  --forceTimings;
245  }
246 #endif
247 }
static Node * Object()
Definition: Node.h:86
void force(int timestep, int n, Vector *frc, FloatVector *ffrc)
Produce appropriate force for the current timestep.
Definition: Output.C:646
Definition: Vector.h:72
Output * output
Definition: Node.h:185
#define DebugM(x, y)
Definition: Debug.h:75
double memusage_MB()
Definition: memusage.h:13
Definition: Output.h:35

◆ disposePositions()

void CollectionMaster::disposePositions ( CollectVectorInstance c)

Definition at line 107 of file CollectionMaster.C.

References ResizeArray< Elem >::begin(), Output::coordinate(), CollectionMaster::CollectVectorInstance::data, DebugM, CollectionMaster::CollectVectorInstance::fdata, CollectionMaster::CollectVectorInstance::free(), CollectionMaster::CollectVectorInstance::lattice, memusage_MB(), Node::Object(), Node::output, CollectionMaster::CollectVectorInstance::seq, Node::simParameters, simParams, and ResizeArray< Elem >::size().

Referenced by enqueuePositions(), enqueuePositionsDcdSelection(), receivePositions(), and receivePositionsDcdSelection().

108 {
109  DebugM(3, "["<<CkMyPe()<<"]"<< " disposePositions\n");
110 #ifndef MEM_OPT_VERSION
111  int seq = c->seq;
112  int size = c->data.size();
113  if ( ! size ) size = c->fdata.size();
114  Vector *data = c->data.begin();
115  FloatVector *fdata = c->fdata.begin();
116  double exectime = CmiWallTimer();
117  double mem = memusage_MB();
118 #ifdef NODEGROUP_FORCE_REGISTER
120  if (simParams->CUDASOAintegrate && simParams->GPUresidentSingleProcessMode) {
121  CProxy_PatchData cpdata(CkpvAccess(BOCclass_group).patchData);
122  Output *pout = cpdata.ckLocalBranch()->ptrOutput;
123  pout->coordinate(seq,size,data,fdata,c->lattice);
124  }
125  else
126 #endif
127  {
128  Node::Object()->output->coordinate(seq,size,data,fdata,c->lattice);
129  }
130  c->free();
131  exectime = CmiWallTimer()-exectime;
132  if ( posTimings ) {
133  CkPrintf("The last position output (seq=%d) takes %.3f seconds, %.3f MB of memory in use\n", seq, exectime, mem);
134  --posTimings;
135  }
136 #endif
137 }
static Node * Object()
Definition: Node.h:86
Definition: Vector.h:72
Output * output
Definition: Node.h:185
SimParameters * simParameters
Definition: Node.h:181
#define DebugM(x, y)
Definition: Debug.h:75
double memusage_MB()
Definition: memusage.h:13
Definition: Output.h:35
void coordinate(int timestep, int n, Vector *coor, FloatVector *fcoor, Lattice &lattice)
Produce appropriate coordinate output for the current timestep.
Definition: Output.C:334
#define simParams
Definition: Output.C:131

◆ disposeVelocities()

void CollectionMaster::disposeVelocities ( CollectVectorInstance c)

Definition at line 163 of file CollectionMaster.C.

References ResizeArray< Elem >::begin(), CollectionMaster::CollectVectorInstance::data, DebugM, CollectionMaster::CollectVectorInstance::fdata, CollectionMaster::CollectVectorInstance::free(), memusage_MB(), Node::Object(), Node::output, CollectionMaster::CollectVectorInstance::seq, ResizeArray< Elem >::size(), and Output::velocity().

Referenced by enqueueVelocities(), and receiveVelocities().

164 {
165 #ifndef MEM_OPT_VERSION
166  DebugM(3,"Collected velocities at " << c->seq << std::endl);
167  int seq = c->seq;
168  int size = c->data.size();
169  if ( ! size ) size = c->fdata.size();
170  Vector *data = c->data.begin();
171  FloatVector *fdata = c->fdata.begin();
172  double exectime = CmiWallTimer();
173  double mem = memusage_MB();
174 #ifdef NODEGROUP_FORCE_REGISTER
175  if (Node::Object()->simParameters->CUDASOAintegrate) {
176  CProxy_PatchData cpdata(CkpvAccess(BOCclass_group).patchData);
177  Output *pout = cpdata.ckLocalBranch()->ptrOutput;
178  pout->velocity(seq,size,data,fdata);
179  }
180  else
181 #endif
182  {
183  Node::Object()->output->velocity(seq,size,data,fdata);
184  }
185  c->free();
186  exectime = CmiWallTimer()-exectime;
187  if ( velTimings ) {
188  CkPrintf("The last velocity output (seq=%d) takes %.3f seconds, %.3f MB of memory in use\n", seq, exectime, mem);
189  --velTimings;
190  }
191 #endif
192 }
static Node * Object()
Definition: Node.h:86
Definition: Vector.h:72
Output * output
Definition: Node.h:185
#define DebugM(x, y)
Definition: Debug.h:75
double memusage_MB()
Definition: memusage.h:13
Definition: Output.h:35
void velocity(int timestep, int n, Vector *vel, FloatVector *fvel)
Produce appropriate velocity for the current timestep.
Definition: Output.C:541

◆ enqueueForces()

void CollectionMaster::enqueueForces ( int  seq)

Definition at line 206 of file CollectionMaster.C.

References disposeForces(), CollectionMaster::CollectVectorSequence::enqueue(), and CollectionMaster::CollectVectorSequence::removeReady().

Referenced by Controller::enqueueCollections().

207 {
208  Lattice dummy;
209  forces.enqueue(seq,dummy);
210 #ifndef MEM_OPT_VERSION
211  CollectVectorInstance *c;
212  while ( ( c = forces.removeReady() ) ) { disposeForces(c); }
213 #else
214  checkForceReady();
215 #endif
216 }
CollectVectorInstance * removeReady(void)
void disposeForces(CollectVectorInstance *c)
void enqueue(int seq, Lattice &lattice)

◆ enqueuePositions()

void CollectionMaster::enqueuePositions ( int  seq,
Lattice lattice 
)

Definition at line 80 of file CollectionMaster.C.

References DebugM, disposePositions(), CollectionMaster::CollectVectorSequence::enqueue(), and CollectionMaster::CollectVectorSequence::removeReady().

Referenced by Controller::enqueueCollections().

81 {
82  DebugM(3, "["<<CkMyPe()<<"]"<< " enqueuePositions\n");
83  positions.enqueue(seq,lattice);
84 #ifndef MEM_OPT_VERSION
85 
86  CollectVectorInstance *c;
87  while ( ( c = positions.removeReady() ) ) { disposePositions(c); }
88 #else
89  checkPosReady();
90 #endif
91 }
CollectVectorInstance * removeReady(void)
#define DebugM(x, y)
Definition: Debug.h:75
void enqueue(int seq, Lattice &lattice)
void disposePositions(CollectVectorInstance *c)

◆ enqueuePositionsDcdSelection()

void CollectionMaster::enqueuePositionsDcdSelection ( int  seq,
Lattice lattice 
)

Definition at line 93 of file CollectionMaster.C.

References DebugM, disposePositions(), CollectionMaster::CollectVectorSequence::enqueue(), and CollectionMaster::CollectVectorSequenceDcdSelection::removeReady().

Referenced by Controller::enqueueCollections().

94 {
95  DebugM(3, "["<<CkMyPe()<<"]"<< " enqueuePositionsDcdSelection\n");
96 #ifndef MEM_OPT_VERSION
97  positionsDcdSelection.enqueue(seq,lattice);
98 
99  CollectVectorInstanceDcdSelection *c;
100  while ( ( c = positionsDcdSelection.removeReady() ) ) { disposePositions(c); }
101 #else
102  checkPosReady();
103 #endif
104 }
#define DebugM(x, y)
Definition: Debug.h:75
void enqueue(int seq, Lattice &lattice)
void disposePositions(CollectVectorInstance *c)
CollectVectorInstanceDcdSelection * removeReady(void)

◆ enqueueVelocities()

void CollectionMaster::enqueueVelocities ( int  seq)

Definition at line 151 of file CollectionMaster.C.

References disposeVelocities(), CollectionMaster::CollectVectorSequence::enqueue(), and CollectionMaster::CollectVectorSequence::removeReady().

Referenced by Controller::enqueueCollections().

152 {
153  Lattice dummy;
154  velocities.enqueue(seq,dummy);
155 #ifndef MEM_OPT_VERSION
156  CollectVectorInstance *c;
157  while ( ( c = velocities.removeReady() ) ) { disposeVelocities(c); }
158 #else
159  checkVelReady();
160 #endif
161 }
CollectVectorInstance * removeReady(void)
void enqueue(int seq, Lattice &lattice)
void disposeVelocities(CollectVectorInstance *c)

◆ Object()

static CollectionMaster* CollectionMaster::Object ( )
inlinestatic

Definition at line 46 of file CollectionMaster.h.

Referenced by recvReplicaDcdAck(), sendReplicaDcdData(), and sendReplicaDcdInit().

46  {
47  return CkpvAccess(CollectionMaster_instance);
48  }

◆ receiveDataStream()

void CollectionMaster::receiveDataStream ( DataStreamMsg msg)

Definition at line 250 of file CollectionMaster.C.

References SimParameters::auxFilename, ResizeArray< Elem >::begin(), DataStreamMsg::data, NAMD_backup_file(), NAMD_die(), Node::Object(), and Node::simParameters.

250  {
251  if ( ! dataStreamFile ) {
252  char *fname = Node::Object()->simParameters->auxFilename;
253  // iout has large file linking issues on AIX
254  // iout << iINFO << "OPENING AUXILIARY DATA STREAM FILE "
255  // << fname << "\n" << endi;
256  CkPrintf("Info: OPENING AUXILIARY DATA STREAM FILE %s\n", fname);
257  NAMD_backup_file(fname);
258  dataStreamFile = fopen(fname,"w");
259  if ( ! dataStreamFile )
260  NAMD_die("Can't open auxiliary data stream file!");
261  }
262  fprintf(dataStreamFile,"%s",msg->data.begin());
263  fflush(dataStreamFile);
264  delete msg;
265 }
static Node * Object()
Definition: Node.h:86
SimParameters * simParameters
Definition: Node.h:181
char auxFilename[NAMD_FILENAME_BUFFER_SIZE]
void NAMD_die(const char *err_msg)
Definition: common.C:147
void NAMD_backup_file(const char *filename, const char *extension)
Definition: common.C:235
ResizeArray< char > data
iterator begin(void)
Definition: ResizeArray.h:36

◆ receiveForces()

void CollectionMaster::receiveForces ( CollectVectorMsg msg)

Definition at line 195 of file CollectionMaster.C.

References disposeForces(), Node::Object(), CollectionMaster::CollectVectorSequence::removeReady(), and CollectionMaster::CollectVectorSequence::submitData().

Referenced by CollectionMgr::submitForces().

196 {
197 #ifndef MEM_OPT_VERSION
198  forces.submitData(msg,Node::Object()->molecule->numAtoms);
199  delete msg;
200 
201  CollectVectorInstance *c;
202  while ( ( c = forces.removeReady() ) ) { disposeForces(c); }
203 #endif
204 }
static Node * Object()
Definition: Node.h:86
CollectVectorInstance * removeReady(void)
void disposeForces(CollectVectorInstance *c)
void submitData(CollectVectorMsg *msg, int max_index)

◆ receiveOutputForceReady()

void CollectionMaster::receiveOutputForceReady ( int  seq)

Definition at line 291 of file CollectionMaster.C.

References CollectionMaster::CollectVectorSequence::submitData().

291  {
292 #ifdef MEM_OPT_VERSION
293  forces.submitData(seq);
294  checkForceReady();
295 #endif
296 }
void submitData(CollectVectorMsg *msg, int max_index)

◆ receiveOutputPosReady()

void CollectionMaster::receiveOutputPosReady ( int  seq)

◆ receiveOutputVelReady()

void CollectionMaster::receiveOutputVelReady ( int  seq)

Definition at line 284 of file CollectionMaster.C.

References CollectionMaster::CollectVectorSequence::submitData().

284  {
285 #ifdef MEM_OPT_VERSION
286  velocities.submitData(seq);
287  checkVelReady();
288 #endif
289 }
void submitData(CollectVectorMsg *msg, int max_index)

◆ receivePositions()

void CollectionMaster::receivePositions ( CollectVectorMsg msg)

Definition at line 52 of file CollectionMaster.C.

References DebugM, disposePositions(), Node::Object(), CollectionMaster::CollectVectorSequence::removeReady(), and CollectionMaster::CollectVectorSequence::submitData().

Referenced by CollectionMgr::submitPositions().

53 {
54  DebugM(3, "["<<CkMyPe()<<"]"<< " receivePositions\n");
55 #ifndef MEM_OPT_VERSION
56  positions.submitData(msg,Node::Object()->molecule->numAtoms);
57 
58  delete msg;
59 
60  CollectVectorInstance *c;
61  while ( ( c = positions.removeReady() ) ) { disposePositions(c); }
62 #endif
63 }
static Node * Object()
Definition: Node.h:86
CollectVectorInstance * removeReady(void)
#define DebugM(x, y)
Definition: Debug.h:75
void submitData(CollectVectorMsg *msg, int max_index)
void disposePositions(CollectVectorInstance *c)

◆ receivePositionsDcdSelection()

void CollectionMaster::receivePositionsDcdSelection ( CollectVectorMsg msg)

Definition at line 66 of file CollectionMaster.C.

References DebugM, disposePositions(), CollectVectorMsg::index, CollectionMaster::CollectVectorSequenceDcdSelection::index, Node::Object(), CollectionMaster::CollectVectorSequenceDcdSelection::removeReady(), and CollectionMaster::CollectVectorSequenceDcdSelection::submitData().

Referenced by CollectionMgr::submitPositions().

67 {
68  DebugM(3, "["<<CkMyPe()<<"]"<< " receivePositionsDcdSelection index "<<msg->index<<"\n");
69 #ifndef MEM_OPT_VERSION
70  positionsDcdSelection.index=msg->index;
71  positionsDcdSelection.submitData(msg,Node::Object()->molecule->get_dcd_selection_size(msg->index));
72  delete msg;
73 
74  CollectVectorInstanceDcdSelection *c;
75  while ( ( c = positionsDcdSelection.removeReady() ) ) { disposePositions(c); }
76 #endif
77 }
static Node * Object()
Definition: Node.h:86
#define DebugM(x, y)
Definition: Debug.h:75
void disposePositions(CollectVectorInstance *c)
void submitData(CollectVectorMsg *msg, int max_index)
CollectVectorInstanceDcdSelection * removeReady(void)

◆ receiveVelocities()

void CollectionMaster::receiveVelocities ( CollectVectorMsg msg)

Definition at line 140 of file CollectionMaster.C.

References disposeVelocities(), Node::Object(), CollectionMaster::CollectVectorSequence::removeReady(), and CollectionMaster::CollectVectorSequence::submitData().

Referenced by CollectionMgr::submitVelocities().

141 {
142 #ifndef MEM_OPT_VERSION
143  velocities.submitData(msg,Node::Object()->molecule->numAtoms);
144  delete msg;
145 
146  CollectVectorInstance *c;
147  while ( ( c = velocities.removeReady() ) ) { disposeVelocities(c); }
148 #endif
149 }
static Node * Object()
Definition: Node.h:86
CollectVectorInstance * removeReady(void)
void submitData(CollectVectorMsg *msg, int max_index)
void disposeVelocities(CollectVectorInstance *c)

◆ startNextRoundOutputForce()

void CollectionMaster::startNextRoundOutputForce ( double  totalT)

Definition at line 367 of file CollectionMaster.C.

References DebugM, CollectionMaster::CollectVectorInstance::free(), IN_PROCESS, memusage_MB(), Node::Object(), and CollectionMaster::CollectVectorInstance::seq.

367  {
368 #ifdef MEM_OPT_VERSION
369  DebugM(3, "["<<CkMyPe()<<"]"<< " startNextRoundOutputForce\n");
370  if(totalT > forceIOTime) forceIOTime = totalT;
371 
372 #if OUTPUT_SINGLE_FILE
373  if(++forceDoneCnt < Node::Object()->simParameters->numoutputwrts) return;
374 #else
375  if(++forceDoneCnt < Node::Object()->simParameters->numoutputprocs) return;
376 #endif
377 
378  forceDoneCnt = 0;
379 
380  //retrieve the last ready instance
381  CollectVectorInstance *c = forces.getReady();
382  int seq = c->seq;
383  CmiAssert(c->status == IN_PROCESS);
384  double mem = memusage_MB();
385  forces.removeFirstReady();
386  c->free();
387  forceOutTime = CmiWallTimer()-forceOutTime;
388  if ( forceTimings ) {
389  CkPrintf("The last force output (seq=%d) takes %.3f seconds(file I/O: %.3f secs), %.3f MB of memory in use\n", seq, forceOutTime, forceIOTime, mem);
390  --forceTimings;
391  }
392 
393  //Actually the c->status doesn't need to be checked because it is
394  //certain that the new ready one will not be in IN_PROCESS status
395  checkForceReady();
396 #endif
397 }
static Node * Object()
Definition: Node.h:86
#define DebugM(x, y)
Definition: Debug.h:75
double memusage_MB()
Definition: memusage.h:13

◆ startNextRoundOutputPos()

void CollectionMaster::startNextRoundOutputPos ( double  totalT)

Definition at line 299 of file CollectionMaster.C.

References DebugM, CollectionMaster::CollectVectorInstance::free(), IN_PROCESS, memusage_MB(), Node::Object(), and CollectionMaster::CollectVectorInstance::seq.

299  {
300 #ifdef MEM_OPT_VERSION
301  DebugM(3, "["<<CkMyPe()<<"]"<< " startNextRoundOutputPos\n");
302  if(totalT > posIOTime) posIOTime = totalT;
303 
304 #ifndef OUTPUT_SINGLE_FILE
305 #error OUTPUT_SINGLE_FILE not defined!
306 #endif
307 
308 #if OUTPUT_SINGLE_FILE
309  if(++posDoneCnt < Node::Object()->simParameters->numoutputwrts) return;
310 #else
311  if(++posDoneCnt < Node::Object()->simParameters->numoutputprocs) return;
312 #endif
313 
314  posDoneCnt = 0;
315 
316  //retrieve the last ready instance
317  CollectVectorInstance *c = positions.getReady();
318  int seq = c->seq;
319  CmiAssert(c->status == IN_PROCESS);
320  double mem = memusage_MB();
321  positions.removeFirstReady();
322  c->free();
323  posOutTime = CmiWallTimer()-posOutTime;
324  if ( posTimings ) {
325  CkPrintf("The last position output (seq=%d) takes %.3f seconds(file I/O: %.3f secs), %.3f MB of memory in use\n", seq, posOutTime, posIOTime, mem);
326  --posTimings;
327  }
328 
329  //Actually the c->status doesn't need to be checked because it is
330  //certain that the new ready one will not be in IN_PROCESS status
331  checkPosReady();
332 #endif
333 }
static Node * Object()
Definition: Node.h:86
#define DebugM(x, y)
Definition: Debug.h:75
double memusage_MB()
Definition: memusage.h:13

◆ startNextRoundOutputVel()

void CollectionMaster::startNextRoundOutputVel ( double  totalT)

Definition at line 335 of file CollectionMaster.C.

References CollectionMaster::CollectVectorInstance::free(), IN_PROCESS, memusage_MB(), Node::Object(), and CollectionMaster::CollectVectorInstance::seq.

335  {
336 #ifdef MEM_OPT_VERSION
337 
338  if(totalT > velIOTime) velIOTime = totalT;
339 
340 #if OUTPUT_SINGLE_FILE
341  if(++velDoneCnt < Node::Object()->simParameters->numoutputwrts) return;
342 #else
343  if(++velDoneCnt < Node::Object()->simParameters->numoutputprocs) return;
344 #endif
345 
346  velDoneCnt = 0;
347 
348  //retrieve the last ready instance
349  CollectVectorInstance *c = velocities.getReady();
350  int seq = c->seq;
351  CmiAssert(c->status == IN_PROCESS);
352  double mem = memusage_MB();
353  velocities.removeFirstReady();
354  c->free();
355  velOutTime = CmiWallTimer()-velOutTime;
356  if ( velTimings ) {
357  CkPrintf("The last velocity output (seq=%d) takes %.3f seconds(file I/O: %.3f secs), %.3f MB of memory in use\n", seq, velOutTime, velIOTime, mem);
358  --velTimings;
359  }
360 
361  //Actually the c->status doesn't need to be checked because it is
362  //certain that the new ready one will not be in IN_PROCESS status
363  checkVelReady();
364 #endif
365 }
static Node * Object()
Definition: Node.h:86
double memusage_MB()
Definition: memusage.h:13

◆ unblockPositions()

void CollectionMaster::unblockPositions ( )
inline

◆ wrapCoorFinished()

void CollectionMaster::wrapCoorFinished ( )

Definition at line 400 of file CollectionMaster.C.

References DebugM, Node::Object(), and CollectionMaster::CollectVectorInstance::seq.

400  {
401 #ifdef MEM_OPT_VERSION
402  DebugM(3, "["<<CkMyPe()<<"]"<< " wrapCoorFinished\n");
403  if(++wrapCoorDoneCnt == Node::Object()->simParameters->numoutputprocs){
404  wrapCoorDoneCnt = 0;
405 
406  //count the wrapping-coor time into master writing time
407  posIOTime = CmiWallTimer()-posOutTime;
408 
409  //it's ready to output positions
410  CollectVectorInstance *c = positions.getReady();
411 
412  CProxy_ParallelIOMgr io(CkpvAccess(BOCclass_group).ioMgr);
413  ParallelIOMgr *ioMgr = io.ckLocalBranch();
414 
415 #if OUTPUT_SINGLE_FILE
416  //notify output procs to do Token based output
417  int grpsize = ioMgr->numOutputProcs / ioMgr->numOutputWrts;
418  int remains = ioMgr->numOutputProcs % ioMgr->numOutputWrts;
419  int outrank = 0;
420  int i;
421  for(i=0; i<remains; i++){
422  io[ioMgr->outputProcArray[outrank]].disposePositions(c->seq, posIOTime);
423  outrank += (grpsize+1);
424  }
425  for(; i<ioMgr->numOutputWrts; i++){
426  io[ioMgr->outputProcArray[outrank]].disposePositions(c->seq, posIOTime);
427  outrank += grpsize;
428  }
429 #else
430  //output multiple files
431  for(int i=0; i<ioMgr->numOutputProcs; i++) {
432  io[ioMgr->outputProcArray[i]].disposePositions(c->seq, posIOTime);
433  }
434 #endif
435 
436  }
437 #endif
438 }
static Node * Object()
Definition: Node.h:86
#define DebugM(x, y)
Definition: Debug.h:75

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