1 #ifndef __MPIHELPER_H__
2 #define __MPIHELPER_H__
13 #define MPI_WORKER_STATUSUPDATE_TAG 0x11
14 #define MPI_WORKER_FINISHED_TAG 0x12
16 #define MPI_WORKER_FINISHED_ACK_TAG 0x13
20 #define MPI_COWORKER_NEW_JOB_TAG 0x14
24 #define MPI_OPT_NEW_JOB_TAG 0x21
25 #define MPI_OPT_JOB_FINISHED_TAG 0x22
27 #define MPI_OPT_CONVERGED_TAG 0x23
32 #define MPI_WORK_JOBID_TAG 0x41
33 #define MPI_WORK_SIZE_TAG 0x42
35 #define MPI_WORK_SIZE_PARAMS 0x43
38 #define MPI_EXCHANGE_SOL_STATE_TAG 0x51
39 #define MPI_EXCHANGE_SOL_STATE_DATA_TAG 0x52
40 #define MPI_EXCHANGE_SOL_STATE_RES_SIZE_TAG 0x53
41 #define MPI_EXCHANGE_SOL_STATE_RES_TAG 0x54
44 #define MPI_STOP_TAG 0x91
47 #define MPI_EXCHANGE_SERIALIZED_DATA_TAG 0x99
80 template<
class Data_t>
83 std::ostringstream os;
85 size_t buf_size = os.str().length();
87 MPI_Send(&buf_size, 1, MPI_LONG, pid,
90 char *buffer =
new char[buf_size];
91 memcpy(buffer, os.str().c_str(), buf_size);
93 MPI_Send(buffer, buf_size, MPI_CHAR, pid,
99 template<
class Data_t>
104 MPI_Recv(&buf_size, 1, MPI_LONG, pid,
107 char *buffer =
new char[buf_size];
108 MPI_Recv(buffer, buf_size, MPI_CHAR, pid,
137 MPI_Comm comm, MPI_Request *req);
void MPI_Send_serialized(Data_t data, size_t pid, MPI_Comm comm)
std::map< std::string, reqVarInfo_t > reqVarContainer_t
std::pair< size_t *, char * > MPI_ISend_params(Param_t params, size_t pid, MPI_Comm comm, MPI_Request *req)
#define MPI_EXCHANGE_SERIALIZED_DATA_TAG
tag for exchanging serialized data
#define MPI_WORKER_STATUSUPDATE_TAG
notify pilot about worker status
#define MPI_WORKER_FINISHED_TAG
notify pilot that work has been finished and results are ready to collect
void serialize(Param_t params, std::ostringstream &os)
serializes params using Boost archive
#define MPI_OPT_CONVERGED_TAG
optimizer notifies pilot that optimization has converged (EXIT)
void MPI_Send_reqvars(reqVarContainer_t reqvars, size_t pid, MPI_Comm comm)
#define MPI_EXCHANGE_SOL_STATE_RES_SIZE_TAG
#define MPI_EXCHANGE_SOL_STATE_TAG
namedVariableCollection_t Param_t
void deserialize(char *buffer, Param_t ¶ms)
deserializes params using Boost archive
State_t
Worker state is either idle or running.
void MPI_Recv_params(Param_t ¶ms, size_t pid, MPI_Comm comm)
void MPI_Send_params(Param_t params, size_t pid, MPI_Comm comm)
void MPI_Bcast_reqvars(reqVarContainer_t reqvars, size_t root, MPI_Comm comm)
broadcast requested variables to all entities in comm
void MPI_Recv_serialized(Data_t &data, size_t pid, MPI_Comm comm)
void MPI_Recv_reqvars(reqVarContainer_t &reqvars, size_t pid, MPI_Comm comm)
void MPI_Bcast_params(Param_t ¶ms, size_t root, MPI_Comm comm)
broadcast params to all entities in comm
#define MPI_OPT_NEW_JOB_TAG
optimizer sends new job to pilot
#define MPI_OPT_JOB_FINISHED_TAG
pilot tells optimizer that results are ready to collect