Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Change smpi::Group::set_mapping to take a pid.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Sun, 18 Apr 2021 14:29:22 +0000 (16:29 +0200)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Sun, 18 Apr 2021 21:47:14 +0000 (23:47 +0200)
src/smpi/include/smpi_group.hpp
src/smpi/internals/smpi_actor.cpp
src/smpi/internals/smpi_deployment.cpp
src/smpi/mpi/smpi_comm.cpp
src/smpi/mpi/smpi_group.cpp
src/smpi/mpi/smpi_topo.cpp

index a5f7cd1..f617b06 100644 (file)
@@ -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;
index 767faca..f18b476 100644 (file)
@@ -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_;
 }
index ead9636..61d6761 100644 (file)
@@ -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)
index cc1257b..f5c2647 100644 (file)
@@ -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<MPI_Request> 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);
index 05f8f01..b199d12 100644 (file)
@@ -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<size_t>(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<int> 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<int> 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<int> 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);
   }
index 31864fb..93cf8f0 100644 (file)
@@ -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<Topo>(this));
     }