X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c587485ee2aae6b2c54ed80656cbdc4e3ba8d157..383279258eb62372e08868457f155e2b504f662a:/src/smpi/include/smpi_comm.hpp diff --git a/src/smpi/include/smpi_comm.hpp b/src/smpi/include/smpi_comm.hpp index 06280b2a5b..61a494002c 100644 --- a/src/smpi/include/smpi_comm.hpp +++ b/src/smpi/include/smpi_comm.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2010-2019. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2010-2020. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -8,6 +8,7 @@ #include #include +#include #include "smpi_errhandler.hpp" #include "smpi_keyvals.hpp" #include "smpi_group.hpp" @@ -20,7 +21,7 @@ class Comm : public F2C, public Keyval{ friend Topo; MPI_Group group_; SMPI_Topo_type topoType_ = MPI_INVALID_TOPO; - MPI_Topology topo_; // to be replaced by an union + std::shared_ptr topo_; // to be replaced by an union int refcount_ = 1; MPI_Comm leaders_comm_ = MPI_COMM_NULL; // inter-node communicator MPI_Comm intra_comm_ = MPI_COMM_NULL; // intra-node communicator. For MPI_COMM_WORLD this can't be used, as var is @@ -29,7 +30,8 @@ class Comm : public F2C, public Keyval{ 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 + bool is_smp_comm_ = false; // set to false 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_ = MPI_INFO_NULL; @@ -41,11 +43,12 @@ public: static int keyval_id_; Comm() = default; - Comm(MPI_Group group, MPI_Topology topo, int smp = 0, int id=MPI_UNDEFINED); + Comm(MPI_Group group, MPI_Topology topo, bool smp = false, 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_; } + void set_topo(MPI_Topology topo){topo_=topo;} int size(); int rank(); int id(); @@ -62,9 +65,9 @@ public: MPI_Comm get_leaders_comm(); MPI_Comm get_intra_comm(); MPI_Comm find_intra_comm(int* leader); - int is_uniform(); - int is_blocked(); - int is_smp_comm(); + bool is_uniform(); + bool is_blocked(); + bool is_smp_comm(); MPI_Comm split(int color, int key); void cleanup_smp(); void ref(); @@ -83,7 +86,7 @@ public: 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); + MPI_Comm split_type(int type, int key, const Info* info); }; } // namespace smpi