NAMD
Public Member Functions | Public Attributes | List of all members
SimpleBroadcastObject< T > Class Template Reference

#include <BroadcastObject.h>

Inheritance diagram for SimpleBroadcastObject< T >:
BroadcastClient

Public Member Functions

 SimpleBroadcastObject (int id_in, const LDObjHandle *h=0, NodeBroadcast *nodeBroadcastIn=0, const bool useSharedIfPossible=false)
 
 ~SimpleBroadcastObject ()
 
get (int tag, const int expected=-1)
 
int getSize ()
 
int getBcastSize ()
 
int getTaggedSize ()
 
void publish (int tag, const T &t)
 
- Public Member Functions inherited from BroadcastClient
 BroadcastClient (int id)
 
 ~BroadcastClient ()
 
void awaken (int id, int tag)
 

Public Attributes

const LDObjHandle * ldObjPtr
 
bool useShared = false
 
int id = -1
 
NodeBroadcastnodeBroadcast
 
- Public Attributes inherited from BroadcastClient
int id
 

Additional Inherited Members

- Protected Member Functions inherited from BroadcastClient
void suspendFor (int tag)
 
- Protected Attributes inherited from BroadcastClient
int suspended
 
int waitForTag
 
CthThread thread
 

Detailed Description

template<class T>
class SimpleBroadcastObject< T >

Definition at line 44 of file BroadcastObject.h.

Constructor & Destructor Documentation

◆ SimpleBroadcastObject()

template<class T>
SimpleBroadcastObject< T >::SimpleBroadcastObject ( int  id_in,
const LDObjHandle *  h = 0,
NodeBroadcast nodeBroadcastIn = 0,
const bool  useSharedIfPossible = false 
)
inline

Definition at line 65 of file BroadcastObject.h.

67  : BroadcastClient(id_in), ldObjPtr(h), nodeBroadcast(nodeBroadcastIn), id(id_in) {
68  if ( sizeof(T) > BCASTMSGSIZE ) {
69  NAMD_bug("SimpleBroadcastObject instantiated on class larger than BCASTMSGSIZE");
70  }
71 
72  if (nodeBroadcast != 0) {
74 
75  if (useShared) {
76  // Add a map for this broadcast object if needed
77  CmiLock(nodeBroadcast->lock);
78  if (nodeBroadcast->data.find(id) == nodeBroadcast->data.end()) {
79  nodeBroadcast->data[id] = new std::map<int, T>();
80  }
81  CmiUnlock(nodeBroadcast->lock);
82  }
83  }
84  }
static Node * Object()
Definition: Node.h:86
SimParameters * simParameters
Definition: Node.h:181
const LDObjHandle * ldObjPtr
void NAMD_bug(const char *err_msg)
Definition: common.C:195
std::map< int, std::any > data
NodeBroadcast * nodeBroadcast
Bool GPUresidentSingleProcessMode
#define BCASTMSGSIZE
Definition: BroadcastMgr.h:22
BroadcastClient(int id)
CmiNodeLock lock

◆ ~SimpleBroadcastObject()

template<class T>
SimpleBroadcastObject< T >::~SimpleBroadcastObject ( )
inline

Definition at line 85 of file BroadcastObject.h.

85 { }

Member Function Documentation

◆ get()

template<class T>
T SimpleBroadcastObject< T >::get ( int  tag,
const int  expected = -1 
)
inline

Definition at line 96 of file BroadcastObject.h.

Referenced by Sequencer::adaptTempUpdate(), Sequencer::algorithm(), Controller::algorithm(), Sequencer::berendsenPressure(), Sequencer::berendsenPressure_SOA(), Sequencer::correctMomentum(), Sequencer::langevinPiston(), Sequencer::langevinPiston_SOA(), Sequencer::minimize(), Sequencer::multigratorPressure(), Sequencer::multigratorTemperature(), Sequencer::rescaleaccelMD(), Sequencer::rescaleVelocities(), Sequencer::stochRescaleVelocities(), Sequencer::stochRescaleVelocities_SOA(), Sequencer::submitCollections(), Sequencer::tcoupleVelocities(), and Sequencer::traceBarrier().

