Loading...
Searching...
No Matches
PLMD::Communicator Class Reference

Class containing wrappers to MPI. More...

#include <Communicator.h>

Inheritance diagram for PLMD::Communicator:

Classes

struct  ConstData
 Const version of Communicator::Data See Communicator::Data documentation. More...
 
struct  Data
 Structure defining a buffer for MPI. More...
 
class  Request
 Wrapper class for MPI_Request. More...
 
class  Status
 Wrapper class for MPI_Status. More...
 

Public Member Functions

 Communicator ()
 Default constructor.
 
 Communicator (const Communicator &)
 Copy constructor.
 
virtual ~Communicator ()
 Destructor.
 
void Abort (int code)
 Wrapper to MPI_Abort.
 
template<class T, class S>
void Allgather (const T &sendbuf, S &recvbuf)
 Wrapper for MPI_Allgatherv (reference)
 
template<class T, class S>
void Allgather (const T *sendbuf, int sendcount, S *recvbuf, int recvcount)
 Wrapper for MPI_Allgatherv (pointer)
 
void Allgather (ConstData in, Data out)
 Wrapper for MPI_Allgather (data struct)
 
template<class T, class S>
void Allgatherv (const T &sendbuf, S &recvbuf, const int *recvcounts, const int *displs)
 Wrapper for MPI_Allgatherv (reference)
 
template<class T, class S>
void Allgatherv (const T *sendbuf, int sendcount, S *recvbuf, const int *recvcounts, const int *displs)
 Wrapper for MPI_Allgatherv (pointer)
 
void Allgatherv (ConstData in, Data out, const int *, const int *)
 Wrapper for MPI_Allgatherv (data struct)
 
void Barrier () const
 Wrapper to MPI_Barrier.
 
void Bcast (Data, int)
 Wrapper for MPI_Bcast (data struct)
 
template<class T>
void Bcast (T &buf, int root)
 Wrapper for MPI_Bcast (reference)
 
template<class T>
void Bcast (T *buf, int count, int root)
 Wrapper for MPI_Bcast (pointer)
 
template<class T, class S>
void Gather (const T &sendbuf, int sendcount, S &recvbuf, int recvcount, int root)
 Wrapper for MPI_Gather (reference)
 
template<class T, class S>
void Gather (const T *sendbuf, int sendcount, S *recvbuf, int recvcount, int root)
 Wrapper for MPI_Gather (pointer)
 
void Gather (ConstData sendbuf, int sendcount, Data recvbuf, int recvcount, int root)
 Wrapper for MPI_Gather (data struct)
 
MPI_Comm & Get_comm ()
 Reference to MPI communicator.
 
int Get_rank () const
 Obtain the rank of the present process.
 
int Get_size () const
 Obtain the number of processes.
 
template<class T>
Request Isend (const T &buf, int source, int tag)
 Wrapper for MPI_Isend (reference)
 
template<class T>
Request Isend (const T *buf, int count, int source, int tag)
 Wrapper for MPI_Isend (pointer)
 
Request Isend (ConstData, int, int)
 Wrapper for MPI_Isend (data struct)
 
bool isStandIn () const
 True if this communicator has been marked as a stand-in with setStandIn().
 
void Max (Data)
 Wrapper for MPI_Allreduce with MPI_MAX (data struct)
 
template<class T>
void Max (T &buf)
 Wrapper for MPI_Allreduce with MPI_MAX (reference)
 
template<class T>
void Max (T *buf, int count)
 Wrapper for MPI_Allreduce with MPI_MAX (pointer)
 
void Min (Data)
 Wrapper for MPI_Allreduce with MPI_MIN (data struct)
 
template<class T>
void Min (T &buf)
 Wrapper for MPI_Allreduce with MPI_MIN (reference)
 
template<class T>
void Min (T *buf, int count)
 Wrapper for MPI_Allreduce with MPI_MIN (pointer)
 
Communicator & operator= (const Communicator &)
 Assignment operator.
 
void Prod (Data)
 Wrapper for MPI_Allreduce with MPI_PROD (data struct)
 
template<class T>
void Prod (T &buf)
 Wrapper for MPI_Allreduce with MPI_PROD (reference)
 
template<class T>
void Prod (T *buf, int count)
 Wrapper for MPI_Allreduce with MPI_PROD (pointer)
 
void Recv (Data, int, int, Status &s=StatusIgnore)
 Wrapper for MPI_Recv (data struct)
 
template<class T>
void Recv (T &buf, int source, int tag, Status &s=StatusIgnore)
 Wrapper for MPI_Recv (reference)
 
template<class T>
void Recv (T *buf, int count, int source, int tag, Status &s=StatusIgnore)
 Wrapper for MPI_Recv (pointer)
 
