92 const char *
buf()
const
133 Communicate(
int argc = 0,
char** argv = NULL,
int procs = (-1));
137 virtual const char *
name()
const
176 bool send(
Message *,
int node,
int tag,
bool delmsg =
true);
198 return MPI_Request();
206 return MPI_Request();
313 virtual bool mysend(
Message *,
int node,
int utag,
int etag);
333 virtual bool resend(
void *buf,
int size,
int node,
int etag);
352 return sizeof(
long long) *
353 ((size +
sizeof(
long long) - 1)/
sizeof(
long long));
360 pos =
static_cast<void *
>(
wordround(size) +
static_cast<char *
>(pos));
364 static inline void pack(
void *packdata,
void * &pos,
int size)
366 memcpy(pos, packdata, size);
371 static inline void unpack(
void * &pos,
void *packdata,
int size)
373 memcpy(packdata, pos, size);
std::ostream & operator<<(std::ostream &, const Communicate &)
constexpr double c
The velocity of light in m/s.
CommSendInfo & operator=(const CommSendInfo &c)
CommSendInfo(const CommSendInfo &c)
CommSendInfo(int size, char *buf, int node)
static void * makebuffer(int size)
virtual MPI_Request raw_isend(void *, int, int, int)
virtual bool mysend(Message *, int node, int utag, int etag)
std::vector< int > Contexts
std::map< MsgNum_t, CommSendInfo > SentCache_t
void request_retransmission(int node, MsgNum_t mnum)
virtual Message * myreceive(int &node, int &tag, int etag)
int getProcesses(const int n, const int c) const
void perform_resend(MsgNum_t mnum)
void remove_single_ok_message(MsgNum_t mnum)
virtual MPI_Request raw_ireceive(char *, int, int, int)
std::vector< MessageData > recMsgList
static void freebuffer(void *buf)
static void addwordround(void *&pos, int size)
Message * receive(int &node, int &tag)
bool send(Message *, int node, int tag, bool delmsg=true)
Message * find_msg(int &, int &)
void send_ok_message(int node, MsgNum_t mnum)
std::vector< MsgNum_t > resendList
std::vector< std::pair< int, MsgNum_t > > informOKList
int find_msg_length(Message &)
virtual void cleanupMessage(void *)
virtual int raw_probe_receive(char *&, int &, int &)
void unpack_retransmission_request(int nitems, void *pos)
virtual int broadcast_others(Message *, int, bool delmsg=true)
int getContexts(const int n) const
std::vector< std::pair< int, MsgNum_t > > requestList
static unsigned int wordround(int size)
void add_to_send_cache(void *pos, MsgNum_t mnum, int size, int node)
Communicate(int argc=0, char **argv=NULL, int procs=(-1))
virtual bool resend(void *buf, int size, int node, int etag)
Message * receive_block(int &node, int &tag)
virtual void mybarrier(void)
std::vector< std::vector< int > > Processes
static void unpack(void *&pos, void *packdata, int size)
virtual ~Communicate(void)
virtual int broadcast_all(Message *, int)
virtual bool raw_send(void *, int, int, int)
std::vector< MsgNum_t > sentOKList
bool add_msg(Message *, int, int)
virtual const char * name() const
static void pack(void *packdata, void *&pos, int size)
void clear_ok_messages(int nitems, void *pos)
Message * unpack_message(int &node, int &tag, void *pos)
void process_resend_requests()
virtual int raw_receive(char *, int, int &, int &)
void fill_msg_buffer(void *, Message &, int, int, int)
MessageData(int n, int t, Message *m)
MessageData(const MessageData &m)