47 #define __CommunicationPacket_DEFAULT_SIZE 40960
80 virtual void init(MPI_Comm comm);
92 int iSend(MPI_Comm communicator,
int dest,
int tag)
override;
102 int iRecv(MPI_Comm communicator,
int source,
int tag, std::size_t count = 0)
override;
129 int packHeader(MPI_Comm);
130 int unpackHeader(MPI_Comm);
163 std :: list< CommunicationPacket * > :: iterator
recvIt;
184 int resize(std::size_t newSize)
override {
return 1; }
185 void init()
override;
188 void initForPacking()
override;
190 void initForUnpacking()
override;
192 int write(
const int *src, std::size_t n)
override
193 {
return __write(src, n, MPI_INT); }
194 int write(
const long *src, std::size_t n)
override
195 {
return __write(src, n, MPI_LONG); }
196 int write(
const unsigned long *src, std::size_t n)
override
197 {
return __write(src, n, MPI_UNSIGNED_LONG); }
198 int write(
const double *src, std::size_t n)
override
199 {
return __write(src, n, MPI_DOUBLE); }
200 int write(
const char *src, std::size_t n)
override
201 {
return __write(src, n, MPI_CHAR); }
203 int read(
int *dest, std::size_t n)
override
204 {
return __read(dest, n, MPI_INT); }
205 int read(
long *dest, std::size_t n)
override
206 {
return __read(dest, n, MPI_LONG); }
207 int read(
unsigned long *dest, std::size_t n)
override
208 {
return __read(dest, n, MPI_UNSIGNED_LONG); }
209 int read(
double *dest, std::size_t n)
override
210 {
return __read(dest, n, MPI_DOUBLE); }
211 int read(
char *dest, std::size_t n)
override
212 {
return __read(dest, n, MPI_CHAR); }
215 int iSend(
int dest,
int tag)
override;
216 int iRecv(
int source,
int tag, std::size_t count = 0)
override;
217 int bcast(
int root)
override;
226 int testCompletion()
override;
235 int waitCompletion()
override;
244 int receiveCompleted();
247 void popNewRecvPacket();
251 int giveFitSize(MPI_Datatype type,
int availableSpace,
int arrySize);
258 template<
class T >
int __write(T *src,
int n, MPI_Datatype type) {
260 int start_indx = 0, end_indx, _size;
261 int remaining_size = n;
265 end_indx = start_indx + _size;
271 if ( end_indx >= n ) {
278 start_indx = end_indx;
279 remaining_size -= _size;
290 template<
class T >
int __read(T *dest,
int n, MPI_Datatype type) {
292 int start_indx = 0, end_indx, _size;
293 int remaining_size = n;
297 end_indx = start_indx + _size;
303 if ( end_indx >= n ) {
309 start_indx = end_indx;
310 remaining_size -= _size;
CommunicationBuffer(MPI_Comm comm, std::size_t size, bool dynamic=0)
CommunicationPacketPool()
std ::list< CommunicationPacket * > available_packets
~CommunicationPacketPool()
std ::list< CommunicationPacket * > leased_packets
virtual void init(MPI_Comm comm)
int waitCompletion() override
CommunicationPacket(MPI_Comm comm, std::size_t size, int num)
Constructor. Creates buffer of given size, using given communicator for packing.
int iSend(MPI_Comm communicator, int dest, int tag) override
int iRecv(MPI_Comm communicator, int source, int tag, std::size_t count=0) override
virtual int testCompletion()
int write(const long *src, std::size_t n) override
Writes count long values from array pointed by data.
DynamicCommunicationBuffer(MPI_Comm comm, std::size_t size, bool dynamic=0)
Constructor. Creates buffer of given size, using given communicator for packing.
int __read(T *dest, int n, MPI_Datatype type)
int read(int *dest, std::size_t n) override
Reads count integer values into array pointed by data.
std::list< CommunicationPacket * >::iterator recvIt
Iterator to iterate over received packets.
int resize(std::size_t newSize) override
int write(const double *src, std::size_t n) override
Writes count double values from array pointed by data.
int write(const unsigned long *src, std::size_t n) override
Writes count unsigned long values from array pointed by data.
int read(unsigned long *dest, std::size_t n) override
Reads count unsigned long values into array pointed by data.
int active_tag
Active rank and tag (send by initSend,initReceive, and initExchange).
CommunicationPacket * active_packet
Active packet.
int write(const char *src, std::size_t n) override
Writes count char values from array pointed by data.
int write(const int *src, std::size_t n) override
Writes count integer values from array pointed by data.
int read(long *dest, std::size_t n) override
Reads count long values into array pointed by data.
int giveFitSize(MPI_Datatype type, int availableSpace, int arrySize)
static CommunicationPacketPool packetPool
Static packet pool.
int __write(T *src, int n, MPI_Datatype type)
bool completed
Communication completion flag.
int read(char *dest, std::size_t n) override
Reads count char values into array pointed by data.
std ::list< CommunicationPacket * > packet_list
int read(double *dest, std::size_t n) override
Reads count double values into array pointed by data.
CommunicationPacket * allocateNewPacket(int)
std::size_t size
Size and current position in buffer in bytes (sizeof(char)).
MPIBuffer(std::size_t size, bool dynamic=0)
Constructor. Creates buffer of given size, using given communicator for packing.