From: Arnaud Giersch Date: Sun, 18 Apr 2021 14:29:22 +0000 (+0200) Subject: Change smpi::Group::set_mapping to take a pid. X-Git-Tag: v3.28~455^2~3 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/8f52d8360b744ceb8c07a8322b1d7a4194ec73e4 Change smpi::Group::set_mapping to take a pid. --- diff --git a/src/smpi/include/smpi_group.hpp b/src/smpi/include/smpi_group.hpp index a5f7cd1379..f617b065d6 100644 --- a/src/smpi/include/smpi_group.hpp +++ b/src/smpi/include/smpi_group.hpp @@ -37,7 +37,7 @@ public: } explicit Group(const Group* origin); - void set_mapping(s4u::Actor* actor, int rank); + void set_mapping(aid_t pid, int rank); int rank(aid_t pid) const; aid_t actor_pid(int rank) const; s4u::Actor* actor(int rank) const; diff --git a/src/smpi/internals/smpi_actor.cpp b/src/smpi/internals/smpi_actor.cpp index 767faca285..f18b4768ae 100644 --- a/src/smpi/internals/smpi_actor.cpp +++ b/src/smpi/internals/smpi_actor.cpp @@ -178,7 +178,7 @@ MPI_Comm ActorExt::comm_self() auto* group = new Group(1); comm_self_ = new Comm(group, nullptr); comm_self_->set_name("MPI_COMM_SELF"); - group->set_mapping(actor_, 0); + group->set_mapping(actor_->get_pid(), 0); } return comm_self_; } diff --git a/src/smpi/internals/smpi_deployment.cpp b/src/smpi/internals/smpi_deployment.cpp index ead96363ac..61d6761a13 100644 --- a/src/smpi/internals/smpi_deployment.cpp +++ b/src/smpi/internals/smpi_deployment.cpp @@ -66,7 +66,7 @@ void SMPI_app_instance_register(const char *name, xbt_main_func_t code, int num_ void smpi_deployment_register_process(const std::string& instance_id, int rank, simgrid::s4u::Actor* actor) { const Instance& instance = smpi_instances.at(instance_id); - instance.comm_world_->group()->set_mapping(actor, rank); + instance.comm_world_->group()->set_mapping(actor->get_pid(), rank); } void smpi_deployment_unregister_process(const std::string& instance_id) diff --git a/src/smpi/mpi/smpi_comm.cpp b/src/smpi/mpi/smpi_comm.cpp index cc1257ba64..f5c264717e 100644 --- a/src/smpi/mpi/smpi_comm.cpp +++ b/src/smpi/mpi/smpi_comm.cpp @@ -294,7 +294,7 @@ MPI_Comm Comm::split(int color, int key) group_root = group_out; /* Save root's group */ } for (unsigned j = 0; j < rankmap.size(); j++) { - s4u::Actor* actor = group->actor(rankmap[j].second); + aid_t actor = group->actor_pid(rankmap[j].second); group_out->set_mapping(actor, j); } std::vector requests(rankmap.size()); @@ -371,9 +371,9 @@ MPI_Comm Comm::find_intra_comm(int * leader){ int intra_comm_size = 0; int min_index = INT_MAX; // the minimum index will be the leader sg_host_self()->get_impl()->foreach_actor([this, &intra_comm_size, &min_index](auto& actor) { - int index = actor.get_pid(); - if (this->group()->rank(actor.get_ciface()) != MPI_UNDEFINED) { // Is this process in the current group? + if (this->group()->rank(actor.get_pid()) != MPI_UNDEFINED) { // Is this process in the current group? intra_comm_size++; + int index = actor.get_pid(); if (index < min_index) min_index = index; } @@ -382,8 +382,8 @@ MPI_Comm Comm::find_intra_comm(int * leader){ auto* group_intra = new Group(intra_comm_size); int i = 0; sg_host_self()->get_impl()->foreach_actor([this, group_intra, &i](auto& actor) { - if (this->group()->rank(actor.get_ciface()) != MPI_UNDEFINED) { - group_intra->set_mapping(actor.get_ciface(), i); + if (this->group()->rank(actor.get_pid()) != MPI_UNDEFINED) { + group_intra->set_mapping(actor.get_pid(), i); i++; } }); @@ -453,7 +453,7 @@ void Comm::init_smp(){ if(MPI_COMM_WORLD!=MPI_COMM_UNINITIALIZED && this!=MPI_COMM_WORLD){ //create leader_communicator for (i=0; i< leader_group_size;i++) - leaders_group->set_mapping(s4u::Actor::by_pid(leader_list[i]).get(), i); + leaders_group->set_mapping(leader_list[i], i); leader_comm = new Comm(leaders_group, nullptr, true); this->set_leaders_comm(leader_comm); this->set_intra_comm(comm_intra); @@ -461,7 +461,7 @@ void Comm::init_smp(){ // create intracommunicator }else{ for (i=0; i< leader_group_size;i++) - leaders_group->set_mapping(s4u::Actor::by_pid(leader_list[i]).get(), i); + leaders_group->set_mapping(leader_list[i], i); if(this->get_leaders_comm()==MPI_COMM_NULL){ leader_comm = new Comm(leaders_group, nullptr, true); diff --git a/src/smpi/mpi/smpi_group.cpp b/src/smpi/mpi/smpi_group.cpp index 05f8f01554..b199d122a1 100644 --- a/src/smpi/mpi/smpi_group.cpp +++ b/src/smpi/mpi/smpi_group.cpp @@ -24,14 +24,14 @@ Group::Group(const Group* origin) } } -void Group::set_mapping(s4u::Actor* actor, int rank) +void Group::set_mapping(aid_t pid, int rank) { if (0 <= rank && rank < size()) { - aid_t pid = actor->get_pid(); if (static_cast(pid) >= pid_to_rank_map_.size()) pid_to_rank_map_.resize(pid + 1, MPI_UNDEFINED); rank_to_pid_map_[rank] = pid; pid_to_rank_map_[pid] = rank; + s4u::Actor* actor = s4u::Actor::by_pid(pid).get(); rank_to_actor_map_[rank] = actor; actor_to_rank_map_.insert({actor, rank}); } @@ -100,7 +100,7 @@ int Group::compare(const Group* group2) const result = MPI_UNEQUAL; } else { for (int i = 0; i < size(); i++) { - int rank = group2->rank(actor(i)); + int rank = group2->rank(actor_pid(i)); if (rank == MPI_UNDEFINED) { result = MPI_UNEQUAL; break; @@ -122,7 +122,7 @@ int Group::incl(int n, const int* ranks, MPI_Group* newgroup) const *newgroup = new Group(n); for (int i = 0; i < n; i++) { - s4u::Actor* actor = this->actor(ranks[i]); + aid_t actor = this->actor_pid(ranks[i]); (*newgroup)->set_mapping(actor, i); } (*newgroup)->add_f(); @@ -148,7 +148,7 @@ int Group::group_union(const Group* group2, MPI_Group* newgroup) const { std::vector ranks2; for (int i = 0; i < group2->size(); i++) { - s4u::Actor* actor = group2->actor(i); + aid_t actor = group2->actor_pid(i); if (rank(actor) == MPI_UNDEFINED) ranks2.push_back(i); } @@ -162,11 +162,11 @@ int Group::group_union(const Group* group2, MPI_Group* newgroup) const *newgroup = new Group(newsize); int i; for (i = 0; i < size(); i++) { - s4u::Actor* actor1 = actor(i); + aid_t actor1 = actor_pid(i); (*newgroup)->set_mapping(actor1, i); } for (int j : ranks2) { - s4u::Actor* actor2 = group2->actor(j); + aid_t actor2 = group2->actor_pid(j); (*newgroup)->set_mapping(actor2, i); i++; } @@ -178,7 +178,7 @@ int Group::intersection(const Group* group2, MPI_Group* newgroup) const { std::vector ranks2; for (int i = 0; i < group2->size(); i++) { - s4u::Actor* actor = group2->actor(i); + aid_t actor = group2->actor_pid(i); if (rank(actor) != MPI_UNDEFINED) ranks2.push_back(i); } @@ -189,7 +189,7 @@ int Group::difference(const Group* group2, MPI_Group* newgroup) const { std::vector ranks; for (int i = 0; i < size(); i++) { - s4u::Actor* actor = this->actor(i); + aid_t actor = this->actor_pid(i); if (group2->rank(actor) == MPI_UNDEFINED) ranks.push_back(i); } diff --git a/src/smpi/mpi/smpi_topo.cpp b/src/smpi/mpi/smpi_topo.cpp index 31864fb51e..93cf8f03be 100644 --- a/src/smpi/mpi/smpi_topo.cpp +++ b/src/smpi/mpi/smpi_topo.cpp @@ -68,7 +68,7 @@ Topo_Cart::Topo_Cart(MPI_Comm comm_old, int ndims, const int dims[], const int p const Group* oldGroup = comm_old->group(); auto* newGroup = new Group(newSize); for (int i = 0 ; i < newSize ; i++) { - newGroup->set_mapping(oldGroup->actor(i), i); + newGroup->set_mapping(oldGroup->actor_pid(i), i); } *comm_cart = new Comm(newGroup, std::shared_ptr(this)); }