#include #include "mpi.h" #include #include #include #include #include #include #define VERSION "mpi_spawn" int main(int argc, char* argv[]){ int nchild, my_rank, universe_size = 0,flag; MPI_Comm parent; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); MPI_Comm_get_attr(MPI_COMM_WORLD, MPI_UNIVERSE_SIZE, &universe_size, &flag); fprintf(stderr, "universe=%d\n", universe_size); if(!flag){ fprintf(stderr, "We're Screwed.\n"); MPI_Finalize(); exit(0); } if(universe_size == 1){ MPI_Comm intercomm; int errcodes[10]; if((argc < 2) || (nchild = atoi(argv[1]) <= 0)){ if(my_rank == 0){ fprintf(stderr, "Usage: %s %d\n", argv[0], argc); MPI_Finalize(); exit(0); } } // if(MPI_Comm_get_parent(&parent) != MPI_SUCCESS){ fprintf(stderr, "Master has rank=%d\n", my_rank); if(MPI_Comm_spawn(VERSION, argv, nchild, MPI_INFO_NULL, my_rank, MPI_COMM_WORLD, &intercomm, errcodes) != MPI_SUCCESS) fprintf(stderr, "Spawn failed!\n"); else fprintf(stderr, "Spawn was successful\n"); sleep(10); } else{ fprintf(stderr, "Spawned child has rank=%d\n", my_rank); sleep(10); } MPI_Finalize(); exit(0); }