X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/fe304706848f0a64477d4687b3ea97d5b9a0c35c..5d00e5f256a27ccad82ab92aeea7943d2678e85b:/src/smpi/include/smpi_comm.hpp diff --git a/src/smpi/include/smpi_comm.hpp b/src/smpi/include/smpi_comm.hpp index a332a6a1b3..5c9c915cd8 100644 --- a/src/smpi/include/smpi_comm.hpp +++ b/src/smpi/include/smpi_comm.hpp @@ -8,6 +8,7 @@ #include #include +#include "smpi_errhandler.hpp" #include "smpi_keyvals.hpp" #include "smpi_group.hpp" #include "smpi_topo.hpp" @@ -16,38 +17,44 @@ namespace simgrid{ namespace smpi{ class Comm : public F2C, public Keyval{ + friend Topo; MPI_Group group_; - SMPI_Topo_type topoType_; + SMPI_Topo_type topoType_ = MPI_INVALID_TOPO; MPI_Topology topo_; // to be replaced by an union - int refcount_; + int refcount_ = 1; 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 + int* leaders_map_ = nullptr; // who is the leader of each process + int is_uniform_ = 1; + int* non_uniform_map_ = nullptr; // set if smp nodes have a different number of processes allocated + int is_blocked_ = 0; // 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 recursion std::list rma_wins_; // attached windows for synchronization. std::string name_; MPI_Info info_; + int id_; + MPI_Errhandler errhandler_ = MPI_ERRORS_ARE_FATAL; public: static std::unordered_map keyvals_; static int keyval_id_; Comm() = default; - Comm(MPI_Group group, MPI_Topology topo, int smp = 0); + Comm(MPI_Group group, MPI_Topology topo, int smp = 0, int id=MPI_UNDEFINED); 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(); + int id(); void get_name(char* name, int* len); void set_name(const char* name); MPI_Info info(); void set_info( MPI_Info info); + MPI_Errhandler errhandler(); + void set_errhandler( MPI_Errhandler errhandler); void set_leaders_comm(MPI_Comm leaders); void set_intra_comm(MPI_Comm leaders) { intra_comm_ = leaders; }; int* get_non_uniform_map(); @@ -65,7 +72,6 @@ public: static void destroy(MPI_Comm comm); void init_smp(); - int add_f() override; static void free_f(int id); static Comm* f2c(int);