#include "mpi.h" #include using namespace std; #define TAG_TEST 500 int main(int argc, char** argv) { int commSize, commRank, result; result = MPI_Init(&argc, &argv); if (result != MPI_SUCCESS) { cerr << "Error initializing MPI application!" << endl; MPI_Abort(MPI_COMM_WORLD, -1); } MPI_Comm_size(MPI_COMM_WORLD, &commSize); MPI_Comm_rank(MPI_COMM_WORLD, &commRank); int flag; MPI_Comm masterComm; MPI_Comm_get_parent(&masterComm); int size; MPI_Comm_remote_size(masterComm, &size); if (size != 1) { cerr << "Parent master doesn't have size 1" << endl; return 1; } MPI_Send(&size, 1, MPI_INT, 0, TAG_TEST, masterComm); // spawn slave MPI_Info ourInfo; MPI_Info_create(&ourInfo); MPI_Comm slaveComm; MPI_Comm_spawn("/home/pthyseba/workspace/OCTOPUS/test-slave", MPI_ARGV_NULL, 1, ourInfo, 0, MPI_COMM_SELF, &slaveComm, MPI_ERRCODES_IGNORE); MPI_Status s; int data; for (int i = 0;; i++) { MPI_Iprobe(0, TAG_TEST, slaveComm, &flag, &s); if (flag > 0) { cout << "Worker: message from slave detected after " << i << " probes" << endl; MPI_Recv(&data, 1, MPI_INT, 0, TAG_TEST, slaveComm, &s); break; } } cout << "Worker: received data from slave: " << data << endl; MPI_Finalize(); return 0; }