template<class T, class S>
void Scatter (const T &sendbuf, int sendcount, S &recvbuf, int recvcount, int root)
 Wrapper for MPI_Scatter (reference)
 
template<class T, class S>
void Scatter (const T *sendbuf, int sendcount, S *recvbuf, int recvcount, int root)
 Wrapper for MPI_Scatter (pointer)
 
void Scatter (ConstData sendbuf, int sendcount, Data recvbuf, int recvcount, int root)
 Wrapper for MPI_Scatter (data struct)
 
void Set_comm (const TypesafePtr &comm)
 Set from a pointer to a real MPI communicator (C).
 
void Set_comm (MPI_Comm comm)
 Set from a real MPI communicator.
 
void Set_fcomm (const TypesafePtr &comm)
 Set from a pointer to a real MPI communicator (FORTRAN).
 
void setStandIn (bool s)
 Mark this communicator as a stand-in on this process.
 
void Split (int, int, Communicator &) const
 Wrapper to MPI_Comm_split.
 
void Sum (Data)
 Wrapper for MPI_Allreduce with MPI_SUM (data struct)
 
template<class T>
void Sum (T &buf)
 Wrapper for MPI_Allreduce with MPI_SUM (reference)
 
template<class T>
void Sum (T *buf, int count)
 Wrapper for MPI_Allreduce with MPI_SUM (pointer)
 

Static Public Member Functions

static bool initialized ()
 Tests if MPI library is initialized.
 
static bool plumedHasMPI ()
 Runtime acces to the __PLUMED_HAS_MPI definition.
 

Static Public Attributes

static Status StatusIgnore
 Special status used when status should be ignored.
 

Private Member Functions

void checkNotStandIn () const
 In debug builds, raise an error if this communicator is a stand-in.
 

Static Private Member Functions

template<>
MPI_Datatype getMPIType ()
 
template<>
MPI_Datatype getMPIType ()
 
template<>
MPI_Datatype getMPIType ()
 
template<>
MPI_Datatype getMPIType ()
 
template<>
MPI_Datatype getMPIType ()
 
template<>
MPI_Datatype getMPIType ()
 
template<>
MPI_Datatype getMPIType ()
 
template<>
MPI_Datatype getMPIType ()
 
template<>
MPI_Datatype getMPIType ()
 
template<class T>
static MPI_Datatype getMPIType ()
 Function returning the MPI type.
 

Private Attributes

MPI_Comm communicator
 Communicator.
 
bool standIn =false
 True if this process holds the communicator only as a stand-in.
 

Detailed Description

Class containing wrappers to MPI.

All the MPI related stuff is relegated here.

Constructor & Destructor Documentation

◆ Communicator() [1/2]

PLMD::Communicator::Communicator ( )

Default constructor.

◆ Communicator() [2/2]

PLMD::Communicator::Communicator ( const Communicator & pc)

Copy constructor.

It effectively "clones" the communicator, providing a new one acting on the same group

◆ ~Communicator()

PLMD::Communicator::~Communicator ( )
virtual

Destructor.

Member Function Documentation

◆ Abort()

void PLMD::Communicator::Abort ( int code)

Wrapper to MPI_Abort.

Parameters
codeError code

◆ Allgather() [1/3]

template<class T, class S>
void PLMD::Communicator::Allgather ( const T & sendbuf,
S & recvbuf )
inline

Wrapper for MPI_Allgatherv (reference)

◆ Allgather() [2/3]

template<class T, class S>
void PLMD::Communicator::Allgather ( const T * sendbuf,
int sendcount,
S * recvbuf,
int recvcount )
inline

Wrapper for MPI_Allgatherv (pointer)

◆ Allgather() [3/3]

void PLMD::Communicator::Allgather ( ConstData in,
Data out )

Wrapper for MPI_Allgather (data struct)

◆ Allgatherv() [1/3]

template<class T, class S>
void PLMD::Communicator::Allgatherv ( const T & sendbuf,
S & recvbuf,
const int * recvcounts,
const int * displs )
inline

Wrapper for MPI_Allgatherv (reference)

◆ Allgatherv() [2/3]

template<class T, class S>
void PLMD::Communicator::Allgatherv ( const T * sendbuf,
int sendcount,
S * recvbuf,
const int * recvcounts,
const int * displs )
inline

Wrapper for MPI_Allgatherv (pointer)

◆ Allgatherv() [3/3]

void PLMD::Communicator::Allgatherv ( ConstData in,
Data out,
const int * recvcounts,
const int * displs )

Wrapper for MPI_Allgatherv (data struct)

◆ Barrier()

void PLMD::Communicator::Barrier ( ) const

Wrapper to MPI_Barrier.

◆ Bcast() [1/3]

