QMCPACK
DescentEngineHandle Class Reference
+ Inheritance diagram for DescentEngineHandle:
+ Collaboration diagram for DescentEngineHandle:

Public Member Functions

 DescentEngineHandle (DescentEngine &engine)
 
const std::vector< FullPrecValue > & getVector () const
 
void prepareSampling (int num_params, int num_samples) override
 Function for preparing derivative ratio vectors used by optimizer engines. More...
 
void takeSample (const std::vector< FullPrecReal > &energy_list, const RecordArray< Value > &dlogpsi_array, const RecordArray< Value > &dhpsioverpsi_array, int base_sample_index) override
 Function for passing derivative ratios to optimizer engines. More...
 
void finishSampling () override
 Function for having optimizer engines execute their sample_finish functions. More...
 
- Public Member Functions inherited from EngineHandle
virtual ~EngineHandle ()=default
 

Private Attributes

DescentEngineengine_
 
std::vector< FullPrecValueder_rat_samp
 
std::vector< FullPrecValuele_der_samp
 

Additional Inherited Members

- Public Types inherited from EngineHandle
using Real = QMCTraits::RealType
 
using Value = QMCTraits::ValueType
 
using FullPrecReal = QMCTraits::FullPrecRealType
 
using FullPrecValue = QMCTraits::FullPrecValueType
 

Detailed Description

Definition at line 72 of file EngineHandle.h.

Constructor & Destructor Documentation

◆ DescentEngineHandle()

DescentEngineHandle ( DescentEngine engine)
inline

Definition at line 80 of file EngineHandle.h.

80 : engine_(engine) {}

Member Function Documentation

◆ finishSampling()

void finishSampling ( )
inlineoverridevirtual

Function for having optimizer engines execute their sample_finish functions.

Implements EngineHandle.

Definition at line 118 of file EngineHandle.h.

References DescentEngineHandle::engine_, and DescentEngine::sample_finish().

118 { engine_.sample_finish(); }
void sample_finish()
Function that reduces all vector information from all processors to the root processor.

◆ getVector()

const std::vector<FullPrecValue>& getVector ( ) const
inline

Definition at line 83 of file EngineHandle.h.

References DescentEngineHandle::der_rat_samp.

83 { return der_rat_samp; }
std::vector< FullPrecValue > der_rat_samp
Definition: EngineHandle.h:76

◆ prepareSampling()

void prepareSampling ( int  num_params,
int  num_samples 
)
inlineoverridevirtual

Function for preparing derivative ratio vectors used by optimizer engines.

Parameters
[in]num_paramsNumber of optimizable parameters

Implements EngineHandle.

Definition at line 85 of file EngineHandle.h.

References DescentEngineHandle::der_rat_samp, DescentEngineHandle::engine_, DescentEngineHandle::le_der_samp, omp_get_max_threads(), and DescentEngine::prepareStorage().

86  {
87  //FIXME it should respect num_samples and avoid relying on threads.
89 
90  der_rat_samp.resize(num_params + 1, 0.0);
91  le_der_samp.resize(num_params + 1, 0.0);
92  }
void prepareStorage(const int num_replicas, const int num_optimizables)
Prepare for taking samples.
omp_int_t omp_get_max_threads()
Definition: OpenMP.h:26
std::vector< FullPrecValue > der_rat_samp
Definition: EngineHandle.h:76
std::vector< FullPrecValue > le_der_samp
Definition: EngineHandle.h:77

◆ takeSample()

void takeSample ( const std::vector< FullPrecReal > &  energy_list,
const RecordArray< Value > &  dlogpsi_array,
const RecordArray< Value > &  dhpsioverpsi_array,
int  base_sample_index 
)
inlineoverridevirtual

Function for passing derivative ratios to optimizer engines.

Parameters
[in]energy_listVector of local energy values
[in]dlogpsi_arrayParameter derivatives of log psi
[in]dhpsioverpsi_arrayParameter derivatives of local energy
[in]local_indexCrowd local index
[in]sample_indexIndex of sample on a MPI rank

Implements EngineHandle.

Definition at line 94 of file EngineHandle.h.

References DescentEngineHandle::der_rat_samp, DescentEngineHandle::engine_, RecordArray< T >::getNumOfEntries(), DescentEngineHandle::le_der_samp, omp_get_thread_num(), and DescentEngine::takeSample().

98  {
99  const int current_batch_size = dlogpsi_array.getNumOfEntries();
100  for (int local_index = 0; local_index < current_batch_size; local_index++)
101  {
102  der_rat_samp[0] = 1.0;
103  le_der_samp[0] = energy_list[local_index];
104 
105  int num_params = der_rat_samp.size() - 1;
106  for (int j = 0; j < num_params; j++)
107  {
108  der_rat_samp[j + 1] = static_cast<FullPrecValue>(dlogpsi_array[local_index][j]);
109  le_der_samp[j + 1] = static_cast<FullPrecValue>(dhpsioverpsi_array[local_index][j]) +
110  le_der_samp[0] * static_cast<FullPrecValue>(dlogpsi_array[local_index][j]);
111  }
112  //FIXME it should respect base_sample_index and avoid relying on threads.
113  int ip = omp_get_thread_num();
115  }
116  }
QMCTraits::FullPrecValueType FullPrecValue
Definition: EngineHandle.h:34
omp_int_t omp_get_thread_num()
Definition: OpenMP.h:25
void takeSample(const int replica_id, const std::vector< FullPrecValueType > &der_rat_samp, const std::vector< FullPrecValueType > &le_der_samp, const std::vector< FullPrecValueType > &ls_der_samp, ValueType vgs_samp, ValueType weight_samp)
Function that Take Sample Data from the Host Code.
std::vector< FullPrecValue > der_rat_samp
Definition: EngineHandle.h:76
std::vector< FullPrecValue > le_der_samp
Definition: EngineHandle.h:77

Member Data Documentation

◆ der_rat_samp

std::vector<FullPrecValue> der_rat_samp
private

◆ engine_

◆ le_der_samp

std::vector<FullPrecValue> le_der_samp
private

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