int is_uniform_;
int* non_uniform_map_; //set if smp nodes have a different number of processes allocated
int is_blocked_;// are ranks allocated on the same smp node contiguous ?
-
+ int is_smp_comm_;// set to 0 in case this is already an intra-comm or a leader-comm to avoid recursivity
std::list<MPI_Win> rma_wins_; // attached windows for synchronization.
public:
static int keyval_id_;
Comm() = default;
- Comm(MPI_Group group, MPI_Topology topo);
+ Comm(MPI_Group group, MPI_Topology topo, int smp=0);
int dup(MPI_Comm* newcomm);
MPI_Group group();
MPI_Topology topo();
MPI_Comm get_intra_comm();
int is_uniform();
int is_blocked();
+ int is_smp_comm();
MPI_Comm split(int color, int key);
void cleanup_smp();
void ref();
void add_rma_win(MPI_Win win);
void remove_rma_win(MPI_Win win);
void finish_rma_calls();
+ MPI_Comm split_type(int type, int key, MPI_Info info);
};