QMCPACK
Crowd Class Reference

Driver synchronized step context. More...

+ Collaboration diagram for Crowd:

Public Types

using MCPWalker = MCPopulation::MCPWalker
 
using GradType = QMCTraits::GradType
 
using RealType = QMCTraits::RealType
 
using FullPrecRealType = QMCTraits::FullPrecRealType
 

Public Member Functions

 Crowd (EstimatorManagerNew &emb, const DriverWalkerResourceCollection &driverwalker_res, const ParticleSet &pset, const TrialWaveFunction &twf, const QMCHamiltonian &hamiltonian_temp, const MultiWalkerDispatchers &dispatchers)
 The constructor this requires all the gold elements because it constructs a valid estimator_manager_crowd and valid mw resources for the crowd. More...
 
 ~Crowd ()
 
void reserve (int crowd_size)
 Because so many vectors allocate them upfront. More...
 
void startRun ()
 
void startBlock (int steps)
 
void stopBlock ()
 
EstimatorManagerCrowdget_estimator_manager_crowd ()
 
void addWalker (MCPWalker &walker, ParticleSet &elecs, TrialWaveFunction &twf, QMCHamiltonian &hamiltonian)
 
void clearWalkers ()
 Clears all walker vectors. More...
 
void accumulate (RandomBase< FullPrecRealType > &rng)
 
void setWalkerLogCollector (std::unique_ptr< WalkerLogCollector > &&)
 activate the collector More...
 
void collectStepWalkerLog (int current_step)
 Collect walker log data. More...
 
void setRNGForHamiltonian (RandomBase< FullPrecRealType > &rng)
 
auto beginWalkers ()
 
auto endWalkers ()
 
auto beginTrialWaveFunctions ()
 
auto endTrialWaveFunctions ()
 
auto beginElectrons ()
 
auto endElectrons ()
 
const RefVector< MCPWalker > & get_walkers () const
 
const RefVector< ParticleSet > & get_walker_elecs () const
 
const RefVector< TrialWaveFunction > & get_walker_twfs () const
 
const RefVector< QMCHamiltonian > & get_walker_hamiltonians () const
 
const EstimatorManagerCrowdget_estimator_manager_crowd () const
 
DriverWalkerResourceCollectiongetSharedResource ()
 
int size () const
 
void incReject ()
 
void incAccept ()
 
void incNonlocalAccept (int n=1)
 
unsigned long get_nonlocal_accept ()
 
unsigned long get_accept ()
 
unsigned long get_reject ()
 

Static Public Member Functions

static RefVector< WalkerLogCollectorgetWalkerLogCollectorRefs (const UPtrVector< Crowd > &crowds)
 get refereces of active walker log collectors. If walker logging is disabled, the RefVector size can be zero. More...
 

Public Attributes

const MultiWalkerDispatchersdispatchers_
 

Private Attributes

Walker Vectors

A single index into these ordered lists constitutes a complete walker context.

RefVector< MCPWalkermcp_walkers_
 
RefVector< ParticleSetwalker_elecs_
 
RefVector< TrialWaveFunctionwalker_twfs_
 
RefVector< QMCHamiltonianwalker_hamiltonians_
 
DriverWalkerResourceCollection driverwalker_resource_collection_
 }@ More...
 
EstimatorManagerCrowd estimator_manager_crowd_
 per crowd estimator manager More...
 
std::unique_ptr< WalkerLogCollectorwlog_collector_
 
Step State

Should be per walker?

unsigned long n_reject_ = 0
 
unsigned long n_accept_ = 0
 
unsigned long n_nonlocal_accept_ = 0
 

Detailed Description

Driver synchronized step context.

assumed to live inside the drivers scope Represents the walker contexts exlusively operated on by one concurrent "worker" context from a total population owned by a MCPopulation

TODO: Maybe construct and initialize in thread execution space doubts this is important if rank is confined to one NUMA

