59 MyMPI(
const MPI_Comm& comm_world,
int nplanes){
61 MPI_Comm_size( comm_world, &
nranks );
64 int ranks_per_plane =
nranks/nplanes;
72 std::vector<int> new_sml_comm_ranks(
nranks);
74 for(
int j=0; j<ranks_per_plane; j++){
75 for(
int i=0; i<nplanes; i++){
76 new_sml_comm_ranks[ranks_per_plane*i + j] = k;
83 MPI_Group mpi_comm_world_group;
84 MPI_Comm_group(comm_world, &mpi_comm_world_group);
87 MPI_Group_incl(mpi_comm_world_group,
nranks, new_sml_comm_ranks.data(), &
group);
90 MPI_Comm_create(comm_world,
group, &
comm);
96 int plane_0_pe=int(
my_rank/ranks_per_plane)*ranks_per_plane;
97 std::vector<int> plane_ranks(ranks_per_plane);
98 for(
int j=0; j<ranks_per_plane; j++){
99 plane_ranks[j]=plane_0_pe + j;
103 MPI_Group plane_group;
104 MPI_Group_incl(
group, ranks_per_plane, plane_ranks.data(), &plane_group);
115 std::vector<int> intpl_ranks(nplanes);
116 for(
int i=0; i<nplanes; i++){
121 MPI_Group intpl_group;
122 MPI_Group_incl(
group, nplanes, intpl_ranks.data(), &intpl_group);
162 template <
typename F>
166 MPI_Comm_rank( comm, &my_rank );
167 MPI_Comm_size( comm, &n_ranks );
174 for(
int i=0; i<n_ranks; i++){
175 if(my_rank==i) func(i);
MPI_Comm SML_COMM_WORLD
Definition: my_mpi.cpp:4
MPI_Comm plane_comm
Definition: my_mpi.hpp:38
MyMPI(const MPI_Comm &comm_world, int nplanes)
Definition: my_mpi.hpp:59
int my_intpl_rank
Definition: my_mpi.hpp:49
int my_rank
Definition: my_mpi.hpp:24
Definition: my_mpi.hpp:19
void create_comm_world(int color)
Definition: my_mpi.cpp:13
int SML_COMM_SIZE
Definition: my_mpi.cpp:6
MPI_Comm comm
Definition: my_mpi.hpp:21
int my_plane_rank
Definition: my_mpi.hpp:39
int n_plane_ranks
Definition: my_mpi.hpp:40
int SML_COMM_RANK
Definition: my_mpi.cpp:5
void execute_in_rank_order(const MPI_Comm &comm, F func)
Definition: my_mpi.hpp:163
MyMPI()
Definition: my_mpi.hpp:57
MPI_Comm intpl_comm
Definition: my_mpi.hpp:48
void destroy_comm_world()
Definition: my_mpi.cpp:28
MPI_Group group
Definition: my_mpi.hpp:22
int nranks
Definition: my_mpi.hpp:23
int n_intpl_ranks
Definition: my_mpi.hpp:50