24 xt_initialize(MPI_COMM_WORLD);
26 int global_rank, global_size;
27 MPI_Comm_rank(MPI_COMM_WORLD, &global_rank);
28 MPI_Comm_size(MPI_COMM_WORLD, &global_size);
30 if (global_size != 6) {
31 fprintf(stderr,
"Wrong number of processes (should be 6)\n");
36 int color = MPI_UNDEFINED;
37 MPI_Comm group_comm = MPI_COMM_NULL, main_comm = MPI_COMM_NULL;
38 char const * groupMain =
"main";
39 char const * groups[2];
40 MPI_Comm comms_out[2];
41 switch (global_rank) {
46 groups[0] = groupMain;
47 groups[1] =
"group a";
49 main_comm = comms_out[0];
50 group_comm = comms_out[1];
56 groups[0] =
"group b";
57 groups[1] = groupMain;
59 group_comm = comms_out[0];
60 main_comm = comms_out[1];
73 MPI_Comm ref_group_comm, ref_main_comm;
74 MPI_Comm_split(MPI_COMM_WORLD, color, 0, &ref_group_comm);
75 MPI_Comm_split(MPI_COMM_WORLD, (global_rank == 5)?MPI_UNDEFINED:0, 0,
78 if (ref_group_comm != MPI_COMM_NULL) {
81 MPI_Comm_compare(ref_group_comm, group_comm, &result);
83 if ((result != MPI_CONGRUENT) && (result != MPI_IDENT))
84 PUT_ERR(
"ERROR in yac_cmpi_handshake");
86 MPI_Comm_free(&ref_group_comm);
87 MPI_Comm_free(&group_comm);
89 }
else if (group_comm != MPI_COMM_NULL) {
90 PUT_ERR(
"ERROR in yac_cmpi_handshake");
93 if (ref_main_comm != MPI_COMM_NULL) {
96 MPI_Comm_compare(ref_main_comm, main_comm, &result);
98 if ((result != MPI_CONGRUENT) && (result != MPI_IDENT))
99 PUT_ERR(
"ERROR in yac_cmpi_handshake");
101 MPI_Comm_free(&ref_main_comm);
102 MPI_Comm_free(&main_comm);
104 }
else if (group_comm != MPI_COMM_NULL) {
105 PUT_ERR(
"ERROR in yac_cmpi_handshake");
void yac_cmpi_handshake(MPI_Comm comm, size_t n, char const **group_names, MPI_Comm *group_comms)