Definition at line 38 of file Crowd.h.

Member Typedef Documentation

◆ FullPrecRealType

Definition at line 44 of file Crowd.h.

◆ GradType

Definition at line 42 of file Crowd.h.

◆ MCPWalker

Definition at line 41 of file Crowd.h.

◆ RealType

Definition at line 43 of file Crowd.h.

Constructor & Destructor Documentation

◆ Crowd()

Crowd ( EstimatorManagerNew emb,
const DriverWalkerResourceCollection driverwalker_res,
const ParticleSet pset,
const TrialWaveFunction twf,
const QMCHamiltonian hamiltonian_temp,
const MultiWalkerDispatchers dispatchers 
)

The constructor this requires all the gold elements because it constructs a valid estimator_manager_crowd and valid mw resources for the crowd.

We do not want this to be a multistep process. To do this requires temporary walker elements. You need them all because you need to aquire the crowd scope mw QMCHamiltonian resource. The Crowd retains none of these references only the now valid mw resource. Reduce coupling between walker elements fewer could be necessary.

Definition at line 16 of file Crowd.cpp.

References EstimatorManagerNew::areThereListeners(), Crowd::driverwalker_resource_collection_, Crowd::estimator_manager_crowd_, qmcplusplus::ham, DriverWalkerResourceCollection::ham_res, QMCHamiltonian::makeClone(), qmcplusplus::pset, EstimatorManagerCrowd::registerListeners(), and qmcplusplus::twf.

22  : dispatchers_(dispatchers), driverwalker_resource_collection_(driverwalker_res), estimator_manager_crowd_(emb)
23 {
24  if (emb.areThereListeners())
25  {
26  // By creating a tempory QMCHamiltonian before walkers are distributed to the crowds we insure that
27  // after construction that each crowd has a valid driverwalker_resource_collection_.ham_res.
28  // We can't use the golden hamiltonian to do this because QMCHamiltonian and mw_res_ are 1 to 1 or 1 to 0.
29  //
30  // Violating the incapsulation of the QMChamiltonian mw_res_ could make this very efficent but doesn't seem
31  // necessary since this happens num crowds times per section.
32  //
33  // QMCHamiltonian makes quite a smell with its non const pset and twf constructor
34  // arguments.
35  ParticleSet pset_temp(pset);
36  UPtr<TrialWaveFunction> twf_temp(twf.makeClone(pset_temp));
37  UPtr<QMCHamiltonian> ham_temp(ham.makeClone(pset_temp, *twf_temp));
38  RefVectorWithLeader<QMCHamiltonian> ham_list{*ham_temp, {*ham_temp}};
39  ResourceCollectionTeamLock<QMCHamiltonian> ham_lock(driverwalker_resource_collection_.ham_res, ham_list);
41  }
42 }
EstimatorManagerCrowd estimator_manager_crowd_
per crowd estimator manager
Definition: Crowd.h:141
DriverWalkerResourceCollection driverwalker_resource_collection_
}@
Definition: Crowd.h:139
void registerListeners(const RefVectorWithLeader< QMCHamiltonian > &ham_list)
This registers the crowd lever estimators that require listeners into the QMCHamiltonianMultiWalkerRe...
std::unique_ptr< QMCHamiltonian > makeClone(ParticleSet &qp, TrialWaveFunction &psi) const
return a clone
const MultiWalkerDispatchers & dispatchers_
Definition: Crowd.h:120

◆ ~Crowd()

~Crowd ( )
default

Member Function Documentation

◆ accumulate()

void accumulate ( RandomBase< FullPrecRealType > &  rng)
inline

Definition at line 81 of file Crowd.h.

References EstimatorManagerCrowd::accumulate(), Crowd::estimator_manager_crowd_, Crowd::mcp_walkers_, Crowd::size(), Crowd::walker_elecs_, Crowd::walker_hamiltonians_, and Crowd::walker_twfs_.

