21 int comm_rank, comm_size;
22 MPI_Comm_rank(MPI_COMM_WORLD, &comm_rank);
23 MPI_Comm_size(MPI_COMM_WORLD, &comm_size);
27 PUT_ERR(
"ERROR: wrong number of processes\n");
34 PUT_ERR(
"ERROR in yac_group_comm_get_global_rank");
36 PUT_ERR(
"ERROR in yac_group_comm_get_global_size");
38 PUT_ERR(
"ERROR in yac_group_comm_get_rank");
40 PUT_ERR(
"ERROR in yac_group_comm_get_size");
45 world_group_comm, split_rank, &local_group_comm, &remote_group_comm);
47 int group_idx = comm_rank >= split_rank;
49 int ref_group_size[2] = {3, 6};
50 int group_rank_offset[2] = {0, 3};
53 PUT_ERR(
"ERROR in yac_group_comm_get_global_rank");
55 PUT_ERR(
"ERROR in yac_group_comm_get_global_size");
57 PUT_ERR(
"ERROR in yac_group_comm_get_global_rank");
59 PUT_ERR(
"ERROR in yac_group_comm_get_global_size");
62 (comm_rank - group_rank_offset[group_idx]))
63 PUT_ERR(
"ERROR in yac_group_comm_get_rank");
65 PUT_ERR(
"ERROR in yac_group_comm_get_size");
67 (comm_rank - group_rank_offset[group_idx^1]))
68 PUT_ERR(
"ERROR in yac_group_comm_get_rank");
70 PUT_ERR(
"ERROR in yac_group_comm_get_size");
72 double dble_proc_data[9][3] = {{1,2,3},
81 double ref_dble_sum[2][3] = {{1+4+7,2+5+8,3+6+9},
86 double local_dble_proc_data[3];
87 for (
int i = 0;
i < 3; ++
i)
88 local_dble_proc_data[i] = dble_proc_data[comm_rank][i];
90 for (
int i = 0;
i < 3; ++
i)
91 if (fabs(local_dble_proc_data[i] - ref_dble_sum[group_idx][i]) > 1e-9)
92 PUT_ERR(
"ERROR in yac_allreduce_sum_dble");
94 size_t size_t_proc_data[9][2] = {{1,2},
103 size_t size_t_recv_buffer[12];
104 size_t ref_size_t_allgather[2][12] = {{1,2,3,4,5,6},
105 {7,8,9,10,11,12,13,14,15,16,17,18}};
106 size_t ref_size_t_allgather_size[2] = {2*3, 2*6};
109 size_t_proc_data[comm_rank], size_t_recv_buffer, 2, local_group_comm);
110 for (
size_t i = 0;
i < ref_size_t_allgather_size[group_idx]; ++
i)
111 if (size_t_recv_buffer[i] != ref_size_t_allgather[group_idx][i])
112 PUT_ERR(
"ERROR in yac_allgather_size_t");
114 for (
int i = 0;
i < comm_size; ++
i) {
117 if (i == comm_rank) {
121 dble_proc_data[comm_rank], 3, MPI_DOUBLE, i, remote_group_comm);
125 dble_proc_data[comm_rank], 3, MPI_DOUBLE, i, local_group_comm);
130 double bcast_data[3];
132 for (
int j = 0; j < 3; ++j)
133 if (fabs(bcast_data[j] - dble_proc_data[i][j]) > 1e-9)
134 PUT_ERR(
"ERROR in yac_bcast_group");
int yac_group_comm_get_global_rank(struct yac_group_comm group_comm)
int yac_group_comm_get_rank(struct yac_group_comm group_comm)
void yac_group_comm_split(struct yac_group_comm group_comm, int split_rank, struct yac_group_comm *local_group_comm, struct yac_group_comm *remote_group_comm)
int yac_group_comm_get_global_size(struct yac_group_comm group_comm)
struct yac_group_comm yac_group_comm_new(MPI_Comm comm)
void yac_allreduce_sum_dble(double *buffer, int count, struct yac_group_comm group_comm)
int yac_group_comm_get_size(struct yac_group_comm group_comm)
void yac_bcast_group(void *buffer, int count, MPI_Datatype datatype, int root, struct yac_group_comm group_comm)
void yac_allgather_size_t(const size_t *sendbuf, size_t *recvbuf, int count, struct yac_group_comm group_comm)
void yac_group_comm_delete(struct yac_group_comm group_comm)