Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Finally use plain ints for f2c keys.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Tue, 27 Oct 2020 21:50:15 +0000 (22:50 +0100)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Tue, 27 Oct 2020 22:43:08 +0000 (23:43 +0100)
src/smpi/include/smpi_f2c.hpp
src/smpi/mpi/smpi_comm.cpp
src/smpi/mpi/smpi_errhandler.cpp
src/smpi/mpi/smpi_f2c.cpp
src/smpi/mpi/smpi_group.cpp
src/smpi/mpi/smpi_request.cpp

index d3f6b92..7acafc0 100644 (file)
@@ -10,7 +10,6 @@
 #define SMPI_F2C_HPP_INCLUDED
 
 #include <unordered_map>
-#include <string>
 
 namespace simgrid{
 namespace smpi{
@@ -19,21 +18,19 @@ class F2C {
   private:
     // We use a single lookup table for every type.
     // Beware of collisions if id in mpif.h is not unique
-    static std::unordered_map<std::string, F2C*>* f2c_lookup_;
+    static std::unordered_map<int, F2C*>* f2c_lookup_;
     static int f2c_id_;
     int my_f2c_id_ = -1;
 
   protected:
-    static std::unordered_map<std::string, F2C*>* f2c_lookup();
-    static void set_f2c_lookup(std::unordered_map<std::string, F2C*>* map);
+    static std::unordered_map<int, F2C*>* f2c_lookup();
+    static void set_f2c_lookup(std::unordered_map<int, F2C*>* map);
     static int f2c_id();
     static void f2c_id_increment();
 
   public:
-    std::string get_my_key() { return get_key(my_f2c_id_); }
-    static std::string get_key(int id) { return std::to_string(id); }
     static void delete_lookup();
-    static std::unordered_map<std::string, F2C*>* lookup();
+    static std::unordered_map<int, F2C*>* lookup();
     F2C();
     virtual ~F2C() = default;
 
index 21dbc86..0d7b5c7 100644 (file)
@@ -510,7 +510,7 @@ MPI_Comm Comm::f2c(int id) {
     return MPI_COMM_WORLD;
   } else if(F2C::f2c_lookup() != nullptr && id >= 0) {
     const auto& lookup = F2C::f2c_lookup();
-    auto comm          = lookup->find(get_key(id));
+    auto comm          = lookup->find(id);
     return comm == lookup->end() ? MPI_COMM_NULL : static_cast<MPI_Comm>(comm->second);
   } else {
     return MPI_COMM_NULL;
@@ -518,7 +518,7 @@ MPI_Comm Comm::f2c(int id) {
 }
 
 void Comm::free_f(int id) {
-  F2C::f2c_lookup()->erase(get_key(id));
+  F2C::f2c_lookup()->erase(id);
 }
 
 void Comm::add_rma_win(MPI_Win win){
index 3c7f9ce..14997b2 100644 (file)
@@ -18,7 +18,7 @@ namespace smpi{
 
 MPI_Errhandler Errhandler::f2c(int id) {
   if(F2C::f2c_lookup() != nullptr && id >= 0) {
-    return static_cast<MPI_Errhandler>(F2C::f2c_lookup()->at(get_key(id)));
+    return static_cast<MPI_Errhandler>(F2C::f2c_lookup()->at(id));
   } else {
     return MPI_ERRHANDLER_NULL;
   }
index 35246a7..bff67c3 100644 (file)
@@ -7,8 +7,6 @@
 #include "private.hpp"
 #include "src/smpi/include/smpi_actor.hpp"
 
-#include <cstdio>
-
 int mpi_in_place_;
 int mpi_bottom_;
 int mpi_status_ignore_;
@@ -17,18 +15,18 @@ int mpi_statuses_ignore_;
 namespace simgrid{
 namespace smpi{
 
-std::unordered_map<std::string, F2C*>* F2C::f2c_lookup_ = nullptr;
+std::unordered_map<int, F2C*>* F2C::f2c_lookup_ = nullptr;
 int F2C::f2c_id_ = 0;
 
 // Keep it non trivially-constructible, or it will break MC+smpi on FreeBSD with Clang (don't ask why)
 F2C::F2C() = default;
 
-std::unordered_map<std::string, F2C*>* F2C::f2c_lookup()
+std::unordered_map<int, F2C*>* F2C::f2c_lookup()
 {
   return f2c_lookup_;
 }
 
-void F2C::set_f2c_lookup(std::unordered_map<std::string, F2C*>* map)
+void F2C::set_f2c_lookup(std::unordered_map<int, F2C*>* map)
 {
   f2c_lookup_ = map;
 }
@@ -45,23 +43,23 @@ void F2C::delete_lookup(){
   delete f2c_lookup_;
 }
 
-std::unordered_map<std::string, F2C*>* F2C::lookup()
+std::unordered_map<int, F2C*>* F2C::lookup()
 {
   return f2c_lookup_;
 }
 
 void F2C::free_f(int id)
 {
-  f2c_lookup_->erase(get_key(id));
+  f2c_lookup_->erase(id);
 }
 
 int F2C::add_f()
 {
   if (f2c_lookup_ == nullptr)
-    f2c_lookup_ = new std::unordered_map<std::string, F2C*>();
+    f2c_lookup_ = new std::unordered_map<int, F2C*>();
 
-  my_f2c_id_=f2c_id_;
-  (*f2c_lookup_)[get_my_key()] = this;
+  my_f2c_id_                 = f2c_id();
+  (*f2c_lookup_)[my_f2c_id_] = this;
   f2c_id_increment();
   return my_f2c_id_;
 }
@@ -69,7 +67,7 @@ int F2C::add_f()
 int F2C::c2f()
 {
   if (f2c_lookup_ == nullptr) {
-    f2c_lookup_ = new std::unordered_map<std::string, F2C*>();
+    f2c_lookup_ = new std::unordered_map<int, F2C*>();
   }
 
   if(my_f2c_id_==-1)
@@ -82,10 +80,10 @@ int F2C::c2f()
 F2C* F2C::f2c(int id)
 {
   if (f2c_lookup_ == nullptr)
-    f2c_lookup_ = new std::unordered_map<std::string, F2C*>();
+    f2c_lookup_ = new std::unordered_map<int, F2C*>();
 
   if(id >= 0){
-    auto comm = f2c_lookup_->find(get_key(id));
+    auto comm = f2c_lookup_->find(id);
     return comm == f2c_lookup_->end() ? nullptr : comm->second;
   }else
     return nullptr;
index c52e2a7..4ad8e2c 100644 (file)
@@ -319,7 +319,7 @@ MPI_Group Group::f2c(int id) {
   if(id == -2) {
     return MPI_GROUP_EMPTY;
   } else if(F2C::f2c_lookup() != nullptr && id >= 0) {
-    return static_cast<MPI_Group>(F2C::f2c_lookup()->at(get_key(id)));
+    return static_cast<MPI_Group>(F2C::f2c_lookup()->at(id));
   } else {
     return MPI_GROUP_NULL;
   }
index 22510d8..193f8ad 100644 (file)
@@ -1119,13 +1119,13 @@ MPI_Request Request::f2c(int id)
 {
   if(id==MPI_FORTRAN_REQUEST_NULL)
     return MPI_REQUEST_NULL;
-  return static_cast<MPI_Request>(F2C::f2c_lookup()->at(get_key(id)));
+  return static_cast<MPI_Request>(F2C::f2c_lookup()->at(id));
 }
 
 void Request::free_f(int id)
 {
   if (id != MPI_FORTRAN_REQUEST_NULL) {
-    F2C::f2c_lookup()->erase(get_key(id));
+    F2C::f2c_lookup()->erase(id);
   }
 }