82  {
83  if (this->size() == 0)
84  return;
86  }
RefVector< MCPWalker > mcp_walkers_
Definition: Crowd.h:132
EstimatorManagerCrowd estimator_manager_crowd_
per crowd estimator manager
Definition: Crowd.h:141
int size() const
Definition: Crowd.h:111
RefVector< TrialWaveFunction > walker_twfs_
Definition: Crowd.h:134
RefVector< ParticleSet > walker_elecs_
Definition: Crowd.h:133
RefVector< QMCHamiltonian > walker_hamiltonians_
Definition: Crowd.h:135
void accumulate(const RefVector< MCPWalker > &walkers, const RefVector< ParticleSet > &psets, const RefVector< TrialWaveFunction > &wfns, const RefVector< QMCHamiltonian > &hams, RandomBase< FullPrecRealType > &rng)
Accumulate over all scalar estimators and operator estimators over all walkers in crowd...

◆ addWalker()

void addWalker ( MCPWalker walker,
ParticleSet elecs,
TrialWaveFunction twf,
QMCHamiltonian hamiltonian 
)

Definition at line 64 of file Crowd.cpp.

References Crowd::mcp_walkers_, qmcplusplus::twf, qmcplusplus::walker, Crowd::walker_elecs_, Crowd::walker_hamiltonians_, and Crowd::walker_twfs_.

65 {
66  mcp_walkers_.push_back(walker);
67  walker_elecs_.push_back(elecs);
68  walker_twfs_.push_back(twf);
69  walker_hamiltonians_.push_back(hamiltonian);
70 };
RefVector< MCPWalker > mcp_walkers_
Definition: Crowd.h:132
RefVector< TrialWaveFunction > walker_twfs_
Definition: Crowd.h:134
RefVector< ParticleSet > walker_elecs_
Definition: Crowd.h:133
RefVector< QMCHamiltonian > walker_hamiltonians_
Definition: Crowd.h:135

◆ beginElectrons()

auto beginElectrons ( )
inline

Definition at line 99 of file Crowd.h.

References Crowd::walker_elecs_.

99 { return walker_elecs_.begin(); }
RefVector< ParticleSet > walker_elecs_
Definition: Crowd.h:133

◆ beginTrialWaveFunctions()

auto beginTrialWaveFunctions ( )
inline

Definition at line 97 of file Crowd.h.

References Crowd::walker_twfs_.

97 { return walker_twfs_.begin(); }
RefVector< TrialWaveFunction > walker_twfs_
Definition: Crowd.h:134

◆ beginWalkers()

auto beginWalkers ( )
inline

Definition at line 95 of file Crowd.h.

References Crowd::mcp_walkers_.

95 { return mcp_walkers_.begin(); }
RefVector< MCPWalker > mcp_walkers_
Definition: Crowd.h:132

◆ clearWalkers()

void clearWalkers ( )

Clears all walker vectors.

Unless you are redistributing walkers to crowds don't call this. Prefer allowing the crowd lifecycle to roll. DO NOT move constructor code into here and call from constructor That is legacy "reset" pattern is considered deprecated

Definition at line 46 of file Crowd.cpp.

References Crowd::mcp_walkers_, Crowd::walker_elecs_, Crowd::walker_hamiltonians_, and Crowd::walker_twfs_.

47 {
48  // We're clearing the refs to the objects not the referred to objects.
49  mcp_walkers_.clear();
50  walker_elecs_.clear();
51  walker_twfs_.clear();
52  walker_hamiltonians_.clear();
53 }
RefVector< MCPWalker > mcp_walkers_
Definition: Crowd.h:132
RefVector< TrialWaveFunction > walker_twfs_
Definition: Crowd.h:134
RefVector< ParticleSet > walker_elecs_
Definition: Crowd.h:133
RefVector< QMCHamiltonian > walker_hamiltonians_
Definition: Crowd.h:135

◆ collectStepWalkerLog()

