X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b8df87e176f27b25534f27d7e240defa32ca35bc..f32336ba61cacec6b0bbd33b90e532f6678748fc:/src/smpi/include/smpi_comm.hpp diff --git a/src/smpi/include/smpi_comm.hpp b/src/smpi/include/smpi_comm.hpp index aaee438204..a71e1f588e 100644 --- a/src/smpi/include/smpi_comm.hpp +++ b/src/smpi/include/smpi_comm.hpp @@ -7,6 +7,7 @@ #define SMPI_COMM_HPP_INCLUDED #include +#include #include "smpi_keyvals.hpp" #include "smpi_group.hpp" #include "smpi_topo.hpp" @@ -15,67 +16,70 @@ namespace simgrid{ namespace smpi{ class Comm : public F2C, public Keyval{ + MPI_Group group_; + SMPI_Topo_type topoType_; + MPI_Topology topo_; // to be replaced by an union + int refcount_; + MPI_Comm leaders_comm_; // inter-node communicator + MPI_Comm intra_comm_; // intra-node communicator . For MPI_COMM_WORLD this can't be used, as var is global. + // use an intracomm stored in the process data instead + int* leaders_map_; // who is the leader of each process + 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 rma_wins_; // attached windows for synchronization. + std::string name_; + MPI_Info info_; - private: - MPI_Group group_; - SMPI_Topo_type topoType_; - MPI_Topology topo_; // to be replaced by an union - int refcount_; - MPI_Comm leaders_comm_;//inter-node communicator - MPI_Comm intra_comm_;//intra-node communicator . For MPI_COMM_WORLD this can't be used, as var is global. - //use an intracomm stored in the process data instead - int* leaders_map_; //who is the leader of each process - 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 rma_wins_; // attached windows for synchronization. +public: + static std::unordered_map keyvals_; + static int keyval_id_; - public: - static std::unordered_map keyvals_; - static int keyval_id_; + Comm() = default; + Comm(MPI_Group group, MPI_Topology topo, int smp = 0); + int dup(MPI_Comm* newcomm); + int dup_with_info(MPI_Info info, MPI_Comm* newcomm); + MPI_Group group(); + MPI_Topology topo() { return topo_; } + int size(); + int rank(); + void get_name(char* name, int* len); + void set_name(const char* name); + MPI_Info info(); + void set_info( MPI_Info info); + void set_leaders_comm(MPI_Comm leaders); + void set_intra_comm(MPI_Comm leaders) { intra_comm_ = leaders; }; + int* get_non_uniform_map(); + int* get_leaders_map(); + MPI_Comm get_leaders_comm(); + 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(); + static void unref(MPI_Comm comm); + static void destroy(MPI_Comm comm); + void init_smp(); - Comm() = default; - Comm(MPI_Group group, MPI_Topology topo, int smp=0); - int dup(MPI_Comm* newcomm); - MPI_Group group(); - MPI_Topology topo(); - int size(); - int rank(); - void get_name (char* name, int* len); - void set_leaders_comm(MPI_Comm leaders); - void set_intra_comm(MPI_Comm leaders); - int* get_non_uniform_map(); - int* get_leaders_map(); - MPI_Comm get_leaders_comm(); - 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(); - static void unref(MPI_Comm comm); - static void destroy(MPI_Comm comm); - void init_smp(); + int add_f() override; + static void free_f(int id); + static Comm* f2c(int); - int add_f() override; - static void free_f(int id); - static Comm* f2c(int); - - static int keyval_create(MPI_Comm_copy_attr_function* copy_fn, MPI_Comm_delete_attr_function* delete_fn, int* keyval, void* extra_state); - static int keyval_free(int* keyval); - static void keyval_cleanup(); - - 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); + static int keyval_create(MPI_Comm_copy_attr_function* copy_fn, MPI_Comm_delete_attr_function* delete_fn, int* keyval, + void* extra_state); + static int keyval_free(int* keyval); + static void keyval_cleanup(); + 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); }; -} -} - +} // namespace smpi +} // namespace simgrid #endif