1#ifndef FPMAS_SERVER_PACK_H
2#define FPMAS_SERVER_PACK_H
10#include "fpmas/utils/log.h"
12namespace fpmas {
namespace synchro {
namespace hard {
43 std::vector<fpmas::api::communication::Request> pending_requests;
67 : comm(comm), termination(termination), mutex_server(mutex_server), link_server(link_server) {
120 FPMAS_LOGV(comm.
getRank(),
"SERVER_PACK",
"wait all...",
"");
126 comm.
waitAll(pending_requests);
127 pending_requests.clear();
149 return pending_requests;
164 FPMAS_LOGV(comm.
getRank(),
"SERVER_PACK",
"wait for send...",
"");
165 bool sent = comm.
test(req);
169 sent = comm.
test(req);
171 FPMAS_LOGV(comm.
getRank(),
"SERVER_PACK",
"Request sent.",
"");
200 FPMAS_LOGV(comm.
getRank(),
"SERVER_PACK",
"wait for response...",
"");
201 bool response_available = mpi.
Iprobe(source,
getEpoch() | tag, status);
203 while(!response_available) {
205 response_available = mpi.
Iprobe(source,
getEpoch() | tag, status);
207 FPMAS_LOGV(comm.
getRank(),
"SERVER_PACK",
"Response available.",
"");
235 FPMAS_LOGV(comm.
getRank(),
"SERVER_PACK",
"wait for response...",
"");
236 bool response_available = comm.
Iprobe(
240 while(!response_available) {
242 response_available = comm.
Iprobe(
246 FPMAS_LOGV(comm.
getRank(),
"SERVER_PACK",
"Response available.",
"");
256 template<
typename MutexServer,
typename LinkServer>
260 LinkServer& link_server;
276 MutexServer& mutex_server, LinkServer& link_server) :
278 mutex_server(mutex_server), link_server(link_server) {
Definition: communication.h:251
virtual bool test(Request &request)=0
virtual void waitAll(std::vector< Request > &requests)=0
static MPI_Datatype IGNORE_TYPE
Definition: communication.h:259
virtual int getRank() const =0
virtual bool Iprobe(MPI_Datatype type, int source, int tag, Status &status)=0
Definition: communication.h:637
virtual bool Iprobe(int source, int tag, Status &status)=0
Definition: mutex_server.h:26
Definition: server_pack.h:39
ServerPackBase(fpmas::api::communication::MpiCommunicator &comm, api::TerminationAlgorithm &termination, api::Server &mutex_server, api::Server &link_server)
Definition: server_pack.h:62
Epoch getEpoch() const override
Definition: server_pack.h:112
void terminate()
Definition: server_pack.h:119
void setEpoch(Epoch epoch) override
Definition: server_pack.h:100
void waitVoidResponse(fpmas::api::communication::MpiCommunicator &comm, int source, api::Tag tag, fpmas::api::communication::Status &status)
Definition: server_pack.h:231
virtual api::Server & linkServer()
Definition: server_pack.h:81
std::vector< fpmas::api::communication::Request > & pendingRequests()
Definition: server_pack.h:148
void waitResponse(fpmas::api::communication::TypedMpi< T > &mpi, int source, api::Tag tag, fpmas::api::communication::Status &status)
Definition: server_pack.h:196
virtual api::Server & mutexServer()
Definition: server_pack.h:74
void handleIncomingRequests() override
Definition: server_pack.h:89
void waitSendRequest(fpmas::api::communication::Request &req)
Definition: server_pack.h:163
Definition: server_pack.h:257
ServerPack(fpmas::api::communication::MpiCommunicator &comm, api::TerminationAlgorithm &termination, MutexServer &mutex_server, LinkServer &link_server)
Definition: server_pack.h:273
LinkServer & linkServer() override
Definition: server_pack.h:285
MutexServer & mutexServer() override
Definition: server_pack.h:281
Definition: server_pack.h:17
api::Epoch getEpoch() const override
Definition: server_pack.h:20
void handleIncomingRequests() override
Definition: server_pack.h:23
void setEpoch(api::Epoch) override
Definition: server_pack.h:19
Definition: client_server.h:161
virtual void handleIncomingRequests()=0
virtual void setEpoch(Epoch epoch)=0
Definition: client_server.h:447
virtual void terminate(Server &server)=0
Epoch
Definition: enums.h:15
Tag
Definition: enums.h:23
Definition: communication.h:162
Definition: communication.h:215