void collectStepWalkerLog ( int  current_step)

Collect walker log data.

Definition at line 96 of file Crowd.cpp.

References Crowd::mcp_walkers_, Crowd::size(), Crowd::walker_elecs_, Crowd::walker_hamiltonians_, Crowd::walker_twfs_, and Crowd::wlog_collector_.

97 {
98  if (!wlog_collector_)
99  return;
100 
101  for (int iw = 0; iw < size(); ++iw)
103  current_step);
104 }
RefVector< MCPWalker > mcp_walkers_
Definition: Crowd.h:132
int size() const
Definition: Crowd.h:111
RefVector< TrialWaveFunction > walker_twfs_
Definition: Crowd.h:134
RefVector< ParticleSet > walker_elecs_
Definition: Crowd.h:133
RefVector< QMCHamiltonian > walker_hamiltonians_
Definition: Crowd.h:135
std::unique_ptr< WalkerLogCollector > wlog_collector_
Definition: Crowd.h:143

◆ endElectrons()

auto endElectrons ( )
inline

Definition at line 100 of file Crowd.h.

References Crowd::walker_elecs_.

100 { return walker_elecs_.end(); }
RefVector< ParticleSet > walker_elecs_
Definition: Crowd.h:133

◆ endTrialWaveFunctions()

auto endTrialWaveFunctions ( )
inline

Definition at line 98 of file Crowd.h.

References Crowd::walker_twfs_.

98 { return walker_twfs_.end(); }
RefVector< TrialWaveFunction > walker_twfs_
Definition: Crowd.h:134

◆ endWalkers()

auto endWalkers ( )
inline

Definition at line 96 of file Crowd.h.

References Crowd::mcp_walkers_.

96 { return mcp_walkers_.end(); }
RefVector< MCPWalker > mcp_walkers_
Definition: Crowd.h:132

◆ get_accept()

unsigned long get_accept ( )
inline

Definition at line 117 of file Crowd.h.

References Crowd::n_accept_.

117 { return n_accept_; }
unsigned long n_accept_
Definition: Crowd.h:151

◆ get_estimator_manager_crowd() [1/2]

EstimatorManagerCrowd& get_estimator_manager_crowd ( )
inline

Definition at line 69 of file Crowd.h.

References Crowd::estimator_manager_crowd_.

69 { return estimator_manager_crowd_; }
EstimatorManagerCrowd estimator_manager_crowd_
per crowd estimator manager
Definition: Crowd.h:141

◆ get_estimator_manager_crowd() [2/2]

const EstimatorManagerCrowd& get_estimator_manager_crowd ( ) const
inline

Definition at line 107 of file Crowd.h.

References Crowd::estimator_manager_crowd_.

107 { return estimator_manager_crowd_; }
EstimatorManagerCrowd estimator_manager_crowd_
per crowd estimator manager
Definition: Crowd.h:141

◆ get_nonlocal_accept()

unsigned long get_nonlocal_accept ( )
inline

Definition at line 116 of file Crowd.h.

References Crowd::n_nonlocal_accept_.

116 { return n_nonlocal_accept_; }
unsigned long n_nonlocal_accept_
Definition: Crowd.h:152

◆ get_reject()

unsigned long get_reject ( )
inline

Definition at line 118 of file Crowd.h.

References Crowd::n_reject_.

118 { return n_reject_; }
unsigned long n_reject_
Definition: Crowd.h:150

◆ get_walker_elecs()

const RefVector<ParticleSet>& get_walker_elecs ( ) const
inline

Definition at line 103 of file Crowd.h.

References Crowd::walker_elecs_.

103 { return walker_elecs_; }
RefVector< ParticleSet > walker_elecs_
Definition: Crowd.h:133

◆ get_walker_hamiltonians()

const RefVector<QMCHamiltonian>& get_walker_hamiltonians ( ) const
inline

Definition at line 105 of file Crowd.h.

