#include #include #include #include #define FIRST 0 #define SECOND 1 int main(int argc, char* argv[]) { MPI_Init(&argc, &argv); MPI_Comm spawn, new_comm; MPI_Comm_get_parent(&spawn); if(spawn == MPI_COMM_NULL) { int num_c = atoi(argv[1]); MPI_Comm_spawn(argv[0], MPI_ARGV_NULL, num_c, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &spawn, MPI_ERRCODES_IGNORE); MPI_Intercomm_merge(spawn, FIRST, &new_comm); } else { MPI_Intercomm_merge(spawn, SECOND, &new_comm); MPI_Barrier(MPI_COMM_WORLD); } MPI_Comm_disconnect(&spawn); MPI_Comm_disconnect(&new_comm); MPI_Finalize(); }