/* manager */ #include "mpi.h" #include using namespace std; int main(int argc, char *argv[]) { int world_size, size, rank; MPI_Comm everyone_intercomm, comm, newintercomm; /* intercommunicator */ MPI_Comm everyone_intracomm, client_Server_Intracomm; /* communicator */ char port[MPI_MAX_PORT_NAME]; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &world_size); MPI_Open_port(MPI_INFO_NULL, port); printf("the port name is <%s>\n", port); fflush(stdout); MPI_Comm_accept(port, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &comm); printf("connection accepted!\n"); fflush(stdout); MPI_Intercomm_merge(comm, 0, &client_Server_Intracomm); MPI_Comm_spawn("worker.exe", MPI_ARGV_NULL, 1, MPI_INFO_NULL, 0, client_Server_Intracomm, &newintercomm, MPI_ERRCODES_IGNORE); MPI_Intercomm_merge(newintercomm, 0, &everyone_intracomm); MPI_Comm_size(everyone_intracomm, &size); MPI_Comm_rank(everyone_intracomm, &rank); //printf("Manager's rank %d; intracomm's size %d\n", rank, size); fflush(stdout); printf("[%d/%d] Manager process", rank, size); fflush(stdout); MPI_Close_port(port); MPI_Comm_disconnect(&comm); MPI_Finalize(); return 0; }