22 #ifndef INCLUDED_protocols_wum2_MPI_EndPoint_hh
23 #define INCLUDED_protocols_wum2_MPI_EndPoint_hh
26 #include <boost/mpi.hpp>
27 #include <boost/function.hpp>
28 #include <boost/tuple/tuple.hpp>
39 using namespace boost;
47 class MPI_EndPoint :
public EndPoint {
50 MPI_EndPoint( mpi::communicator world,
function< uint64_t () > role_available_mem );
53 int mpi_rank() {
return world_.rank(); }
56 virtual uint64_t current_mem() {
57 return inq_.current_mem() +
58 inbuf_.current_mem() +
60 outbuf_.current_mem();
65 virtual void check_and_act_status_request(
function<
void ( StatusResponse & ,
int ) > functor );
72 virtual void listen_wu_sendrecv( StatusResponse & r,
int requesting_node );
76 virtual void send_status_request(
int rank );
79 virtual void act_on_status_response(
function<
bool ( StatusResponse & r )> functor );
86 virtual bool initiate_wu_sendrecv( StatusResponse & r );
90 virtual void cleanup_reqs();
93 void receive_wus(
int rank, uint64_t mem_size );
96 void send_wus(
int rank, uint64_t mem_size );
99 virtual void check_and_act_clearcommand();
101 virtual bool has_open_status(
int rank ) {
102 return open_status_.count( rank );
107 mpi::communicator world_;
109 WUQueueBuffer inbuf_;
110 WUQueueBuffer outbuf_;
113 std::list< tuple< mpi::request, StatusResponse > > outbound_statusresponse_;
114 std::list< tuple< mpi::request, StatusResponse > > inbound_statusresponse_;
117 std::list< tuple< mpi::request, StatusRequest > > outbound_statusrequest_;
119 std::set<int> open_status_;
122 tuple< mpi::request, int > clearcommand_channel_;
123 tuple< mpi::request, StatusRequest > statusrequest_channel_;