References Crowd::walker_hamiltonians_.

105 { return walker_hamiltonians_; }
RefVector< QMCHamiltonian > walker_hamiltonians_
Definition: Crowd.h:135

◆ get_walker_twfs()

const RefVector<TrialWaveFunction>& get_walker_twfs ( ) const
inline

Definition at line 104 of file Crowd.h.

References Crowd::walker_twfs_.

104 { return walker_twfs_; }
RefVector< TrialWaveFunction > walker_twfs_
Definition: Crowd.h:134

◆ get_walkers()

const RefVector<MCPWalker>& get_walkers ( ) const
inline

Definition at line 102 of file Crowd.h.

References Crowd::mcp_walkers_.

102 { return mcp_walkers_; }
RefVector< MCPWalker > mcp_walkers_
Definition: Crowd.h:132

◆ getSharedResource()

DriverWalkerResourceCollection& getSharedResource ( )
inline

Definition at line 109 of file Crowd.h.

References Crowd::driverwalker_resource_collection_.

DriverWalkerResourceCollection driverwalker_resource_collection_
}@
Definition: Crowd.h:139

◆ getWalkerLogCollectorRefs()

RefVector< WalkerLogCollector > getWalkerLogCollectorRefs ( const UPtrVector< Crowd > &  crowds)
static

get refereces of active walker log collectors. If walker logging is disabled, the RefVector size can be zero.

Definition at line 106 of file Crowd.cpp.

References qmcplusplus::crowd.

Referenced by VMCBatched::run(), and DMCBatched::run().

107 {
108  RefVector<WalkerLogCollector> refs;
109  for (auto& crowd : crowds)
110  if (crowd && crowd->wlog_collector_)
111  refs.push_back(*crowd->wlog_collector_);
112  return refs;
113 }

◆ incAccept()

void incAccept ( )
inline

Definition at line 114 of file Crowd.h.

References Crowd::n_accept_.

114 { ++n_accept_; }
unsigned long n_accept_
Definition: Crowd.h:151

◆ incNonlocalAccept()

void incNonlocalAccept ( int  n = 1)
inline

Definition at line 115 of file Crowd.h.

References qmcplusplus::n, and Crowd::n_nonlocal_accept_.

115 { n_nonlocal_accept_ += n; }
unsigned long n_nonlocal_accept_
Definition: Crowd.h:152

◆ incReject()

void incReject ( )
inline

Definition at line 113 of file Crowd.h.

References Crowd::n_reject_.

113 { ++n_reject_; }
unsigned long n_reject_
Definition: Crowd.h:150

◆ reserve()

void reserve ( int  crowd_size)

Because so many vectors allocate them upfront.

could be premature optimization

Definition at line 55 of file Crowd.cpp.

References Crowd::mcp_walkers_, Crowd::walker_elecs_, Crowd::walker_hamiltonians_, and Crowd::walker_twfs_.

56 {
57  auto reserveCS = [crowd_size](auto& avector) { avector.reserve(crowd_size); };
58  reserveCS(mcp_walkers_);
59  reserveCS(walker_elecs_);
60  reserveCS(walker_twfs_);
61  reserveCS(walker_hamiltonians_);
62 }
RefVector< MCPWalker > mcp_walkers_
Definition: Crowd.h:132
RefVector< TrialWaveFunction > walker_twfs_
Definition: Crowd.h:134
RefVector< ParticleSet > walker_elecs_
Definition: Crowd.h:133
RefVector< QMCHamiltonian > walker_hamiltonians_
Definition: Crowd.h:135

◆ setRNGForHamiltonian()

void setRNGForHamiltonian ( RandomBase< FullPrecRealType > &  rng)

Definition at line 72 of file Crowd.cpp.

References qmcplusplus::ham, QMCHamiltonian::setRandomGenerator(), and Crowd::walker_hamiltonians_.

