2#ifndef STORMM_SCORECARD_H
3#define STORMM_SCORECARD_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"
15using card::GpuDetails;
17using card::HybridTargetLevel;
18using numerics::default_energy_scale_bits;
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);
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);
110 ScoreCard(
int system_count_in,
int capacity_in = 16,
111 int nrg_scale_bits_in = default_energy_scale_bits);
153 template <
typename T> T getInverseEnergyScalingFactor()
const;
184 void reserve(
int new_capacity);
195 void contribute(StateVariable var, llint amount,
int system_index = 0);
212 void initialize(StateVariable var,
int system_index = 0,
213 HybridTargetLevel tier = HybridTargetLevel::HOST,
215 void initialize(
const std::vector<StateVariable> &var,
int system_index = 0,
216 HybridTargetLevel tier = HybridTargetLevel::HOST,
218 void initialize(
int system_index, HybridTargetLevel tier = HybridTargetLevel::HOST,
220 void initialize(HybridTargetLevel tier = HybridTargetLevel::HOST,
232 void add(StateVariable var, llint amount,
int system_index = 0);
247 void commit(StateVariable var,
int system_index,
248 HybridTargetLevel tier = HybridTargetLevel::HOST,
const GpuDetails &gpu = null_gpu);
250 void commit(
const std::vector<StateVariable> &var,
int system_index,
251 HybridTargetLevel tier = HybridTargetLevel::HOST,
const GpuDetails &gpu = null_gpu);
253 void commit(StateVariable var,
254 HybridTargetLevel tier = HybridTargetLevel::HOST,
const GpuDetails &gpu = null_gpu);
256 void commit(
const std::vector<StateVariable> &var,
257 HybridTargetLevel tier = HybridTargetLevel::HOST,
const GpuDetails &gpu = null_gpu);
259 void commit(
int system_index,
260 HybridTargetLevel tier = HybridTargetLevel::HOST,
const GpuDetails &gpu = null_gpu);
262 void commit(HybridTargetLevel tier = HybridTargetLevel::HOST,
const GpuDetails &gpu = null_gpu);
307 double reportPotentialEnergy(
int system_index = 0,
308 HybridTargetLevel tier = HybridTargetLevel::HOST)
const;
310 std::vector<double> reportTotalEnergies(HybridTargetLevel tier = HybridTargetLevel::HOST)
const;
312 double reportTotalEnergy(
int system_index = 0,
313 HybridTargetLevel tier = HybridTargetLevel::HOST)
const;
333 HybridTargetLevel tier = HybridTargetLevel::HOST)
const;
337 HybridTargetLevel tier = HybridTargetLevel::HOST)
const;
340 HybridTargetLevel tier = HybridTargetLevel::HOST)
const;
355 std::vector<double>
reportAverageStates(HybridTargetLevel tier = HybridTargetLevel::HOST)
const;
357 HybridTargetLevel tier = HybridTargetLevel::HOST)
const;
359 HybridTargetLevel tier = HybridTargetLevel::HOST)
const;
361 HybridTargetLevel tier = HybridTargetLevel::HOST)
const;
384 HybridTargetLevel tier = HybridTargetLevel::HOST)
const;
387 HybridTargetLevel tier = HybridTargetLevel::HOST)
const;
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;
410 HybridTargetLevel tier = HybridTargetLevel::HOST)
const;
420 void setLastTimeStep(
int time_index, HybridTargetLevel tier = HybridTargetLevel::HOST);
443 const std::vector<int> &source_indices);
445 const std::vector<int> &source_indices);
457 int sampled_step_count;
474 float inverse_nrg_scale_f;
475 double inverse_nrg_scale_lf;
517 llint sumPotentialEnergyAsLlint(
const llint* nrg_data)
const;
518 double sumPotentialEnergy(
const llint* nrg_data)
const;
531 llint sumTotalEnergyAsLlint(
const llint* nrg_data)
const;
532 double sumTotalEnergy(
const llint* nrg_data)
const;
543void add(
ScoreCardWriter *csw, StateVariable var, llint amount,
int system_index);
548#include "scorecard.tpp"
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