13 #include "AbstractMaster.h" 53 virtual bool isActive()
const override;
74 virtual void flush()
override;
80 static std::string
help();
110 virtual void iterate()
override;
123 enum state_t { normal, flushing, terminated };
127 void doNormalStuff();
130 void doFlushingStuff();
133 void listenToManagers();
139 void delegateToManagers();
146 void discardMessagesErrorCodesAndSignals();
149 bool probeMessage()
const;
152 bool probeSignal()
const;
155 int probeMessageManager()
const;
158 int probeSignalManager()
const;
161 std::string receiveMessage(
int manager_rank)
const;
164 int receiveSignal(
int manager_rank)
const;
167 int receiveErrorCode(
int manager_rank)
const;
170 void sendMessageToManager(
int manager_rank,
171 const std::string& message_string);
174 void sendSignalToAllManagers(
int signal);
178 state_t m_state = normal;
181 const int m_comm_size;
184 bool m_master_manager_terminated =
false;
187 bool m_worker_flushed =
false;
190 std::set<int> m_idle_managers;
193 std::vector<TaskHandler*> m_map_manager_to_task;
196 std::queue<TaskHandler> m_finished_tasks;
199 std::queue<TaskHandler> m_busy_tasks;
202 std::queue<TaskHandler> m_pending_tasks;
205 std::vector<std::string> m_message_buffers;
208 std::vector<MPI_Request> m_message_requests;
215 std::vector<MPI_Request> m_signal_requests;
218 bool m_entered =
false;
221 #endif // MPIMASTER_H virtual void terminate() override
virtual void iterate() override
virtual TaskHandler & frontFinishedTask() override
virtual void pushPendingTask(const std::string &input_string) override
virtual ~MPIMaster() override
virtual bool isActive() const override
virtual void popFinishedTask() override
static void run(controller_t controller, const Arguments &args)
virtual bool needMorePendingTasks() const override
virtual bool finishedTasksEmpty() const override
virtual void flush() override
static std::string help()
MPIMaster(bool *p_program_terminated)
static void addLongOptions(LongOptions &lopts)