STORMM Source Documentation
Loading...
Searching...
No Matches
scorecard.h
1// -*-c++-*-
2#ifndef STORMM_SCORECARD_H
3#define STORMM_SCORECARD_H
4
5#include "copyright.h"
6#include "Accelerator/gpu_details.h"
7#include "Accelerator/hybrid.h"
8#include "Constants/fixed_precision.h"
9#include "DataTypes/stormm_vector_types.h"
10#include "energy_enumerators.h"
11
12namespace stormm {
13namespace energy {
14
15using card::GpuDetails;
16using card::Hybrid;
17using card::HybridTargetLevel;
18using numerics::default_energy_scale_bits;
19
25
27 ScoreCardReader(int system_count_in, int data_stride_in, int sampled_step_count_in,
28 float nrg_scale_f_in, double nrg_scale_lf_in, float inverse_nrg_scale_f_in,
29 double inverse_nrg_scale_lf_in, const int* time_steps_in,
30 const llint* instantaneous_accumulators_in,
31 const double* running_accumulators_in, const double* squared_accumulators_in,
32 const llint* time_series_in);
33
37 ScoreCardReader(const ScoreCardReader &original) = default;
38 ScoreCardReader(ScoreCardReader &&original) = default;
40
41 const int system_count;
42 const int data_stride;
48 const float nrg_scale_f;
49 const double nrg_scale_lf;
50 const float inverse_nrg_scale_f;
51 const double inverse_nrg_scale_lf;
52 const int* time_steps;
55 const double* running_accumulators;
56 const double* squared_accumulators;
58 const llint* time_series;
60};
61
65
67 ScoreCardWriter(int system_count_in, int data_stride_in, int sampled_step_count_in,
68 float nrg_scale_f_in, double nrg_scale_lf_in, float inverse_nrg_scale_f_in,
69 double inverse_nrg_scale_lf_in, int* time_steps_in,
70 llint* instantaneous_accumulators_in, double* running_accumulators_in,
71 double* squared_accumulators_in, llint* time_series_in);
72
76 ScoreCardWriter(const ScoreCardWriter &original) = default;
77 ScoreCardWriter(ScoreCardWriter &&original) = default;
79
80 const int system_count;
81 const int data_stride;
84 const float nrg_scale_f;
85 const double nrg_scale_lf;
86 const float inverse_nrg_scale_f;
87 const double inverse_nrg_scale_lf;
93 llint* time_series;
95};
96
102public:
103
110 ScoreCard(int system_count_in, int capacity_in = 16,
111 int nrg_scale_bits_in = default_energy_scale_bits);
112
119 ScoreCard(const ScoreCard &original) = default;
120 ScoreCard(ScoreCard &&original) = default;
122
129 ScoreCard& operator=(const ScoreCard &other) = default;
130 ScoreCard& operator=(ScoreCard &&other) = default;
132
134 int getSystemCount() const;
135
137 int getSampleSize() const;
138
141 int getDataStride() const;
142
145 int getSampleCapacity() const;
146
148 int getEnergyScaleBits() const;
149
152 template <typename T> T getEnergyScalingFactor() const;
153 template <typename T> T getInverseEnergyScalingFactor() const;
155
159 int getTimeStep(int time_index) const;
160
161#ifdef STORMM_USE_HPC
165 void upload();
166
170 void download();
171#endif
172
177 const ScoreCardReader data(HybridTargetLevel tier = HybridTargetLevel::HOST) const;
178 ScoreCardWriter data(HybridTargetLevel tier = HybridTargetLevel::HOST);
180
184 void reserve(int new_capacity);
185
195 void contribute(StateVariable var, llint amount, int system_index = 0);
196
212 void initialize(StateVariable var, int system_index = 0,
213 HybridTargetLevel tier = HybridTargetLevel::HOST,
214 const GpuDetails &gpu = null_gpu);
215 void initialize(const std::vector<StateVariable> &var, int system_index = 0,
216 HybridTargetLevel tier = HybridTargetLevel::HOST,
217 const GpuDetails &gpu = null_gpu);
218 void initialize(int system_index, HybridTargetLevel tier = HybridTargetLevel::HOST,
219 const GpuDetails &gpu = null_gpu);
220 void initialize(HybridTargetLevel tier = HybridTargetLevel::HOST,
221 const GpuDetails &gpu = null_gpu);
223
232 void add(StateVariable var, llint amount, int system_index = 0);
233
247 void commit(StateVariable var, int system_index,
248 HybridTargetLevel tier = HybridTargetLevel::HOST, const GpuDetails &gpu = null_gpu);
249
250 void commit(const std::vector<StateVariable> &var, int system_index,
251 HybridTargetLevel tier = HybridTargetLevel::HOST, const GpuDetails &gpu = null_gpu);
252
253 void commit(StateVariable var,
254 HybridTargetLevel tier = HybridTargetLevel::HOST, const GpuDetails &gpu = null_gpu);
255
256 void commit(const std::vector<StateVariable> &var,
257 HybridTargetLevel tier = HybridTargetLevel::HOST, const GpuDetails &gpu = null_gpu);
258
259 void commit(int system_index,
260 HybridTargetLevel tier = HybridTargetLevel::HOST, const GpuDetails &gpu = null_gpu);
261
262 void commit(HybridTargetLevel tier = HybridTargetLevel::HOST, const GpuDetails &gpu = null_gpu);
264
271 void computePotentialEnergy(HybridTargetLevel tier = HybridTargetLevel::HOST,
272 const GpuDetails &gpu = null_gpu);
273
279 void computeTotalEnergy(HybridTargetLevel tier = HybridTargetLevel::HOST,
280 const GpuDetails &gpu = null_gpu);
281
285
291 void resetSampleCount(int count_in = 0);
292
304 std::vector<double>
305 reportPotentialEnergies(HybridTargetLevel tier = HybridTargetLevel::HOST) const;
306
307 double reportPotentialEnergy(int system_index = 0,
308 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
309
310 std::vector<double> reportTotalEnergies(HybridTargetLevel tier = HybridTargetLevel::HOST) const;
311
312 double reportTotalEnergy(int system_index = 0,
313 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
315
328 std::vector<double>
329 reportInstantaneousStates(HybridTargetLevel tier = HybridTargetLevel::HOST) const;
330
331 std::vector<double>
332 reportInstantaneousStates(int system_index,
333 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
334
335 std::vector<double>
336 reportInstantaneousStates(StateVariable aspect,
337 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
338
339 double reportInstantaneousStates(StateVariable aspect, int system_index,
340 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
342
355 std::vector<double> reportAverageStates(HybridTargetLevel tier = HybridTargetLevel::HOST) const;
356 std::vector<double> reportAverageStates(int system_index,
357 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
358 std::vector<double> reportAverageStates(StateVariable aspect,
359 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
360 double reportAverageStates(StateVariable aspect, int system_index,
361 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
363
376 std::vector<double>
377 reportVarianceOfStates(HybridTargetLevel tier = HybridTargetLevel::HOST) const;
378
379 std::vector<double>
380 reportVarianceOfStates(int system_index, HybridTargetLevel tier = HybridTargetLevel::HOST) const;
381
382 std::vector<double>
383 reportVarianceOfStates(StateVariable aspect,
384 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
385
386 double reportVarianceOfStates(StateVariable aspect, int system_index,
387 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
389
404 std::vector<double> reportHistory(int system_index,
405 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
406 std::vector<double> reportHistory(StateVariable aspect, int system_index,
407 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
408 std::vector<double2> reportHistory(HybridTargetLevel tier = HybridTargetLevel::HOST) const;
409 std::vector<double2> reportHistory(StateVariable aspect,
410 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
412
414 const ScoreCard* getSelfPointer() const;
415
420 void setLastTimeStep(int time_index, HybridTargetLevel tier = HybridTargetLevel::HOST);
421
440 void importCard(const ScoreCard *other, size_t fill_index, size_t source_index);
441 void importCard(const ScoreCard &other, size_t fill_index, size_t source_index);
442 void importCard(const ScoreCard *other, const std::vector<int> &fill_indices,
443 const std::vector<int> &source_indices);
444 void importCard(const ScoreCard &other, const std::vector<int> &fill_indices,
445 const std::vector<int> &source_indices);
447
448private:
449 int system_count;
453 int data_stride;
457 int sampled_step_count;
459 int sample_capacity;
463
471 int nrg_scale_bits;
472 float nrg_scale_f;
473 double nrg_scale_lf;
474 float inverse_nrg_scale_f;
475 double inverse_nrg_scale_lf;
477
478 Hybrid<int> time_steps;
486 Hybrid<llint> instantaneous_accumulators;
491 Hybrid<double> running_accumulators;
498 Hybrid<double> squared_accumulators;
503 Hybrid<llint> time_series_accumulators;
506
517 llint sumPotentialEnergyAsLlint(const llint* nrg_data) const;
518 double sumPotentialEnergy(const llint* nrg_data) const;
520
531 llint sumTotalEnergyAsLlint(const llint* nrg_data) const;
532 double sumTotalEnergy(const llint* nrg_data) const;
534};
535
543void add(ScoreCardWriter *csw, StateVariable var, llint amount, int system_index);
544
545} // namespace energy
546} // namespace stormm
547
548#include "scorecard.tpp"
549
550#endif
Pertinent aspects of one particular GPU. Condensing the data for each GPU in this manner helps to ens...
Definition gpu_details.h:27
An evolution of GpuBuffer in pmemd.cuda, the Composite array has elements that are accessible from ei...
Definition hybrid.h:202
void computeTotalEnergy(HybridTargetLevel tier=HybridTargetLevel::HOST, const GpuDetails &gpu=null_gpu)
Compute total energies for all systems in the instantaneous accumulators as well as all time series a...
Definition scorecard.cpp:576
void computePotentialEnergy(HybridTargetLevel tier=HybridTargetLevel::HOST, const GpuDetails &gpu=null_gpu)
Compute total potential energies for all systems in the instantaneous accumulators as well as all tim...
Definition scorecard.cpp:543
std::vector< double > reportVarianceOfStates(HybridTargetLevel tier=HybridTargetLevel::HOST) const
Report standard deviations in kcal/mol, as a double-precision vector.
Definition scorecard.cpp:949
const ScoreCardReader data(HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get the appropriate abstract based on the const-ness of the abstract.
Definition scorecard.cpp:220
ScoreCard & operator=(const ScoreCard &other)=default
Copy and move assignment operators complete the support for integrating this energy tracker with Stan...
void importCard(const ScoreCard *other, size_t fill_index, size_t source_index)
Import the results of another ScoreCard into this one, including all components and the associated en...
Definition scorecard.cpp:1160
void initialize(StateVariable var, int system_index=0, HybridTargetLevel tier=HybridTargetLevel::HOST, const GpuDetails &gpu=null_gpu)
Initialize some or all instantaneous state variable accumulators. If all state variable accumulators ...
Definition scorecard.cpp:271
void commit(StateVariable var, int system_index, HybridTargetLevel tier=HybridTargetLevel::HOST, const GpuDetails &gpu=null_gpu)
Commit the (assumed complete) accumulated results in one or more state variables to the running talli...
Definition scorecard.cpp:366
T getEnergyScalingFactor() const
Get the energy scaling factors in single- or double-precision floating point format.
int getSampleSize() const
Get the number of steps that have been sampled.
Definition scorecard.cpp:175
std::vector< double > reportPotentialEnergies(HybridTargetLevel tier=HybridTargetLevel::HOST) const
Report the total energy, or total potential energy, for one system or for all systems....
Definition scorecard.cpp:618
std::vector< double > reportInstantaneousStates(HybridTargetLevel tier=HybridTargetLevel::HOST) const
Report instantaneous results in kcal/mol, as a double-precision vector.
Definition scorecard.cpp:723
std::vector< double > reportAverageStates(HybridTargetLevel tier=HybridTargetLevel::HOST) const
Report averaged results in kcal/mol, as a double-precision vector.
Definition scorecard.cpp:836
int getTimeStep(int time_index) const
Get the time step at which a particular energy value was taken.
Definition scorecard.cpp:195
std::vector< double > reportHistory(int system_index, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Report the energy history for one or more systems.
Definition scorecard.cpp:1084
void resetSampleCount(int count_in=0)
Reset the sample counter (this is implicitly done by initialize() if that function is called to opera...
Definition scorecard.cpp:613
void contribute(StateVariable var, llint amount, int system_index=0)
Place a result into one of the instantaneous state variable accumulators. This is for CPU activity; o...
Definition scorecard.cpp:250
ScoreCard(int system_count_in, int capacity_in=16, int nrg_scale_bits_in=default_energy_scale_bits)
The constructor requires only the number of systems.
Definition scorecard.cpp:63
void setLastTimeStep(int time_index, HybridTargetLevel tier=HybridTargetLevel::HOST)
Set the time index for the most recent stored set of energies.
Definition scorecard.cpp:1142
int getSampleCapacity() const
Get the sample capacity (the number of individual energy measurements that the object is prepared to ...
Definition scorecard.cpp:185
void reserve(int new_capacity)
Reserve space for storing sampled energy component values.
Definition scorecard.cpp:236
int getEnergyScaleBits() const
Get the number of bits of fixed precision to which results are stored.
Definition scorecard.cpp:190
void add(StateVariable var, llint amount, int system_index=0)
Add a result to a growing total in one of the instantaneous state variable accumulators....
Definition scorecard.cpp:360
int getSystemCount() const
Get the number of systems that this object is tracking.
Definition scorecard.cpp:170
ScoreCard(const ScoreCard &original)=default
Copy and move constructors help make the energy tracker a first-class C++ object. The defaults apply ...
int getDataStride() const
Get the stride used to store separate results for each system in the instantaneous accumulator arrays...
Definition scorecard.cpp:180
const ScoreCard * getSelfPointer() const
Get a const pointer to this object.
Definition scorecard.cpp:1137
void incrementSampleCount()
Increment the number of sampled steps. This will automatically allocate additional capacity if the sa...
Definition scorecard.cpp:608
Read-only abstract for the ScoreCard object. This is needed more for completeness than anything else,...
Definition scorecard.h:24
const double * running_accumulators
Running sums of state variables for each system.
Definition scorecard.h:55
ScoreCardReader(const ScoreCardReader &original)=default
Take only the default copy constructor and copy assignemnt operator for this struct with const elemen...
const llint * instantaneous_accumulators
State variables for each system.
Definition scorecard.h:54
const double nrg_scale_lf
Conversion factor for fixed-precision accumulation.
Definition scorecard.h:49
const double * squared_accumulators
Definition scorecard.h:56
const float inverse_nrg_scale_f
Conversion for fixed-precision interpretation.
Definition scorecard.h:50
const int system_count
Number of independent systems tracked.
Definition scorecard.h:41
const llint * time_series
Definition scorecard.h:58
const float nrg_scale_f
Conversion factor for fixed-precision accumulation.
Definition scorecard.h:48
const int * time_steps
Definition scorecard.h:52
const int data_stride
Definition scorecard.h:42
const int sampled_step_count
Definition scorecard.h:44
ScoreCardReader(int system_count_in, int data_stride_in, int sampled_step_count_in, float nrg_scale_f_in, double nrg_scale_lf_in, float inverse_nrg_scale_f_in, double inverse_nrg_scale_lf_in, const int *time_steps_in, const llint *instantaneous_accumulators_in, const double *running_accumulators_in, const double *squared_accumulators_in, const llint *time_series_in)
The constructor is, as usual, a collection of the relevant constants and pointers.
Definition scorecard.cpp:26
const double inverse_nrg_scale_lf
Conversion for fixed-precision interpretation.
Definition scorecard.h:51
Writeable abstract for the ScoreCard object, useful for accumulating energies in many kernels.
Definition scorecard.h:64
ScoreCardWriter(int system_count_in, int data_stride_in, int sampled_step_count_in, float nrg_scale_f_in, double nrg_scale_lf_in, float inverse_nrg_scale_f_in, double inverse_nrg_scale_lf_in, int *time_steps_in, llint *instantaneous_accumulators_in, double *running_accumulators_in, double *squared_accumulators_in, llint *time_series_in)
The constructor is, as usual, a collection of the relevant constants and pointers.
Definition scorecard.cpp:45
const float nrg_scale_f
Conversion factor for fixed-precision accumulation.
Definition scorecard.h:84
double * squared_accumulators
Running squared sums of state variables for each system.
Definition scorecard.h:92
const int system_count
Number of independent systems tracked.
Definition scorecard.h:80
const double nrg_scale_lf
Conversion factor for fixed-precision accumulation.
Definition scorecard.h:85
const float inverse_nrg_scale_f
Conversion for fixed-precision interpretation.
Definition scorecard.h:86
const double inverse_nrg_scale_lf
Conversion for fixed-precision interpretation.
Definition scorecard.h:87
double * running_accumulators
Running sums of state variables for each system.
Definition scorecard.h:91
ScoreCardWriter(const ScoreCardWriter &original)=default
Take only the default copy constructor and copy assignemnt operator for this struct with const elemen...
llint * time_series
Definition scorecard.h:93
const int sampled_step_count
The number of steps in the sample.
Definition scorecard.h:83
const int data_stride
Definition scorecard.h:81
int * time_steps
Definition scorecard.h:88
llint * instantaneous_accumulators
State variables for each system.
Definition scorecard.h:90