void PLMD::Communicator::Bcast ( Data data,
int root )

Wrapper for MPI_Bcast (data struct)

◆ Bcast() [2/3]

template<class T>
void PLMD::Communicator::Bcast ( T & buf,
int root )
inline

Wrapper for MPI_Bcast (reference)

◆ Bcast() [3/3]

template<class T>
void PLMD::Communicator::Bcast ( T * buf,
int count,
int root )
inline

Wrapper for MPI_Bcast (pointer)

◆ checkNotStandIn()

void PLMD::Communicator::checkNotStandIn ( ) const
private

In debug builds, raise an error if this communicator is a stand-in.

◆ Gather() [1/3]

template<class T, class S>
void PLMD::Communicator::Gather ( const T & sendbuf,
int sendcount,
S & recvbuf,
int recvcount,
int root )
inline

Wrapper for MPI_Gather (reference)

◆ Gather() [2/3]

template<class T, class S>
void PLMD::Communicator::Gather ( const T * sendbuf,
int sendcount,
S * recvbuf,
int recvcount,
int root )
inline

Wrapper for MPI_Gather (pointer)

◆ Gather() [3/3]

void PLMD::Communicator::Gather ( ConstData sendbuf,
int sendcount,
Data recvbuf,
int recvcount,
int root )

Wrapper for MPI_Gather (data struct)

◆ Get_comm()

MPI_Comm & PLMD::Communicator::Get_comm ( )

Reference to MPI communicator.

◆ Get_rank()

int PLMD::Communicator::Get_rank ( ) const

Obtain the rank of the present process.

◆ Get_size()

int PLMD::Communicator::Get_size ( ) const

Obtain the number of processes.

◆ getMPIType() [1/10]

template<>
MPI_Datatype PLMD::Communicator::getMPIType ( )
staticprivate

◆ getMPIType() [2/10]

template<>
MPI_Datatype PLMD::Communicator::getMPIType ( )
staticprivate

◆ getMPIType() [3/10]

template<>
MPI_Datatype PLMD::Communicator::getMPIType ( )
staticprivate

◆ getMPIType() [4/10]

template<>
MPI_Datatype PLMD::Communicator::getMPIType ( )
staticprivate

◆ getMPIType() [5/10]

template<>
MPI_Datatype PLMD::Communicator::getMPIType ( )
staticprivate

◆ getMPIType() [6/10]

template<>
MPI_Datatype PLMD::Communicator::getMPIType ( )
staticprivate

◆ getMPIType() [7/10]

template<>
MPI_Datatype PLMD::Communicator::getMPIType ( )
staticprivate

◆ getMPIType() [8/10]

template<>
MPI_Datatype PLMD::Communicator::getMPIType ( )
staticprivate

◆ getMPIType() [9/10]

template<>
MPI_Datatype PLMD::Communicator::getMPIType ( )
staticprivate

◆ getMPIType() [10/10]

template<class T>
static MPI_Datatype PLMD::Communicator::getMPIType ( )
staticprivate

Function returning the MPI type.

You can use it to access to the MPI type of a C++ type, e.g. MPI_Datatype type=getMPIType<double>();

◆ initialized()

bool PLMD::Communicator::initialized ( )
static

Tests if MPI library is initialized.

◆ Isend() [1/3]

template<class T>
Request PLMD::Communicator::Isend ( const T & buf,
int source,
int tag )
inline

Wrapper for MPI_Isend (reference)

◆ Isend() [2/3]

template<class T>
Request PLMD::Communicator::Isend ( const T * buf,
int count,
int source,
int tag )
inline

Wrapper for MPI_Isend (pointer)

◆ Isend() [3/3]

Communicator::Request PLMD::Communicator::Isend ( ConstData data,
int source,
int tag )

Wrapper for MPI_Isend (data struct)

◆ isStandIn()

bool PLMD::Communicator::isStandIn ( ) const

True if this communicator has been marked as a stand-in with setStandIn().

◆ Max() [1/3]

void PLMD::Communicator::Max ( Data data)

Wrapper for MPI_Allreduce with MPI_MAX (data struct)

◆ Max() [2/3]

template<class T>
void PLMD::Communicator::Max ( T & buf)
inline

Wrapper for MPI_Allreduce with MPI_MAX (reference)

◆ Max() [3/3]

template<class T>
void PLMD::Communicator::Max ( T * buf,
int count )
inline

Wrapper for MPI_Allreduce with MPI_MAX (pointer)

◆ Min() [1/3]

void PLMD::Communicator::Min ( Data data)

Wrapper for MPI_Allreduce with MPI_MIN (data struct)

◆ Min() [2/3]

template<class T>
void PLMD::Communicator::Min ( T & buf)
inline

