OOFEM
2.4
OOFEM.org - Object Oriented Finite Element Solver
|
Class CommunicationBuffer provides abstraction for communication buffer. More...
#include <combuff.h>
Public Member Functions | |
CommunicationBuffer (MPI_Comm comm, int size, bool dynamic=0) | |
CommunicationBuffer (MPI_Comm comm, bool dynamic=0) | |
Constructor. Creates empty buffer, using given communicator for packing. More... | |
virtual | ~CommunicationBuffer () |
Destructor. More... | |
virtual int | resize (int newSize)=0 |
Resizes buffer to given size. More... | |
virtual void | init ()=0 |
Initializes buffer to empty state. More... | |
virtual void | initForPacking ()=0 |
Initialize for packing. More... | |
virtual void | initForUnpacking ()=0 |
Initialize for Unpacking (data already received) More... | |
virtual int | read (bool &data) |
Reads a bool value from data. More... | |
virtual int | write (bool data) |
Writes a bool value. More... | |
virtual int | givePackSizeOfInt (int count) |
virtual int | givePackSizeOfDouble (int count) |
virtual int | givePackSizeOfChar (int count) |
virtual int | givePackSizeOfBool (int count) |
virtual int | givePackSizeOfLong (int count) |
Services for buffer sending/receiving | |
virtual int | iSend (int dest, int tag)=0 |
Starts standard mode, nonblocking send. More... | |
virtual int | iRecv (int source, int tag, int count=0)=0 |
Starts standard mode, nonblocking receive. More... | |
virtual int | testCompletion ()=0 |
Tests if the operation identified by this->request is complete. More... | |
virtual int | waitCompletion ()=0 |
Waits until a completion of a nonblocking communication. More... | |
virtual int | bcast (int root)=0 |
Initializes broadcast over collaborating processes. More... | |
Public Member Functions inherited from oofem::DataStream | |
virtual | ~DataStream () |
Destructor. More... | |
virtual int | read (int *data, int count)=0 |
Reads count integer values into array pointed by data. More... | |
int | read (int &data) |
virtual int | read (unsigned long *data, int count)=0 |
Reads count unsigned long values into array pointed by data. More... | |
int | read (unsigned long &data) |
virtual int | read (long *data, int count)=0 |
Reads count long values into array pointed by data. More... | |
int | read (long &data) |
virtual int | read (double *data, int count)=0 |
Reads count double values into array pointed by data. More... | |
int | read (double &data) |
virtual int | read (char *data, int count)=0 |
Reads count char values into array pointed by data. More... | |
int | read (char &data) |
int | read (std::string &data) |
Reads a string (stored as an int for the length followed by char*). More... | |
virtual int | write (const int *data, int count)=0 |
Writes count integer values from array pointed by data. More... | |
int | write (int data) |
virtual int | write (const unsigned long *data, int count)=0 |
Writes count unsigned long values from array pointed by data. More... | |
int | write (unsigned long data) |
virtual int | write (const long *data, int count)=0 |
Writes count long values from array pointed by data. More... | |
int | write (long data) |
virtual int | write (const double *data, int count)=0 |
Writes count double values from array pointed by data. More... | |
int | write (double data) |
virtual int | write (const char *data, int count)=0 |
Writes count char values from array pointed by data. More... | |
int | write (char data) |
int | write (const std::string &data) |
Reads a string (stored as an int for the length followed by char*). More... | |
int | write (const char *data) |
Writes a string (wrapper needed, otherwise write(bool) is called ) More... | |
Protected Attributes | |
MPI_Comm | communicator |
Class CommunicationBuffer provides abstraction for communication buffer.
buffer is used as input or output buffer to various communication services provided by message parsing libraries. It provides methods for buffer initialization and resizing, methods for packing and/or unpacking data to/from buffer. Multiple messages can be packed/unpacked into/from buffer. The services for packing/unpacking take care about multiple messages stored, they maintain proper current buffer position for data inserting/retrieval. Interface to low level message parsing function is provided, allowing to send and receive buffer to selected destination.
|
inline |
|
inline |
|
inlinevirtual |
Destructor.
Definition at line 221 of file combuff.h.
References oofem::DataStream::read(), and oofem::DataStream::write().
|
pure virtual |
Initializes broadcast over collaborating processes.
The whole buffer size is broadcasted. All buffers participating in broadcast should have the same size.
root | Rank of broadcast root. |
Implemented in oofem::StaticCommunicationBuffer, and oofem::DynamicCommunicationBuffer.
|
virtual |
Implements oofem::DataStream.
Definition at line 292 of file combuff.C.
Referenced by oofem::ProcessCommunicatorBuff::givePackSizeOfBool().
|
virtual |
Implements oofem::DataStream.
Definition at line 285 of file combuff.C.
Referenced by oofem::ProcessCommunicatorBuff::givePackSizeOfChar().
|
virtual |
Implements oofem::DataStream.
Definition at line 278 of file combuff.C.
Referenced by oofem::ProcessCommunicatorBuff::givePackSizeOfDouble().
|
virtual |
Implements oofem::DataStream.
Definition at line 271 of file combuff.C.
Referenced by oofem::ProcessCommunicatorBuff::givePackSizeOfInt(), oofem::NonlocalMaterialWTP::migrate(), oofem::FETICommunicator::setUpCommunicationMaps(), oofem::FETISolver::setUpCommunicationMaps(), and oofem::FETISolver::solve().
|
virtual |
Implements oofem::DataStream.
Definition at line 299 of file combuff.C.
Referenced by oofem::ProcessCommunicatorBuff::givePackSizeOfLong().
|
pure virtual |
Initializes buffer to empty state.
All packed data are lost.
Implemented in oofem::StaticCommunicationBuffer, and oofem::DynamicCommunicationBuffer.
Referenced by oofem::ProcessCommunicatorBuff::initRecvBuff(), and oofem::ProcessCommunicatorBuff::initSendBuff().
|
pure virtual |
Initialize for packing.
Implemented in oofem::StaticCommunicationBuffer, and oofem::DynamicCommunicationBuffer.
Referenced by oofem::ProcessCommunicatorBuff::initForPacking().
|
pure virtual |
Initialize for Unpacking (data already received)
Implemented in oofem::StaticCommunicationBuffer, and oofem::DynamicCommunicationBuffer.
Referenced by oofem::ProcessCommunicatorBuff::initForUnpacking().
|
pure virtual |
Starts standard mode, nonblocking receive.
The buffer must be large enough to receive all data.
source | Rank of source. |
tag | Message tag. |
count | Number of elements to receive (bytes). Causes receive buffer to resize to count elements. If zero (default value) buffer is not resized. |
Implemented in oofem::StaticCommunicationBuffer, and oofem::DynamicCommunicationBuffer.
Referenced by oofem::Natural2GlobalOrdering::init(), and oofem::ProcessCommunicatorBuff::initReceive().
|
pure virtual |
Starts standard mode, nonblocking send.
dest | Rank of destination. |
tag | Message tag. |
Implemented in oofem::StaticCommunicationBuffer, and oofem::DynamicCommunicationBuffer.
Referenced by oofem::Natural2GlobalOrdering::init(), and oofem::ProcessCommunicatorBuff::initSend().
|
virtual |
Reads a bool value from data.
Implements oofem::DataStream.
Definition at line 257 of file combuff.C.
Referenced by oofem::Natural2GlobalOrdering::init(), oofem::FETISolver::masterUnpackQQProduct(), oofem::FETISolver::masterUnpackRBM(), oofem::ProcessCommunicatorBuff::read(), oofem::FETISolver::unpackDirectionVector(), oofem::FETISolver::unpackGammas(), oofem::FETISolver::unpackPPVector(), oofem::FETISolver::unpackResiduals(), oofem::FETISolver::unpackSolution(), and oofem::StaticCommunicationBuffer::write().
|
pure virtual |
Resizes buffer to given size.
If buffer size is to be enlarged, then previously packed data are kept in new buffer. Otherwise buffer is cleared using init service. Current implementation only performs buffer growing, request for size decrease is ignored to avoid reallocation if further request for growing is encountered.
newSize | New buffer size in bytes. |
Implemented in oofem::StaticCommunicationBuffer, and oofem::DynamicCommunicationBuffer.
Referenced by oofem::Natural2GlobalOrdering::init(), oofem::ProcessCommunicatorBuff::resizeReceiveBuffer(), and oofem::ProcessCommunicatorBuff::resizeSendBuffer().
|
pure virtual |
Tests if the operation identified by this->request is complete.
In such case, true is returned and if communication was initiated by nonblocking send/receive, then request handle is set to MPI_REQUEST_NULL. Otherwise call returns flag=false.
Implemented in oofem::StaticCommunicationBuffer, and oofem::DynamicCommunicationBuffer.
Referenced by oofem::ProcessCommunicatorBuff::receiveCompleted(), oofem::ProcessCommunicatorBuff::sendCompleted(), and oofem::ProcessCommunicatorBuff::testCompletion().
|
pure virtual |
Waits until a completion of a nonblocking communication.
The completion of a send operation indicates that the sender is now free to update the locations in the send buffer, the completion of a receive operation indicates that the receive buffer contains the received message, the receiver is now free to access it, and that the status object is set. If the communication object associated with this request was created (nonblocking send or receive call), then the object is deallocated by the call to MPI_WAIT and the request handle is set to MPI_REQUEST_NULL.
Implemented in oofem::StaticCommunicationBuffer, and oofem::DynamicCommunicationBuffer.
Referenced by oofem::ProcessCommunicatorBuff::waitCompletion().
|
virtual |
Writes a bool value.
Implements oofem::DataStream.
Definition at line 265 of file combuff.C.
Referenced by oofem::Natural2GlobalOrdering::init(), oofem::StaticCommunicationBuffer::initForUnpacking(), oofem::FETISolver::packDirectionVector(), oofem::FETISolver::packGammas(), oofem::FETISolver::packPPVector(), oofem::FETISolver::packQQProducts(), oofem::FETISolver::packRBM(), oofem::FETISolver::packResiduals(), oofem::FETISolver::packSolution(), and oofem::ProcessCommunicatorBuff::write().
|
protected |
Definition at line 211 of file combuff.h.
Referenced by oofem::DynamicCommunicationBuffer::allocateNewPacket(), oofem::DynamicCommunicationBuffer::giveFitSize(), oofem::DynamicCommunicationBuffer::iRecv(), oofem::DynamicCommunicationBuffer::iSend(), and oofem::DynamicCommunicationBuffer::receiveCompleted().