73 {
74  for (QMCHamiltonian& ham : walker_hamiltonians_)
75  ham.setRandomGenerator(&rng);
76 }
RefVector< QMCHamiltonian > walker_hamiltonians_
Definition: Crowd.h:135
void setRandomGenerator(RandomBase< FullPrecRealType > *rng)

◆ setWalkerLogCollector()

void setWalkerLogCollector ( std::unique_ptr< WalkerLogCollector > &&  collector)

activate the collector

Definition at line 91 of file Crowd.cpp.

References Crowd::wlog_collector_.

92 {
93  wlog_collector_ = std::move(collector);
94 }
std::unique_ptr< WalkerLogCollector > wlog_collector_
Definition: Crowd.h:143

◆ size()

int size ( void  ) const
inline

Definition at line 111 of file Crowd.h.

References Crowd::mcp_walkers_.

Referenced by Crowd::accumulate(), and Crowd::collectStepWalkerLog().

111 { return mcp_walkers_.size(); }
RefVector< MCPWalker > mcp_walkers_
Definition: Crowd.h:132

◆ startBlock()

void startBlock ( int  steps)

Definition at line 78 of file Crowd.cpp.

References Crowd::estimator_manager_crowd_, Crowd::n_accept_, Crowd::n_nonlocal_accept_, Crowd::n_reject_, EstimatorManagerCrowd::startBlock(), and Crowd::wlog_collector_.

79 {
80  n_accept_ = 0;
81  n_reject_ = 0;
82  // VMCBatched does no nonlocal moves
85  if (wlog_collector_)
86  wlog_collector_->startBlock();
87 }
unsigned long n_reject_
Definition: Crowd.h:150
EstimatorManagerCrowd estimator_manager_crowd_
per crowd estimator manager
Definition: Crowd.h:141
void startBlock(int steps)
start a block
unsigned long n_accept_
Definition: Crowd.h:151
std::unique_ptr< WalkerLogCollector > wlog_collector_
Definition: Crowd.h:143
unsigned long n_nonlocal_accept_
Definition: Crowd.h:152

◆ startRun()

void startRun ( )
inline

Definition at line 65 of file Crowd.h.

65 {}

◆ stopBlock()

void stopBlock ( )

Definition at line 89 of file Crowd.cpp.

References Crowd::estimator_manager_crowd_, and EstimatorManagerCrowd::stopBlock().

EstimatorManagerCrowd estimator_manager_crowd_
per crowd estimator manager
Definition: Crowd.h:141

Member Data Documentation

◆ dispatchers_

const MultiWalkerDispatchers& dispatchers_

Definition at line 120 of file Crowd.h.

◆ driverwalker_resource_collection_

DriverWalkerResourceCollection driverwalker_resource_collection_
private

}@

Definition at line 139 of file Crowd.h.

Referenced by Crowd::Crowd(), and Crowd::getSharedResource().

◆ estimator_manager_crowd_

EstimatorManagerCrowd estimator_manager_crowd_
private

per crowd estimator manager

Definition at line 141 of file Crowd.h.

Referenced by Crowd::accumulate(), Crowd::Crowd(), Crowd::get_estimator_manager_crowd(), Crowd::startBlock(), and Crowd::stopBlock().

◆ mcp_walkers_

◆ n_accept_

unsigned long n_accept_ = 0
private

Definition at line 151 of file Crowd.h.

Referenced by Crowd::get_accept(), Crowd::incAccept(), and Crowd::startBlock().

◆ n_nonlocal_accept_

unsigned long n_nonlocal_accept_ = 0
private

◆ n_reject_

unsigned long n_reject_ = 0
private

Definition at line 150 of file Crowd.h.

Referenced by Crowd::get_reject(), Crowd::incReject(), and Crowd::startBlock().

◆ walker_elecs_

◆ walker_hamiltonians_

◆ walker_twfs_

◆ wlog_collector_

std::unique_ptr<WalkerLogCollector> wlog_collector_
private

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