MPQC
3.0.0-alpha
|
The MessageGrp abstract class provides a mechanism for moving data and objects between nodes in a parallel machine. More...
#include <util/group/message.h>
Classes | |
class | MessageHandle |
class | MessageInfo |
Public Types | |
enum | { AnyType = -1 } |
enum | { AnySender = -1 } |
Public Member Functions | |||||||||||||
MessageGrp (const Ref< KeyVal > &) | |||||||||||||
virtual | ~MessageGrp () | ||||||||||||
Destroy this MessageGrp. More... | |||||||||||||
int | n () | ||||||||||||
Returns the number of processors. | |||||||||||||
int | me () | ||||||||||||
Returns my processor number. In the range [0,n()). | |||||||||||||
virtual Ref< MessageGrp > | clone (void)=0 | ||||||||||||
Returns a copy of this MessageGrp specialization that provides an independent communication context. | |||||||||||||
virtual Ref< MessageGrp > | split (int grpkey=0, int rankkey=0)=0 | ||||||||||||
Returns MessageGrp objects that are a subset of this MessageGrp. More... | |||||||||||||
virtual Ref< MessageGrp > | subset (const std::set< int > &)=0 | ||||||||||||
Returns MessageGrp objects that are a subset of this MessageGrp. More... | |||||||||||||
Send Members | |||||||||||||
| |||||||||||||
virtual void | send (int target, const double *data, int ndata) | ||||||||||||
virtual void | send (int target, const unsigned int *data, int ndata) | ||||||||||||
virtual void | send (int target, const int *data, int ndata) | ||||||||||||
virtual void | send (int target, const char *data, int nbyte) | ||||||||||||
virtual void | send (int target, const unsigned char *data, int nbyte) | ||||||||||||
virtual void | send (int target, const signed char *data, int nbyte) | ||||||||||||
virtual void | send (int target, const short *data, int ndata) | ||||||||||||
virtual void | send (int target, const long *data, int ndata) | ||||||||||||
virtual void | send (int target, const float *data, int ndata) | ||||||||||||
void | send (int target, double data) | ||||||||||||
This sends a single double datum. | |||||||||||||
void | send (int target, int data) | ||||||||||||
This sends a single integer datum. | |||||||||||||
virtual void | raw_send (int target, const void *data, int nbyte)=0 | ||||||||||||
Send Members for Typed Messages | |||||||||||||
| |||||||||||||
virtual void | sendt (int target, int type, const double *data, int ndata, bool rcvrdy=false) | ||||||||||||
virtual void | sendt (int target, int type, const unsigned int *data, int ndata, bool rcvrdy=false) | ||||||||||||
virtual void | sendt (int target, int type, const int *data, int ndata, bool rcvrdy=false) | ||||||||||||
virtual void | sendt (int target, int type, const char *data, int nbyte, bool rcvrdy=false) | ||||||||||||
virtual void | sendt (int target, int type, const unsigned char *data, int nbyte, bool rcvrdy=false) | ||||||||||||
virtual void | sendt (int target, int type, const signed char *data, int nbyte, bool rcvrdy=false) | ||||||||||||
virtual void | sendt (int target, int type, const short *data, int ndata, bool rcvrdy=false) | ||||||||||||
virtual void | sendt (int target, int type, const long *data, int ndata, bool rcvrdy=false) | ||||||||||||
virtual void | sendt (int target, int type, const float *data, int ndata, bool rcvrdy=false) | ||||||||||||
void | sendt (int target, int type, double data, bool rcvrdy=false) | ||||||||||||
This sends a single double datum. | |||||||||||||
void | sendt (int target, int type, int data, bool rcvrdy=false) | ||||||||||||
This sends a single integer datum. | |||||||||||||
virtual void | raw_sendt (int target, int type, const void *data, int nbyte, bool rcvrdy=false)=0 | ||||||||||||
Receive Members | |||||||||||||
| |||||||||||||
virtual void | recv (int sender, double *data, int ndata) | ||||||||||||
virtual void | recv (int sender, unsigned int *data, int ndata) | ||||||||||||
virtual void | recv (int sender, int *data, int ndata) | ||||||||||||
virtual void | recv (int sender, char *data, int nbyte) | ||||||||||||
virtual void | recv (int sender, unsigned char *data, int nbyte) | ||||||||||||
virtual void | recv (int sender, signed char *data, int nbyte) | ||||||||||||
virtual void | recv (int sender, short *data, int ndata) | ||||||||||||
virtual void | recv (int sender, long *data, int ndata) | ||||||||||||
virtual void | recv (int sender, float *data, int ndata) | ||||||||||||
void | recv (int sender, double &data) | ||||||||||||
This receives a single double datum. | |||||||||||||
void | recv (int sender, int &data) | ||||||||||||
This receives a single integer datum. | |||||||||||||
virtual void | raw_recv (int sender, void *data, int nbyte, MessageInfo *info=0)=0 | ||||||||||||
Receive Members for Typed Messages | |||||||||||||
| |||||||||||||
virtual void | recvt (int sender, int type, double *data, int ndata) | ||||||||||||
virtual void | recvt (int sender, int type, unsigned int *data, int ndata) | ||||||||||||
virtual void | recvt (int sender, int type, int *data, int ndata) | ||||||||||||
virtual void | recvt (int sender, int type, char *data, int nbyte) | ||||||||||||
virtual void | recvt (int sender, int type, unsigned char *data, int nbyte) | ||||||||||||
virtual void | recvt (int sender, int type, signed char *data, int nbyte) | ||||||||||||
virtual void | recvt (int sender, int type, short *data, int ndata) | ||||||||||||
virtual void | recvt (int sender, int type, long *data, int ndata) | ||||||||||||
virtual void | recvt (int sender, int type, float *data, int ndata) | ||||||||||||
void | recvt (int sender, int type, double &data) | ||||||||||||
This receives a single double datum. | |||||||||||||
void | recvt (int sender, int type, int &data) | ||||||||||||
This receives a single integer datum. | |||||||||||||
virtual void | raw_recvt (int sender, int type, void *data, int nbyte, MessageInfo *info=0)=0 | ||||||||||||
Non-blocking Send Members | |||||||||||||
These send routines are nonblocking. The operation is not complete and the
| |||||||||||||
virtual void | nb_sendt (int target, int type, const double *data, int ndata, MessageHandle &handle, bool rcvrdy=false) | ||||||||||||
virtual void | nb_sendt (int target, int type, const unsigned int *data, int ndata, MessageHandle &handle, bool rcvrdy=false) | ||||||||||||
virtual void | nb_sendt (int target, int type, const int *data, int ndata, MessageHandle &handle, bool rcvrdy=false) | ||||||||||||
virtual void | nb_sendt (int target, int type, const char *data, int nbyte, MessageHandle &handle, bool rcvrdy=false) | ||||||||||||
virtual void | nb_sendt (int target, int type, const unsigned char *data, int nbyte, MessageHandle &handle, bool rcvrdy=false) | ||||||||||||
virtual void | nb_sendt (int target, int type, const signed char *data, int nbyte, MessageHandle &handle, bool rcvrdy=false) | ||||||||||||
virtual void | nb_sendt (int target, int type, const short *data, int ndata, MessageHandle &handle, bool rcvrdy=false) | ||||||||||||
virtual void | nb_sendt (int target, int type, const long *data, int ndata, MessageHandle &handle, bool rcvrdy=false) | ||||||||||||
virtual void | nb_sendt (int target, int type, const float *data, int ndata, MessageHandle &handle, bool rcvrdy=false) | ||||||||||||
void | nb_sendt (int target, int type, double data, MessageHandle &handle, bool rcvrdy=false) | ||||||||||||
void | nb_sendt (int target, int type, int data, MessageHandle &handle, bool rcvrdy=false) | ||||||||||||
virtual void | raw_nb_sendt (int target, int type, const void *data, int nbyte, MessageHandle &, bool rcvrdy=false)=0 | ||||||||||||
Non-blocking Receive Members | |||||||||||||
These receive routines are nonblocking. The operation is not complete and the
| |||||||||||||
virtual void | nb_recvt (int sender, int type, double *data, int ndata, MessageHandle &handle) | ||||||||||||
virtual void | nb_recvt (int sender, int type, unsigned int *data, int ndata, MessageHandle &handle) | ||||||||||||
virtual void | nb_recvt (int sender, int type, int *data, int ndata, MessageHandle &handle) | ||||||||||||
virtual void | nb_recvt (int sender, int type, char *data, int nbyte, MessageHandle &handle) | ||||||||||||
virtual void | nb_recvt (int sender, int type, unsigned char *data, int nbyte, MessageHandle &handle) | ||||||||||||
virtual void | nb_recvt (int sender, int type, signed char *data, int nbyte, MessageHandle &handle) | ||||||||||||
virtual void | nb_recvt (int sender, int type, short *data, int ndata, MessageHandle &handle) | ||||||||||||
virtual void | nb_recvt (int sender, int type, long *data, int ndata, MessageHandle &handle) | ||||||||||||
virtual void | nb_recvt (int sender, int type, float *data, int ndata, MessageHandle &handle) | ||||||||||||
void | nb_recvt (int sender, int type, double &data, MessageHandle &handle) | ||||||||||||
This receives a single double datum. | |||||||||||||
void | nb_recvt (int sender, int type, int &data, MessageHandle &handle) | ||||||||||||
This receives a single integer datum. | |||||||||||||
virtual void | raw_nb_recvt (int sender, int type, void *data, int nbyte, MessageHandle &)=0 | ||||||||||||
virtual void | wait (const MessageHandle &handle, MessageInfo *info=0)=0 | ||||||||||||
Wait for an operation to complete. More... | |||||||||||||
virtual int | probet (int sender, int type, MessageInfo *info=0)=0 | ||||||||||||
Ask if a given typed message has been received. | |||||||||||||
Broadcast Members | |||||||||||||
Do broadcasts of various types of data. | |||||||||||||
virtual void | bcast (double *data, int ndata, int from=0) | ||||||||||||
virtual void | bcast (unsigned int *data, int ndata, int from=0) | ||||||||||||
virtual void | bcast (int *data, int ndata, int from=0) | ||||||||||||
virtual void | bcast (char *data, int nbyte, int from=0) | ||||||||||||
virtual void | bcast (unsigned char *data, int nbyte, int from=0) | ||||||||||||
virtual void | bcast (signed char *data, int nbyte, int from=0) | ||||||||||||
virtual void | bcast (short *data, int ndata, int from=0) | ||||||||||||
virtual void | bcast (long *data, int ndata, int from=0) | ||||||||||||
virtual void | bcast (float *data, int ndata, int from=0) | ||||||||||||
virtual void | raw_bcast (void *data, int nbyte, int from=0) | ||||||||||||
void | bcast (double &data, int from=0) | ||||||||||||
void | bcast (int &data, int from=0) | ||||||||||||
Data Collection Members | |||||||||||||
Collect data distributed on the nodes to a big array replicated on each node. | |||||||||||||
virtual void | raw_collect (const void *part, const int *lengths, void *whole, int bytes_per_datum=1) | ||||||||||||
void | collect (const double *part, const int *lengths, double *whole) | ||||||||||||
Global Sum Reduction Members | |||||||||||||
virtual void | sum (double *data, int n, double *=0, int target=-1) | ||||||||||||
virtual void | sum (unsigned int *data, int n, unsigned int *=0, int target=-1) | ||||||||||||
virtual void | sum (int *data, int n, int *=0, int target=-1) | ||||||||||||
virtual void | sum (long *data, int n, long *=0, int target=-1) | ||||||||||||
virtual void | sum (unsigned long *data, int n, unsigned long *=0, int target=-1) | ||||||||||||
virtual void | sum (char *data, int n, char *=0, int target=-1) | ||||||||||||
virtual void | sum (unsigned char *data, int n, unsigned char *=0, int target=-1) | ||||||||||||
virtual void | sum (signed char *data, int n, signed char *=0, int target=-1) | ||||||||||||
void | sum (double &data) | ||||||||||||
void | sum (int &data) | ||||||||||||
Global Maximization Members | |||||||||||||
virtual void | max (double *data, int n, double *=0, int target=-1) | ||||||||||||
virtual void | max (int *data, int n, int *=0, int target=-1) | ||||||||||||
virtual void | max (unsigned int *data, int n, unsigned int *=0, int target=-1) | ||||||||||||
virtual void | max (char *data, int n, char *=0, int target=-1) | ||||||||||||
virtual void | max (unsigned char *data, int n, unsigned char *=0, int target=-1) | ||||||||||||
virtual void | max (signed char *data, int n, signed char *=0, int target=-1) | ||||||||||||
void | max (double &data) | ||||||||||||
void | max (int &data) | ||||||||||||
Global Minimization Members | |||||||||||||
virtual void | min (double *data, int n, double *=0, int target=-1) | ||||||||||||
virtual void | min (int *data, int n, int *=0, int target=-1) | ||||||||||||
virtual void | min (unsigned int *data, int n, unsigned int *=0, int target=-1) | ||||||||||||
virtual void | min (char *data, int n, char *=0, int target=-1) | ||||||||||||
virtual void | min (unsigned char *data, int n, unsigned char *=0, int target=-1) | ||||||||||||
virtual void | min (signed char *data, int n, signed char *=0, int target=-1) | ||||||||||||
void | min (double &data) | ||||||||||||
void | min (int &data) | ||||||||||||
Global Generic Reduction Members. | |||||||||||||
template<typename T > | |||||||||||||
void | reduce (T *, int n, GrpReduce< T > &, T *scratch=0, int target=-1) | ||||||||||||
T must be a POD (plain old data) type so that it can be copied bytewise. | |||||||||||||
virtual void | reduce (double *, int n, GrpReduce< double > &, double *scratch=0, int target=-1) | ||||||||||||
virtual void | reduce (int *, int n, GrpReduce< int > &, int *scratch=0, int target=-1) | ||||||||||||
virtual void | reduce (unsigned int *, int n, GrpReduce< unsigned int > &, unsigned int *scratch=0, int target=-1) | ||||||||||||
virtual void | reduce (char *, int n, GrpReduce< char > &, char *scratch=0, int target=-1) | ||||||||||||
virtual void | reduce (unsigned char *, int n, GrpReduce< unsigned char > &, unsigned char *scratch=0, int target=-1) | ||||||||||||
virtual void | reduce (signed char *, int n, GrpReduce< signed char > &, signed char *scratch=0, int target=-1) | ||||||||||||
virtual void | reduce (short *, int n, GrpReduce< short > &, short *scratch=0, int target=-1) | ||||||||||||
virtual void | reduce (float *, int n, GrpReduce< float > &, float *scratch=0, int target=-1) | ||||||||||||
virtual void | reduce (long *, int n, GrpReduce< long > &, long *scratch=0, int target=-1) | ||||||||||||
void | reduce (double &data, GrpReduce< double > &r) | ||||||||||||
void | reduce (int &data, GrpReduce< int > &r) | ||||||||||||
virtual void | sync () | ||||||||||||
Synchronize all of the processors. | |||||||||||||
Ref< MachineTopology > | topology () | ||||||||||||
Return the MachineTopology object. | |||||||||||||
Global Class Information Members | |||||||||||||
Each message group maintains an association of ClassDesc with a global index so SavableState information can be sent between nodes without needing to send the classname and look up the ClassDesc with each transfer. These routines return information about that mapping. | |||||||||||||
int | classdesc_to_index (const ClassDesc *) | ||||||||||||
const ClassDesc * | index_to_classdesc (int) | ||||||||||||
int | nclass () const | ||||||||||||
Public Member Functions inherited from sc::DescribedClass | |||||||||||||
DescribedClass (const DescribedClass &) | |||||||||||||
DescribedClass & | operator= (const DescribedClass &) | ||||||||||||
ClassDesc * | class_desc () const MPQC__NOEXCEPT | ||||||||||||
This returns the unique pointer to the ClassDesc corresponding to the given type_info object. More... | |||||||||||||
const char * | class_name () const | ||||||||||||
Return the name of the object's exact type. | |||||||||||||
int | class_version () const | ||||||||||||
Return the version of the class. | |||||||||||||
virtual void | print (std::ostream &=ExEnv::out0()) const | ||||||||||||
Print the object. | |||||||||||||
Ref< DescribedClass > | ref () | ||||||||||||
Return this object wrapped up in a Ref smart pointer. More... | |||||||||||||
Public Member Functions inherited from sc::RefCount | |||||||||||||
size_t | identifier () const | ||||||||||||
Return the unique identifier for this object that can be compared for different objects of different types. More... | |||||||||||||
int | lock_ptr () const | ||||||||||||
Lock this object. | |||||||||||||
int | unlock_ptr () const | ||||||||||||
Unlock this object. | |||||||||||||
void | use_locks (bool inVal) | ||||||||||||
start and stop using locks on this object | |||||||||||||
refcount_t | nreference () const | ||||||||||||
Return the reference count. | |||||||||||||
refcount_t | reference () | ||||||||||||
Increment the reference count and return the new count. | |||||||||||||
refcount_t | dereference () | ||||||||||||
Decrement the reference count and return the new count. | |||||||||||||
int | managed () const | ||||||||||||
void | unmanage () | ||||||||||||
Turn off the reference counting mechanism for this object. More... | |||||||||||||
Static Public Member Functions | |
static void | set_default_messagegrp (const Ref< MessageGrp > &) |
The default message group contains the primary message group to be used by an application. | |
static MessageGrp * | get_default_messagegrp () |
Returns the default message group. | |
static MessageGrp * | initial_messagegrp (int &argc, char **&argv) |
Create a message group. More... | |
Protected Member Functions | |
void | initialize (int me, int n) |
The classdesc_to_index_ and index_to_classdesc_ arrays cannot be initialized by the MessageGrp CTOR, because the MessageGrp specialization has not yet been initialized and communication is not available. More... | |
void | set_sender (MessageInfo *info, int sender) |
void | set_type (MessageInfo *info, int type) |
void | set_nbyte (MessageInfo *info, int nbyte) |
void | set_id (MessageHandle *handle, void *id) |
void * | get_id (const MessageHandle *handle) |
Protected Member Functions inherited from sc::RefCount | |
RefCount (const RefCount &) | |
RefCount & | operator= (const RefCount &) |
Protected Attributes | |
Ref< MachineTopology > | topology_ |
int | debug_ |
The MessageGrp abstract class provides a mechanism for moving data and objects between nodes in a parallel machine.
|
virtual |
Destroy this MessageGrp.
This must be called by all nodes participating in this MessageGrp, because it can be a collective operation. Note, however, that it cannot be assumed to always be collective.
|
static |
Create a message group.
This routine looks for a -messagegrp argument, then the environmental variable MESSAGEGRP to decide which specialization of MessageGrp would be appropriate. The argument to -messagegrp should be either string for a ParsedKeyVal constructor or a classname. If this returns null, it is up to the programmer to create a MessageGrp.
|
protected |
The classdesc_to_index_ and index_to_classdesc_ arrays cannot be initialized by the MessageGrp CTOR, because the MessageGrp specialization has not yet been initialized and communication is not available.
CTOR's of specializations of MessageGrp must call the initialize member in their body to complete the initialization process.
|
pure virtual |
Returns MessageGrp objects that are a subset of this MessageGrp.
This call is collective–all nodes in this MessageGrp must call it. If the commkey is less than zero, then a nil pointer will be returned. Otherwise, all nodes calling with the same commkey will be put into the same return MessageGrp. The rankkey argument is used to order the nodes in the new MessageGrp. Nodes with the same rankkey are ordered by rank. With the default arguments, split behaves the same as clone.
Implemented in sc::ProcMessageGrp, and sc::MPIMessageGrp.
|
pure virtual |
Returns MessageGrp objects that are a subset of this MessageGrp.
This call is collective–all nodes in this MessageGrp must call it. The ordering of the ranks matches the ordering of the original ranks.
Implemented in sc::ProcMessageGrp, and sc::MPIMessageGrp.
|
pure virtual |
Wait for an operation to complete.
handle | the handle initialized by, for example, nb_recvt. |
info | if non-null, this will be filled in with information about the operation that completed. |
Implemented in sc::ProcMessageGrp, and sc::MPIMessageGrp.