5 #include "mpi/mpi_utils.h" 6 #include "mpi/mpi_common.h" 9 #include "MPIWorkerHandler.h" 13 MPI_Comm MPIWorkerHandler::s_child_comm = MPI_COMM_NULL;
16 const std::string& input_string) :
20 if (s_child_comm == MPI_COMM_NULL)
24 MPI_Send(input_string.c_str(), input_string.size() + 1, MPI_CHAR,
25 WORKER_RANK, MANAGER_MSG_TAG, s_child_comm);
37 if ( !m_result_received &&
38 iprobe_wrapper(WORKER_RANK, WORKER_MSG_TAG, s_child_comm))
47 m_result_received =
true;
50 return m_result_received;
53 std::string MPIWorkerHandler::receiveMessage()
const 55 return receive_string(s_child_comm, WORKER_RANK, WORKER_MSG_TAG);
58 int MPIWorkerHandler::receiveErrorCode()
const 60 return receive_integer(s_child_comm, WORKER_RANK, WORKER_ERROR_CODE_TAG);
63 void MPIWorkerHandler::discardResults()
68 if (!m_result_received)
71 while (!iprobe_wrapper(WORKER_RANK, WORKER_MSG_TAG, s_child_comm))
81 m_result_received =
true;
92 if (s_child_comm == MPI_COMM_NULL)
96 int signal = TERMINATE_WORKER_SIGNAL;
97 MPI_Send(&signal, 1, MPI_INT, WORKER_RANK, MANAGER_SIGNAL_TAG,
101 MPI_Comm_disconnect(&s_child_comm);
const Command m_simulator
std::chrono::milliseconds g_main_timeout
static void terminateStatic()
virtual ~MPIWorkerHandler() override
std::string m_output_buffer
virtual bool isDone() override
MPIWorkerHandler(const Command &simulator, const std::string &input_string)