31#ifndef __MASTER_NODE__
32#define __MASTER_NODE__
51 ,
class NeighborStrategy_t
67 MasterNode(MPI_Comm master_comm, std::size_t buf_size_upper_bound, std::size_t dim,
75 MPI_Comm_rank(master_comm, &tmp);
76 myID_ =
static_cast<std::size_t
>(tmp);
78 MPI_Comm_size(master_comm, &tmp);
91 sizeof(
char), MPI_INFO_NULL, master_comm, &
win_);
104 void store(
char *local_state, std::size_t buffer_size) {
107 std::cerr <<
"MasterNode::store(): serialized state (" << buffer_size
109 <<
" bytes), dropping this update" << std::endl;
115 meta.
size = buffer_size;
119 MPI_Win_fence(MPI_MODE_NOPUT,
win_);
122 MPI_Win_fence(MPI_MODE_NOPUT,
win_);
129 MPI_Alloc_mem(
win_bytes_, MPI_INFO_NULL, &buffer);
130 SolutionState_t tmp_states;
134 if (i ==
myID_)
continue;
139 MPI_Get(&hint,
sizeof(
Meta_t), MPI_BYTE, i, 0,
sizeof(
Meta_t), MPI_BYTE,
win_);
140 MPI_Win_fence(0,
win_);
146 MPI_Win_fence(0,
win_);
149 std::memcpy(&meta, buffer,
sizeof(
Meta_t));
156 std::istringstream is(std::string(buffer +
sizeof(
Meta_t), meta.
size));
159 SolutionState_t state;
161 tmp_states.insert(tmp_states.end(), state.begin(), state.end());
166 MPI_Free_mem(buffer);
void writeSolutionState(std::ostream &os, const SolutionState_t &state)
void readSolutionState(std::istream &is, SolutionState_t &state)
void collect(std::ostringstream &states)
collect all best values from all other masters
std::size_t buf_size_upper_bound_
upper bound on the serialized payload (excludes the header)
char * serialized_best_values_
pointer to MPI window holding header (revision + size) and best solution state
std::vector< std::size_t > revision_state_
revision numbers of my neighbors
std::size_t revision_
my solution state revision number
MasterNode(MPI_Comm master_comm, std::size_t buf_size_upper_bound, std::size_t dim, int island_id)
std::set< std::size_t > collectFrom_
neighbors we collect solution states from
std::size_t win_bytes_
total window size in bytes: sizeof(Meta_t) + buf_size_upper_bound_
void store(char *local_state, std::size_t buffer_size)
store my best values