96  {
97  T tmp;
98  if (useShared) {
99  CmiLock(nodeBroadcast->lock);
100  if (nodeBroadcast->data.find(id) == nodeBroadcast->data.end()) {
101  NAMD_bug("SimpleBroadcastObject: Did not find id");
102  }
103  std::map<int, T>* data = std::any_cast<std::map<int, T>*>(nodeBroadcast->data[id]);
104  if (data->find(tag) == data->end()) {
105  NAMD_bug("SimpleBroadcastObject: Did not find tag");
106  }
107  tmp = (*data)[tag];
108  nodeBroadcast->current[id][tag]++;
109  if (nodeBroadcast->current[id][tag] == expected) {
110  data->erase(tag);
111  nodeBroadcast->current[id].erase(tag);
112  }
113  CmiUnlock(nodeBroadcast->lock);
114  } else {
116  while ( BroadcastMgr::Object()->getbuf(*this, tag, (void*)(&tmp)) < 0 ) {
117  suspendFor(tag);
118  }
120  }
121  return tmp;
122  }
void startWork(const LDObjHandle &handle)
void pauseWork(const LDObjHandle &handle)
const LDObjHandle * ldObjPtr
void NAMD_bug(const char *err_msg)
Definition: common.C:195
std::map< int, std::any > data
NodeBroadcast * nodeBroadcast
static LdbCoordinator * Object()
void suspendFor(int tag)
static BroadcastMgr * Object()
Definition: BroadcastMgr.h:95
CmiNodeLock lock
std::map< int, std::map< int, int > > current

◆ getBcastSize()

template<class T>
int SimpleBroadcastObject< T >::getBcastSize ( )
inline

Definition at line 126 of file BroadcastObject.h.

126  {
128  }
int boidBroadcastSize()
Definition: BroadcastMgr.C:28
static BroadcastMgr * Object()
Definition: BroadcastMgr.h:95

◆ getSize()

template<class T>
int SimpleBroadcastObject< T >::getSize ( )
inline

Definition at line 123 of file BroadcastObject.h.

123  {
124  return BroadcastMgr::Object()->boidSize();
125  }
static BroadcastMgr * Object()
Definition: BroadcastMgr.h:95

◆ getTaggedSize()

template<class T>
int SimpleBroadcastObject< T >::getTaggedSize ( )
inline

Definition at line 129 of file BroadcastObject.h.

129  {
131  }
int boidTaggedMsgSize()
Definition: BroadcastMgr.C:38
static BroadcastMgr * Object()
Definition: BroadcastMgr.h:95

◆ publish()

template<class T>
void SimpleBroadcastObject< T >::publish ( int  tag,
const T &  t 
)
inline

Definition at line 132 of file BroadcastObject.h.

Referenced by Controller::adaptTempUpdate(), Controller::berendsenPressure(), Controller::correctMomentum(), Controller::langevinPiston1(), Controller::minimize(), Controller::monteCarloPressure_accept(), Controller::monteCarloPressure_prepare(), Controller::multigratorPressure(), Controller::multigratorTemperature(), Controller::printEnergies(), Controller::rescaleaccelMD(), Controller::rescaleVelocities(), Controller::resumeAfterTraceBarrier(), Controller::stochRescaleVelocities(), and Controller::tcoupleVelocities().

132  {
133  if (useShared) {
134  CmiLock(nodeBroadcast->lock);
135  std::map<int, T>* data = std::any_cast<std::map<int, T>*>(nodeBroadcast->data[id]);
136  data->insert({tag, t});
137  nodeBroadcast->current[id][tag] = 0;
138  CmiUnlock(nodeBroadcast->lock);
139  } else {
140  BroadcastMgr::Object()->send(*this, tag, (void*)(&t), sizeof(T));
141  }
142  }
void send(BroadcastClient &b, int tag, void *buf, size_t)
Definition: BroadcastMgr.C:69
std::map< int, std::any > data
NodeBroadcast * nodeBroadcast
static BroadcastMgr * Object()
Definition: BroadcastMgr.h:95
CmiNodeLock lock
std::map< int, std::map< int, int > > current

Member Data Documentation

◆ id

template<class T>
int SimpleBroadcastObject< T >::id = -1

◆ ldObjPtr

template<class T>
const LDObjHandle* SimpleBroadcastObject< T >::ldObjPtr

Definition at line 48 of file BroadcastObject.h.

Referenced by SimpleBroadcastObject< Tensor >::get().

◆ nodeBroadcast

template<class T>
NodeBroadcast* SimpleBroadcastObject< T >::nodeBroadcast

◆ useShared

template<class T>
bool SimpleBroadcastObject< T >::useShared = false

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