From: Frederic Suter Date: Fri, 6 Jul 2018 10:14:18 +0000 (+0200) Subject: Revert "address FIXME and kill useless code" X-Git-Tag: v3_21~555 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/bc81bcfcd68831933a508b3fe478eae2d76b6c1a Revert "address FIXME and kill useless code" This reverts commit 4bfa8a32e0083bcd28a78689625c4806c2fbbf46. --- diff --git a/src/smpi/include/smpi_group.hpp b/src/smpi/include/smpi_group.hpp index da9180e595..eb56ba4e4c 100644 --- a/src/smpi/include/smpi_group.hpp +++ b/src/smpi/include/smpi_group.hpp @@ -24,6 +24,7 @@ class Group : public F2C{ */ std::vector rank_to_actor_map_; std::map actor_to_rank_map_; + std::vector index_to_rank_map_; int refcount_; public: @@ -32,6 +33,7 @@ class Group : public F2C{ explicit Group(Group* origin); void set_mapping(simgrid::s4u::ActorPtr actor, int rank); + int rank(int index); simgrid::s4u::ActorPtr actor(int rank); int rank(const simgrid::s4u::ActorPtr process); void ref(); diff --git a/src/smpi/mpi/smpi_group.cpp b/src/smpi/mpi/smpi_group.cpp index 12c412cce1..e3eed4d76e 100644 --- a/src/smpi/mpi/smpi_group.cpp +++ b/src/smpi/mpi/smpi_group.cpp @@ -25,7 +25,7 @@ Group::Group() refcount_ = 1; /* refcount_: start > 0 so that this group never gets freed */ } -Group::Group(int n) : size_(n), rank_to_actor_map_(size_, nullptr) +Group::Group(int n) : size_(n), rank_to_actor_map_(size_, nullptr), index_to_rank_map_(size_, MPI_UNDEFINED) { refcount_ = 1; } @@ -35,6 +35,8 @@ Group::Group(Group* origin) if (origin != MPI_GROUP_NULL && origin != MPI_GROUP_EMPTY) { size_ = origin->size(); refcount_ = 1; + // FIXME: cheinrich: There is no such thing as an index any more; the two maps should be removed + index_to_rank_map_ = origin->index_to_rank_map_; rank_to_actor_map_ = origin->rank_to_actor_map_; actor_to_rank_map_ = origin->actor_to_rank_map_; } @@ -44,6 +46,11 @@ void Group::set_mapping(simgrid::s4u::ActorPtr actor, int rank) { if (0 <= rank && rank < size_) { int index = actor->get_pid(); + if (index != MPI_UNDEFINED) { + if ((unsigned)index >= index_to_rank_map_.size()) + index_to_rank_map_.resize(index + 1, MPI_UNDEFINED); + index_to_rank_map_[index] = rank; + } rank_to_actor_map_[rank] = actor; if (actor != nullptr) { @@ -52,6 +59,17 @@ void Group::set_mapping(simgrid::s4u::ActorPtr actor, int rank) } } +int Group::rank(int index) +{ + int rank; + if (0 <= index && (unsigned)index < index_to_rank_map_.size()) + rank = index_to_rank_map_[index]; + else + rank = MPI_UNDEFINED; + + return rank; +} + simgrid::s4u::ActorPtr Group::actor(int rank) { if (0 <= rank && rank < size_) return rank_to_actor_map_[rank];