1#ifndef FPMAS_COMMUNICATION_API_H
2#define FPMAS_COMMUNICATION_API_H
10namespace fpmas {
namespace api {
namespace communication {
76 other.buffer = (
char*) std::malloc(0);
112 other.buffer = (
char*) std::malloc(0);
143 buffer = (
char*) std::malloc(0);
166 MPI_Request __mpi_request;
172 Request() : __mpi_request(), __data(
nullptr) {}
180 this->__mpi_request = request.__mpi_request;
181 this->__data = request.__data;
182 request.__data =
nullptr;
192 this->__mpi_request = request.__mpi_request;
193 this->__data = request.__data;
194 request.__data =
nullptr;
205 if(__data!=
nullptr) {
293 const void* data,
int count, MPI_Datatype datatype,
294 int destination,
int tag) = 0;
305 const DataPack& data, MPI_Datatype datatype,
306 int destination,
int tag) = 0;
317 virtual void send(
int destination,
int tag) = 0;
339 const void* data,
int count, MPI_Datatype datatype,
340 int destination,
int tag,
Request& request) = 0;
352 const DataPack& data, MPI_Datatype datatype,
353 int destination,
int tag,
Request& request) = 0;
367 int destination,
int tag,
Request& request) = 0;
393 const void* data,
int count, MPI_Datatype datatype,
394 int destination,
int tag,
Request& request) = 0;
406 const DataPack& data, MPI_Datatype datatype,
407 int destination,
int tag,
Request& request) = 0;
441 virtual void probe(MPI_Datatype type,
int source,
int tag,
Status& status) = 0;
458 virtual bool Iprobe(MPI_Datatype type,
int source,
int tag,
Status& status) = 0;
488 void* buffer,
int count, MPI_Datatype datatype,
489 int source,
int tag,
Status& status) = 0;
501 DataPack& data, MPI_Datatype datatype,
502 int source,
int tag,
Status& status) = 0;
536 virtual void waitAll(std::vector<Request>& requests) = 0;
554 virtual std::unordered_map<int, DataPack>
allToAll(
555 std::unordered_map<int, DataPack> export_map, MPI_Datatype datatype
575 virtual std::vector<DataPack>
592 virtual std::vector<DataPack>
650 virtual std::unordered_map<int, std::vector<T>>
651 migrate(std::unordered_map<
int, std::vector<T>> export_map) = 0;
661 virtual std::unordered_map<int, T>
662 allToAll(std::unordered_map<int, T> export_map) = 0;
674 virtual std::vector<T>
685 virtual std::vector<T>
697 virtual T
bcast(
const T& data,
int root) = 0;
708 virtual void send(
const T& data,
int destination,
int tag) = 0;
720 virtual void Isend(
const T& data,
int destination,
int tag,
Request& req) = 0;
733 virtual void Issend(
const T& data,
int destination,
int tag,
Request& req) = 0;
781 bool operator==(
const DataPack& d1,
const DataPack& d2);
Definition: communication.h:16
std::size_t size
Definition: communication.h:23
void free()
Definition: communication.h:139
DataPack & operator=(DataPack &&other)
Definition: communication.h:106
DataPack(DataPack &&other)
Definition: communication.h:73
DataPack & operator=(const DataPack &other)
Definition: communication.h:89
DataPack(std::size_t count, std::size_t data_size)
Definition: communication.h:41
~DataPack()
Definition: communication.h:151
DataPack()
Definition: communication.h:49
std::size_t count
Definition: communication.h:27
char * buffer
Definition: communication.h:36
void resize(std::size_t count)
Definition: communication.h:130
std::size_t data_size
Definition: communication.h:31
DataPack(const DataPack &other)
Definition: communication.h:60
Definition: communication.h:251
virtual void send(const DataPack &data, MPI_Datatype datatype, int destination, int tag)=0
virtual bool test(Request &request)=0
virtual std::unordered_map< int, DataPack > allToAll(std::unordered_map< int, DataPack > export_map, MPI_Datatype datatype)=0
virtual void waitAll(std::vector< Request > &requests)=0
virtual void Isend(const void *data, int count, MPI_Datatype datatype, int destination, int tag, Request &request)=0
virtual void send(int destination, int tag)=0
virtual void wait(Request &request)=0
virtual void Issend(const void *data, int count, MPI_Datatype datatype, int destination, int tag, Request &request)=0
static MPI_Datatype IGNORE_TYPE
Definition: communication.h:259
virtual int getRank() const =0
virtual void probe(MPI_Datatype type, int source, int tag, Status &status)=0
virtual void Issend(int destination, int tag, Request &request)=0
virtual void recv(void *buffer, int count, MPI_Datatype datatype, int source, int tag, Status &status)=0
virtual void Issend(const DataPack &data, MPI_Datatype datatype, int destination, int tag, Request &request)=0
virtual void recv(int source, int tag, Status &status=Status::IGNORE)=0
virtual bool Iprobe(MPI_Datatype type, int source, int tag, Status &status)=0
virtual std::vector< DataPack > gather(DataPack data, MPI_Datatype datatype, int root)=0
virtual void Isend(const DataPack &data, MPI_Datatype datatype, int destination, int tag, Request &request)=0
virtual void Isend(int destination, int tag, Request &request)=0
virtual std::vector< DataPack > allGather(DataPack data, MPI_Datatype datatype)=0
virtual void recv(DataPack &data, MPI_Datatype datatype, int source, int tag, Status &status)=0
virtual int getSize() const =0
virtual DataPack bcast(DataPack data, MPI_Datatype datatype, int root)=0
virtual void send(const void *data, int count, MPI_Datatype datatype, int destination, int tag)=0
Definition: communication.h:637
virtual void Issend(const T &data, int destination, int tag, Request &req)=0
virtual bool Iprobe(int source, int tag, Status &status)=0
virtual std::unordered_map< int, std::vector< T > > migrate(std::unordered_map< int, std::vector< T > > export_map)=0
virtual T recv(int source, int tag, Status &status=Status::IGNORE)=0
virtual std::vector< T > gather(const T &data, int root)=0
virtual T bcast(const T &data, int root)=0
virtual std::vector< T > allGather(const T &data)=0
virtual void probe(int source, int tag, Status &status)=0
virtual void Isend(const T &data, int destination, int tag, Request &req)=0
virtual std::unordered_map< int, T > allToAll(std::unordered_map< int, T > export_map)=0
virtual void send(const T &data, int destination, int tag)=0
bool operator==(const DataPack &d1, const DataPack &d2)
Definition: communication.cpp:7
Definition: communication.h:162
void free()
Definition: communication.h:204
Request(Request &&request)
Definition: communication.h:179
Request & operator=(Request &&request)
Definition: communication.h:191
Definition: communication.h:215
int tag
Definition: communication.h:236
static Status IGNORE
Definition: communication.h:220
int size
Definition: communication.h:224
int item_count
Definition: communication.h:228
int source
Definition: communication.h:232