NAMD
Sequencer.h
Go to the documentation of this file.
1 
7 #ifndef SEQUENCER_H
8 #define SEQUENCER_H
9 
10 #include "converse.h"
11 #include "Priorities.h"
12 #include "PatchTypes.h"
13 #include "PatchMgr.h"
14 #include "SequencerCUDA.h"
15 #include "GlobalGPUMgr.h"
16 #include "SynchronousCollectives.h"
17 
31 #define SOA_SIMPLIFY_PARAMS
32 
33 class HomePatch;
34 class SimParameters;
35 class SubmitReduction;
36 class CollectionMgr;
38 class LdbCoordinator;
39 class Random;
40 class SequencerCUDA;
41 #ifdef SOA_SIMPLIFY_PARAMS
42 struct PatchDataSOA;
43 #endif
44 
45 class Sequencer
46 {
47  friend class HomePatch;
48 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
49  friend class SequencerCUDA;
50 #endif
51 public:
52  Sequencer(HomePatch *p);
53  virtual ~Sequencer(void);
54  void run(void); // spawn thread, etc.
55  void awaken(void) {
56  CthAwakenPrio(thread, CK_QUEUEING_IFIFO, PRIORITY_SIZE, &priority);
57  }
58  void suspend(void);
59 
60 protected:
61  virtual void algorithm(void); // subclasses redefine this method
62 
63 #ifdef SEQUENCER_SOA
64 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
65  void integrate_CUDA_SOA(int scriptTask);
66  void initialize_integrate_CUDA_SOA(int scriptTask, int step, BigReal timestep,
67  int numberOfSteps, int nbondstep, int slowstep, int maxForceUsed);
68  void suspendULTs();
69  void wakeULTs();
70  void runComputeObjectsCUDA(int doMigration, int doGlobal, int pairlists, int nstep, int startup);
72  void updateDevicePatchMap(int startup);
73  void printDevicePatchMap();
74  void clearDevicePatchMap();
75  void updateDeviceData(const int startup, const int maxForceUsed, const int doGlobal);
76  void doMigrationGPU(const int startup, const int doGlobal, const int updatePatchMap);
77 
78  // apply MC pressure control
80  const int step,
81  const int doMigration,
82  const int doEnergy,
83  const int doVirial,
84  const int maxForceNumber,
85  const int doGlobal);
86 #endif
87  void integrate_SOA(int); // Verlet integrator using SOA data structures
88  void rattle1_SOA(BigReal,int);
90  const double scaling,
91  double dt_normal, // timestep Results::normal = 0
92  double dt_nbond, // timestep Results::nbond = 1
93  double dt_slow, // timestep Results::slow = 2
94 #ifndef SOA_SIMPLIFY_PARAMS
95  const double * __restrict recipMass,
96  const double * __restrict f_normal_x, // force Results::normal = 0
97  const double * __restrict f_normal_y,
98  const double * __restrict f_normal_z,
99  const double * __restrict f_nbond_x, // force Results::nbond = 1
100  const double * __restrict f_nbond_y,
101  const double * __restrict f_nbond_z,
102  const double * __restrict f_slow_x, // force Results::slow = 2
103  const double * __restrict f_slow_y,
104  const double * __restrict f_slow_z,
105  double * __restrict vel_x,
106  double * __restrict vel_y,
107  double * __restrict vel_z,
108  int numAtoms,
109 #endif
110  int maxForceNumber
111  );
113  const double dt
114 #ifndef SOA_SIMPLIFY_PARAMS
115  ,
116  const double * __restrict vel_x,
117  const double * __restrict vel_y,
118  const double * __restrict vel_z,
119  double * __restrict pos_x,
120  double * __restrict pos_y,
121  double * __restrict pos_z,
122  int numAtoms
123 #endif
124  );
125  void submitHalfstep_SOA(
126 #ifndef SOA_SIMPLIFY_PARAMS
127  const int * __restrict hydrogenGroupSize,
128  const float * __restrict mass,
129  const double * __restrict vel_x,
130  const double * __restrict vel_y,
131  const double * __restrict vel_z,
132  int numAtoms
133 #endif
134  );
136 #ifndef SOA_SIMPLIFY_PARAMS
137  const int * __restrict hydrogenGroupSize,
138  const float * __restrict mass,
139  const double * __restrict pos_x,
140  const double * __restrict pos_y,
141  const double * __restrict pos_z,
142  const double * __restrict vel_x,
143  const double * __restrict vel_y,
144  const double * __restrict vel_z,
145  const double * __restrict f_normal_x,
146  const double * __restrict f_normal_y,
147  const double * __restrict f_normal_z,
148  const double * __restrict f_nbond_x,
149  const double * __restrict f_nbond_y,
150  const double * __restrict f_nbond_z,
151  const double * __restrict f_slow_x,
152  const double * __restrict f_slow_y,
153  const double * __restrict f_slow_z,
154  int numAtoms
155 #endif
156  );
157  void submitCollections_SOA(int step, int zeroVel = 0);
158  void maximumMove_SOA(
159  const double dt,
160  const double maxvel2
161 #ifndef SOA_SIMPLIFY_PARAMS
162  ,
163  const double * __restrict vel_x,
164  const double * __restrict vel_y,
165  const double * __restrict vel_z,
166  int numAtoms
167 #endif
168  );
170  BigReal timestep
171 #ifndef SOA_SIMPLIFY_PARAMS
172  ,
173  const float * __restrict langevinParam,
174  double * __restrict vel_x,
175  double * __restrict vel_y,
176  double * __restrict vel_z,
177  int numAtoms
178 #endif
179  );
181  BigReal timestep
182 #ifndef SOA_SIMPLIFY_PARAMS
183  ,
184  const float * __restrict langevinParam,
185  const float * __restrict langScalVelBBK2,
186  const float * __restrict langScalRandBBK2,
187  float * __restrict gaussrand_x,
188  float * __restrict gaussrand_y,
189  float * __restrict gaussrand_z,
190  double * __restrict vel_x,
191  double * __restrict vel_y,
192  double * __restrict vel_z,
193  int numAtoms
194 #endif
195  );
196 
198 #ifndef SOA_SIMPLIFY_PARAMS
199  const int * __restrict hydrogenGroupSize,
200  const float * __restrict mass,
201  double * __restrict pos_x,
202  double * __restrict pos_y,
203  double * __restrict pos_z,
204  int numAtoms,
205 #endif
206  int step);
207 
208  void langevinPiston_SOA(
209 #ifndef SOA_SIMPLIFY_PARAMS
210  const int * __restrict hydrogenGroupSize,
211  const float * __restrict mass,
212  double * __restrict pos_x,
213  double * __restrict pos_y,
214  double * __restrict pos_z,
215  double * __restrict vel_x,
216  double * __restrict vel_y,
217  double * __restrict vel_z,
218  int numAtoms,
219 #endif
220  int step
221  );
222  void stochRescaleVelocities_SOA(int step);
223  void runComputeObjects_SOA(int migration, int pairlists, int step);
224 #endif
225 
226  void integrate(int); // Verlet integrator
227  void minimize(); // CG minimizer
229 
230  void runComputeObjects(int migration = 1, int pairlists = 0, int pressureStep = 0);
233  int pairlistsAgeLimit; // constant based on fixed simParams values
234 
235  void calcFixVirial(Tensor& fixVirialNormal, Tensor& fixVirialNbond, Tensor& fixVirialSlow,
236  Vector& fixForceNormal, Vector& fixForceNbond, Vector& fixForceSlow);
237 
238  void submitReductions(int);
239  void submitHalfstep(int);
240  void submitMinimizeReductions(int, BigReal fmax2);
241  void submitCollections(int step, int zeroVel = 0);
242 
243  void submitMomentum(int step);
244  void correctMomentum(int step, BigReal drifttime);
245 
246  void saveForce(const int ftag = Results::normal);
247  void addForceToMomentum(BigReal, const int ftag = Results::normal, const int useSaved = 0);
248  void addForceToMomentum3(const BigReal timestep1, const int ftag1, const int useSaved1,
249  const BigReal timestep2, const int ftag2, const int useSaved2,
250  const BigReal timestep3, const int ftag3, const int useSaved3);
252 
255 
256  void minimizeMoveDownhill(BigReal fmax2);
259  void quenchVelocities();
260 
261  void hardWallDrude(BigReal,int);
262 
263  void rattle1(BigReal,int);
264  // void rattle2(BigReal,int);
265 
266  void maximumMove(BigReal);
267  void minimizationQuenchVelocity(void);
268 
269  void reloadCharges();
271 
272  BigReal adaptTempT; // adaptive tempering temperature
273  void adaptTempUpdate(int); // adaptive tempering temperature update
274 
275  void rescaleVelocities(int);
276  void rescaleaccelMD(int, int, int); // for accelMD
278  void reassignVelocities(BigReal,int);
279  void reinitVelocities(void);
281  void tcoupleVelocities(BigReal,int);
282 
288  void stochRescaleVelocities(int);
289 
293  void berendsenPressure(int);
296  void langevinPiston(int);
297  int slowFreq;
298  void newtonianVelocities(BigReal, const BigReal, const BigReal,
299  const BigReal, const int, const int, const int);
303  // Multigrator
304  void scalePositionsVelocities(const Tensor& posScale, const Tensor& velScale);
305  void multigratorPressure(int step, int callNumber);
306  void scaleVelocities(const BigReal velScale);
308  void multigratorTemperature(int step, int callNumber);
312  // End of Multigrator
313 
314  void cycleBarrier(int,int);
315  void traceBarrier(int);
316 #ifdef MEASURE_NAMD_WITH_PAPI
317  void papiMeasureBarrier(int);
318 #endif
319  void terminate(void);
320 
322  SimParameters *const simParams; // for convenience
323  HomePatch *const patch; // access methods in patch
326 
329 
330  int ldbSteps;
332  void rebalanceLoad(int timestep);
333 
334 
335 private:
336  CthThread thread;
337  unsigned int priority;
338  static void threadRun(Sequencer*);
339 
340  LdbCoordinator *ldbCoordinator;
341 #if (defined(NAMD_CUDA) || defined(NAMD_HIP)) && defined(SEQUENCER_SOA)
342  SequencerCUDA *CUDASequencer;
343  PatchData *patchData;
344 #endif
345 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
346  GlobalGPUMgr* globalGPUMgr;
347  SynchronousCollectives* syncColl;
348 #endif
349 };
350 
351 #endif
HomePatch *const patch
Definition: Sequencer.h:323
SubmitReduction * multigratorReduction
Definition: Sequencer.h:309
void rescaleVelocities(int)
Definition: Sequencer.C:5388
int doKineticEnergy
Definition: Sequencer.h:310
void minimizationQuenchVelocity(void)
Definition: Sequencer.C:5777
void tcoupleVelocities(BigReal, int)
Definition: Sequencer.C:5559
void addMovDragToPosition(BigReal)
Definition: Sequencer.C:4397
void terminate(void)
Definition: Sequencer.C:6655
virtual void algorithm(void)
Definition: Sequencer.C:289
void langevinVelocitiesBBK2_SOA(BigReal timestep)
Definition: Sequencer.C:3326
SubmitReduction * pressureProfileReduction
Definition: Sequencer.h:325
void suspendULTs()
void integrate(int)
Definition: Sequencer.C:3870
friend class SequencerCUDA
Definition: Sequencer.h:49
void scaleVelocities(const BigReal velScale)
Definition: Sequencer.C:4929
void addVelocityToPosition(BigReal)
Definition: Sequencer.C:5648
SubmitReduction * reduction
Definition: Sequencer.h:324
SubmitReduction * min_reduction
Definition: Sequencer.h:228
void maximumMove(BigReal)
Definition: Sequencer.C:5732
void cycleBarrier(int, int)
Definition: Sequencer.C:6635
void submitCollections_SOA(int step, int zeroVel=0)
Definition: Sequencer.C:3173
void addRotDragToPosition(BigReal)
Definition: Sequencer.C:4416
void saveForce(const int ftag=Results::normal)
Definition: Sequencer.C:5598
Definition: Vector.h:72
void langevinVelocitiesBBK2(BigReal)
Definition: Sequencer.C:5137
void monteCarloPressureControl(const int step, const int doMigration, const int doEnergy, const int doVirial, const int maxForceNumber, const int doGlobal)
int slowFreq
Definition: Sequencer.h:297
void newMinimizeDirection(BigReal)
Definition: Sequencer.C:4607
void newMinimizePosition(BigReal)
Definition: Sequencer.C:4666
bool masterThread
Definition: Sequencer.h:331
void langevinVelocitiesBBK1(BigReal)
Definition: Sequencer.C:5064
void updateDevicePatchMap(int startup)
void rattle1(BigReal, int)
Definition: Sequencer.C:5675
void rebalanceLoad(int timestep)
Definition: Sequencer.C:6624
void submitHalfstep(int)
Definition: Sequencer.C:5788
void addForceToMomentum_SOA(const double scaling, double dt_normal, double dt_nbond, double dt_slow, int maxForceNumber)
Definition: Sequencer.C:2726
void minimizeMoveDownhill(BigReal fmax2)
Definition: Sequencer.C:4585
void addForceToMomentum(BigReal, const int ftag=Results::normal, const int useSaved=0)
Definition: Sequencer.C:5609
void submitReductions_SOA()
Definition: Sequencer.C:2968
void langevinPiston(int)
Definition: Sequencer.C:5308
void wakeULTs()
void addForceToMomentum3(const BigReal timestep1, const int ftag1, const int useSaved1, const BigReal timestep2, const int ftag2, const int useSaved2, const BigReal timestep3, const int ftag3, const int useSaved3)
Definition: Sequencer.C:5624
void submitHalfstep_SOA()
Definition: Sequencer.C:2868
void submitCollections(int step, int zeroVel=0)
Definition: Sequencer.C:6373
void stochRescaleVelocities_SOA(int step)
Definition: Sequencer.C:3840
void runComputeObjects_SOA(int migration, int pairlists, int step)
Definition: Sequencer.C:3654
BigReal calcKineticEnergy()
Definition: Sequencer.C:4937
void adaptTempUpdate(int)
Definition: Sequencer.C:5450
#define PRIORITY_SIZE
Definition: Priorities.h:13
void calcFixVirial(Tensor &fixVirialNormal, Tensor &fixVirialNbond, Tensor &fixVirialSlow, Vector &fixForceNormal, Vector &fixForceNbond, Vector &fixForceSlow)
Definition: Sequencer.C:5946
Definition: Random.h:37
void awaken(void)
Definition: Sequencer.h:55
int pairlistsAge
Definition: Sequencer.h:232
void stochRescaleVelocities(int)
Definition: Sequencer.C:5582
void rattle1_SOA(BigReal, int)
Definition: Sequencer.C:3637
void constructDevicePatchMap()
void multigratorPressure(int step, int callNumber)
Definition: Sequencer.C:4794
void berendsenPressure(int)
Definition: Sequencer.C:5244
void submitMomentum(int step)
Definition: Sequencer.C:4703
int rescaleVelocities_numTemps
Definition: Sequencer.h:277
void runComputeObjects(int migration=1, int pairlists=0, int pressureStep=0)
Definition: Sequencer.C:6410
void rescaleaccelMD(int, int, int)
Definition: Sequencer.C:5407
void initialize_integrate_CUDA_SOA(int scriptTask, int step, BigReal timestep, int numberOfSteps, int nbondstep, int slowstep, int maxForceUsed)
Sequencer(HomePatch *p)
Definition: Sequencer.C:171
void clearDevicePatchMap()
int ldbSteps
Definition: Sequencer.h:330
void run(void)
Definition: Sequencer.C:269
void scalePositionsVelocities(const Tensor &posScale, const Tensor &velScale)
Definition: Sequencer.C:4757
BigReal adaptTempT
Definition: Sequencer.h:272
void doMigrationGPU(const int startup, const int doGlobal, const int updatePatchMap)
void langevinPiston_SOA(int step)
Definition: Sequencer.C:3508
void integrate_SOA(int)
Definition: Sequencer.C:2051
void traceBarrier(int)
Definition: Sequencer.C:6643
int berendsenPressure_count
Definition: Sequencer.h:294
void reassignVelocities(BigReal, int)
Definition: Sequencer.C:5466
void langevinVelocitiesBBK1_SOA(BigReal timestep)
Definition: Sequencer.C:3280
Random * random
Definition: Sequencer.h:321
void runComputeObjectsCUDA(int doMigration, int doGlobal, int pairlists, int nstep, int startup)
void langevinVelocities(BigReal)
Definition: Sequencer.C:5027
void hardWallDrude(BigReal, int)
Definition: Sequencer.C:5660
void suspend(void)
Definition: Sequencer.C:279
void multigratorTemperature(int step, int callNumber)
Definition: Sequencer.C:4957
void reinitVelocities(void)
Definition: Sequencer.C:5498
int checkpoint_berendsenPressure_count
Definition: Sequencer.h:295
ControllerBroadcasts * broadcast
Definition: Sequencer.h:328
void maximumMove_SOA(const double dt, const double maxvel2)
Definition: Sequencer.C:3222
CollectionMgr *const collection
Definition: Sequencer.h:327
void updateDeviceData(const int startup, const int maxForceUsed, const int doGlobal)
Definition: Tensor.h:15
virtual ~Sequencer(void)
Definition: Sequencer.C:245
void newtonianVelocities(BigReal, const BigReal, const BigReal, const BigReal, const int, const int, const int)
Definition: Sequencer.C:5003
void rescaleSoluteCharges(BigReal)
Definition: Sequencer.C:5543
void addVelocityToPosition_SOA(const double dt)
Definition: Sequencer.C:2829
#define SOA_SIMPLIFY_PARAMS
Definition: Sequencer.h:31
void submitMinimizeReductions(int, BigReal fmax2)
Definition: Sequencer.C:6224
int doMomenta
Definition: Sequencer.h:311
void correctMomentum(int step, BigReal drifttime)
Definition: Sequencer.C:4726
int pairlistsAgeLimit
Definition: Sequencer.h:233
int pairlistsAreValid
Definition: Sequencer.h:231
int stochRescale_count
Definition: Sequencer.h:290
void quenchVelocities()
Definition: Sequencer.C:4694
void submitReductions(int)
Definition: Sequencer.C:5966
void integrate_CUDA_SOA(int scriptTask)
SimParameters *const simParams
Definition: Sequencer.h:322
void rescaleVelocitiesByFactor(BigReal)
Definition: Sequencer.C:5521
void reloadCharges()
Definition: Sequencer.C:5531
double BigReal
Definition: common.h:123
void minimize()
Definition: Sequencer.C:4439
void berendsenPressure_SOA(int step)
Definition: Sequencer.C:3409
void printDevicePatchMap()