Wrapper for MPI_Allreduce with MPI_MIN (reference)

◆ Min() [3/3]

template<class T>
void PLMD::Communicator::Min ( T * buf,
int count )
inline

Wrapper for MPI_Allreduce with MPI_MIN (pointer)

◆ operator=()

Communicator & PLMD::Communicator::operator= ( const Communicator & pc)

Assignment operator.

It effectively "clones" the communicator, providing a new one acting on the same group

◆ plumedHasMPI()

bool PLMD::Communicator::plumedHasMPI ( )
static

Runtime acces to the __PLUMED_HAS_MPI definition.

◆ Prod() [1/3]

void PLMD::Communicator::Prod ( Data data)

Wrapper for MPI_Allreduce with MPI_PROD (data struct)

◆ Prod() [2/3]

template<class T>
void PLMD::Communicator::Prod ( T & buf)
inline

Wrapper for MPI_Allreduce with MPI_PROD (reference)

◆ Prod() [3/3]

template<class T>
void PLMD::Communicator::Prod ( T * buf,
int count )
inline

Wrapper for MPI_Allreduce with MPI_PROD (pointer)

◆ Recv() [1/3]

void PLMD::Communicator::Recv ( Data data,
int source,
int tag,
Status & s = StatusIgnore )

Wrapper for MPI_Recv (data struct)

◆ Recv() [2/3]

template<class T>
void PLMD::Communicator::Recv ( T & buf,
int source,
int tag,
Status & s = StatusIgnore )
inline

Wrapper for MPI_Recv (reference)

◆ Recv() [3/3]

template<class T>
void PLMD::Communicator::Recv ( T * buf,
int count,
int source,
int tag,
Status & s = StatusIgnore )
inline

Wrapper for MPI_Recv (pointer)

◆ Scatter() [1/3]

template<class T, class S>
void PLMD::Communicator::Scatter ( const T & sendbuf,
int sendcount,
S & recvbuf,
int recvcount,
int root )
inline

Wrapper for MPI_Scatter (reference)

◆ Scatter() [2/3]

template<class T, class S>
void PLMD::Communicator::Scatter ( const T * sendbuf,
int sendcount,
S * recvbuf,
int recvcount,
int root )
inline

Wrapper for MPI_Scatter (pointer)

◆ Scatter() [3/3]

void PLMD::Communicator::Scatter ( ConstData sendbuf,
int sendcount,
Data recvbuf,
int recvcount,
int root )

Wrapper for MPI_Scatter (data struct)

◆ Set_comm() [1/2]

void PLMD::Communicator::Set_comm ( const TypesafePtr & comm)

Set from a pointer to a real MPI communicator (C).

Parameters
commPointer to a C MPI communicator

◆ Set_comm() [2/2]

void PLMD::Communicator::Set_comm ( MPI_Comm comm)

Set from a real MPI communicator.

Parameters
commMPI communicator

◆ Set_fcomm()

void PLMD::Communicator::Set_fcomm ( const TypesafePtr & comm)

Set from a pointer to a real MPI communicator (FORTRAN).

Parameters
commPointer to a FORTRAN MPI communicator (INTEGER)

◆ setStandIn()

void PLMD::Communicator::setStandIn ( bool s)

Mark this communicator as a stand-in on this process.

A stand-in is a communicator that other processes were given but this process was not, so it does not connect this process to the processes it is meant to connect. This is the case of PLMD::Action::multi_sim_comm on all the processes of a replica except the first one. In debug builds, using a stand-in (asking its rank or size, or communicating over it) raises an error. Set_comm() clears the mark.

◆ Split()

void PLMD::Communicator::Split ( int color,
int key,
Communicator & pc ) const

Wrapper to MPI_Comm_split.

◆ Sum() [1/3]

void PLMD::Communicator::Sum ( Data data)

Wrapper for MPI_Allreduce with MPI_SUM (data struct)

◆ Sum() [2/3]

template<class T>
void PLMD::Communicator::Sum ( T & buf)
inline

Wrapper for MPI_Allreduce with MPI_SUM (reference)

◆ Sum() [3/3]

template<class T>
void PLMD::Communicator::Sum ( T * buf,
int count )
inline

Wrapper for MPI_Allreduce with MPI_SUM (pointer)

Member Data Documentation

◆ communicator

MPI_Comm PLMD::Communicator::communicator
private

◆ standIn

bool PLMD::Communicator::standIn =false
private

True if this process holds the communicator only as a stand-in.

See setStandIn().

◆ StatusIgnore

Communicator::Status PLMD::Communicator::StatusIgnore
static

Special status used when status should be ignored.

E.g. Recv(a,0,1,Communicator::StatusIgnore); Notice that this is the default for Recv, so this is equivalent to Recv(a,0,1);


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