static void do_parent(char *argv[], int rank, int count) { MPI_Comm ab_inter, ab_intra, ac_inter, ac_intra, ab_c_inter, abc_intra; int err; err = spawn_and_merge( argv, cmd_argv1, count, &ab_inter, &ab_intra ); err = spawn_and_merge( argv, cmd_argv2, count, &ac_inter, &ac_intra ); printf( "%s: MPI_Intercomm_create( ab_intra, 0, ac_intra, %d, %d, &inter) (%d)\n", whoami, count, tag, err ); err = MPI_Intercomm_create( ab_intra, 0, ac_intra, count, tag, &ab_c_inter ); printf( "%s: intercomm_create (%d)\n", whoami, err ); printf( "%s: barrier on inter-comm - before\n", whoami ); err = MPI_Barrier(ab_c_inter); printf( "%s: barrier on inter-comm - after\n", whoami ); err = MPI_Intercomm_merge(ab_c_inter, 0, &abc_intra); printf( "%s: intercomm_merge(%d) (%d) [rank %d]\n", whoami, 0, err, rank ); err = MPI_Barrier(abc_intra); printf( "%s: barrier (%d)\n", whoami, err ); MPI_Comm_free(&abc_intra); MPI_Comm_free(&ab_c_inter); MPI_Comm_free(&ab_intra); MPI_Comm_free(&ac_intra); MPI_Comm_disconnect(&ab_inter); MPI_Comm_disconnect(&ac_inter); }
static void do_parent(char *argv[], int rank, int count) { MPI_Comm ab_inter, ab_intra, ac_inter, ac_intra, ab_c_inter, abc_intra; int err; err = spawn_and_merge( argv, cmd_argv1, count, &ab_inter, &ab_intra ); err = spawn_and_merge( argv, cmd_argv2, count, &ac_inter, &ac_intra ); printf( "%s: MPI_Intercomm_create( ab_intra, 0, ac_intra, 0, %d, &inter) (%d)\n", whoami, tag, err ); err = MPI_Intercomm_create( ab_intra, 0, ac_intra, 1, tag, &ab_c_inter ); printf( "%s: intercomm_create (%d)\n", whoami, err ); err = MPI_Intercomm_merge(ab_c_inter, 0, &abc_intra); printf( "%s: intercomm_merge(%d) (%d) [rank %d]\n", whoami, 0, err, rank ); sleep(20); err = MPI_Barrier(abc_intra); printf( "%s: barrier (%d)\n", whoami, err ); }