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:5386
int doKineticEnergy
Definition: Sequencer.h:310
void minimizationQuenchVelocity(void)
Definition: Sequencer.C:5775
void tcoupleVelocities(BigReal, int)
Definition: Sequencer.C:5557
void addMovDragToPosition(BigReal)
Definition: Sequencer.C:4395
void terminate(void)
Definition: Sequencer.C:6653
virtual void algorithm(void)
Definition: Sequencer.C:289
void langevinVelocitiesBBK2_SOA(BigReal timestep)
Definition: Sequencer.C:3324
SubmitReduction * pressureProfileReduction
Definition: Sequencer.h:325
void suspendULTs()
void integrate(int)
Definition: Sequencer.C:3868
friend class SequencerCUDA
Definition: Sequencer.h:49
void scaleVelocities(const BigReal velScale)
Definition: Sequencer.C:4927
void addVelocityToPosition(BigReal)
Definition: Sequencer.C:5646
SubmitReduction * reduction
Definition: Sequencer.h:324
SubmitReduction * min_reduction
Definition: Sequencer.h:228
void maximumMove(BigReal)
Definition: Sequencer.C:5730
void cycleBarrier(int, int)
Definition: Sequencer.C:6633
void submitCollections_SOA(int step, int zeroVel=0)
Definition: Sequencer.C:3171
void addRotDragToPosition(BigReal)
Definition: Sequencer.C:4414
void saveForce(const int ftag=Results::normal)
Definition: Sequencer.C:5596
Definition: Vector.h:72
void langevinVelocitiesBBK2(BigReal)
Definition: Sequencer.C:5135
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:4605
void newMinimizePosition(BigReal)
Definition: Sequencer.C:4664
bool masterThread
Definition: Sequencer.h:331
void langevinVelocitiesBBK1(BigReal)
Definition: Sequencer.C:5062
void updateDevicePatchMap(int startup)
void rattle1(BigReal, int)
Definition: Sequencer.C:5673
void rebalanceLoad(int timestep)
Definition: Sequencer.C:6622
void submitHalfstep(int)
Definition: Sequencer.C:5786
void addForceToMomentum_SOA(const double scaling, double dt_normal, double dt_nbond, double dt_slow, int maxForceNumber)
Definition: Sequencer.C:2724
void minimizeMoveDownhill(BigReal fmax2)
Definition: Sequencer.C:4583
void addForceToMomentum(BigReal, const int ftag=Results::normal, const int useSaved=0)
Definition: Sequencer.C:5607
void submitReductions_SOA()
Definition: Sequencer.C:2966
void langevinPiston(int)
Definition: Sequencer.C:5306
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:5622
void submitHalfstep_SOA()
Definition: Sequencer.C:2866
void submitCollections(int step, int zeroVel=0)
Definition: Sequencer.C:6371
void stochRescaleVelocities_SOA(int step)
Definition: Sequencer.C:3838
void runComputeObjects_SOA(int migration, int pairlists, int step)
Definition: Sequencer.C:3652
BigReal calcKineticEnergy()
Definition: Sequencer.C:4935
void adaptTempUpdate(int)
Definition: Sequencer.C:5448
#define PRIORITY_SIZE
Definition: Priorities.h:13
void calcFixVirial(Tensor &fixVirialNormal, Tensor &fixVirialNbond, Tensor &fixVirialSlow, Vector &fixForceNormal, Vector &fixForceNbond, Vector &fixForceSlow)
Definition: Sequencer.C:5944
Definition: Random.h:37
void awaken(void)
Definition: Sequencer.h:55
int pairlistsAge
Definition: Sequencer.h:232
void stochRescaleVelocities(int)
Definition: Sequencer.C:5580
void rattle1_SOA(BigReal, int)
Definition: Sequencer.C:3635
void constructDevicePatchMap()
void multigratorPressure(int step, int callNumber)
Definition: Sequencer.C:4792
void berendsenPressure(int)
Definition: Sequencer.C:5242
void submitMomentum(int step)
Definition: Sequencer.C:4701
int rescaleVelocities_numTemps
Definition: Sequencer.h:277
void runComputeObjects(int migration=1, int pairlists=0, int pressureStep=0)
Definition: Sequencer.C:6408
void rescaleaccelMD(int, int, int)
Definition: Sequencer.C:5405
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:4755
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:3506
void integrate_SOA(int)
Definition: Sequencer.C:2049
void traceBarrier(int)
Definition: Sequencer.C:6641
int berendsenPressure_count
Definition: Sequencer.h:294
void reassignVelocities(BigReal, int)
Definition: Sequencer.C:5464
void langevinVelocitiesBBK1_SOA(BigReal timestep)
Definition: Sequencer.C:3278
Random * random
Definition: Sequencer.h:321
void runComputeObjectsCUDA(int doMigration, int doGlobal, int pairlists, int nstep, int startup)
void langevinVelocities(BigReal)
Definition: Sequencer.C:5025
void hardWallDrude(BigReal, int)
Definition: Sequencer.C:5658
void suspend(void)
Definition: Sequencer.C:279
void multigratorTemperature(int step, int callNumber)
Definition: Sequencer.C:4955
void reinitVelocities(void)
Definition: Sequencer.C:5496
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:3220
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:5001
void rescaleSoluteCharges(BigReal)
Definition: Sequencer.C:5541
void addVelocityToPosition_SOA(const double dt)
Definition: Sequencer.C:2827
#define SOA_SIMPLIFY_PARAMS
Definition: Sequencer.h:31
void submitMinimizeReductions(int, BigReal fmax2)
Definition: Sequencer.C:6222
int doMomenta
Definition: Sequencer.h:311
void correctMomentum(int step, BigReal drifttime)
Definition: Sequencer.C:4724
int pairlistsAgeLimit
Definition: Sequencer.h:233
int pairlistsAreValid
Definition: Sequencer.h:231
int stochRescale_count
Definition: Sequencer.h:290
void quenchVelocities()
Definition: Sequencer.C:4692
void submitReductions(int)
Definition: Sequencer.C:5964
void integrate_CUDA_SOA(int scriptTask)
SimParameters *const simParams
Definition: Sequencer.h:322
void rescaleVelocitiesByFactor(BigReal)
Definition: Sequencer.C:5519
void reloadCharges()
Definition: Sequencer.C:5529
double BigReal
Definition: common.h:123
void minimize()
Definition: Sequencer.C:4437
void berendsenPressure_SOA(int step)
Definition: Sequencer.C:3407
void printDevicePatchMap()