Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Simplyfying create_host and exporting it to s4u::NetZone
authorBruno Donassolo <bruno.donassolo@inria.fr>
Thu, 1 Apr 2021 15:06:20 +0000 (17:06 +0200)
committerBruno Donassolo <bruno.donassolo@inria.fr>
Thu, 1 Apr 2021 15:28:59 +0000 (17:28 +0200)
include/simgrid/kernel/routing/NetZoneImpl.hpp
include/simgrid/s4u/Host.hpp
include/simgrid/s4u/NetZone.hpp
src/kernel/routing/NetZoneImpl.cpp
src/s4u/s4u_Host.cpp
src/s4u/s4u_Netzone.cpp
src/surf/cpu_interface.cpp
src/surf/sg_platf.cpp

index 89ddb84..6853d5c 100644 (file)
@@ -139,7 +139,7 @@ public:
   int get_host_count() const;
 
   /** @brief Make a host within that NetZone */
-  s4u::Host* create_host(const std::string& name, const std::vector<double>& speed_per_pstate, int core_amount);
+  s4u::Host* create_host(const std::string& name, const std::vector<double>& speed_per_pstate);
   /** @brief Create a disk with the disk model from this NetZone */
   s4u::Disk* create_disk(const std::string& name, double read_bandwidth, double write_bandwidth);
   /** @brief Make a link within that NetZone */
index 7aba7b7..3fc3b0c 100644 (file)
@@ -111,6 +111,8 @@ public:
   Host* set_state_profile(kernel::profile::Profile* p);
   Host* set_speed_profile(kernel::profile::Profile* p);
 
+  /** @brief Convert the CPU's speed from string to double */
+  static std::vector<double> convert_pstate_speed_vector(const std::vector<std::string>& speed_per_state);
   /**
    * @brief Set the CPU's speed
    *
index b3d814c..db9b525 100644 (file)
@@ -76,6 +76,16 @@ public:
       on_route_creation;
   static xbt::signal<void(NetZone const&)> on_creation;
   static xbt::signal<void(NetZone const&)> on_seal;
+
+  /**
+   * @brief Create a Host
+   *
+   * @param name  Host name
+   * @param speed_per_state Vector of CPU's speeds
+   */
+  s4u::Host* create_host(const std::string& name, const std::vector<double>& speed_per_pstate);
+  /** @brief Create a Host (string version) */
+  s4u::Host* create_host(const std::string& name, const std::vector<std::string>& speed_per_pstate);
 };
 
 // External constructors so that the types (and the types of their content) remain hidden
index 05a9a87..a5996aa 100644 (file)
@@ -153,8 +153,7 @@ s4u::Link* NetZoneImpl::create_link(const std::string& name, const std::vector<d
   return l->get_iface();
 }
 
-s4u::Host* NetZoneImpl::create_host(const std::string& name, const std::vector<double>& speed_per_pstate,
-                                    int core_amount)
+s4u::Host* NetZoneImpl::create_host(const std::string& name, const std::vector<double>& speed_per_pstate)
 {
   if (hierarchy_ == RoutingMode::unset)
     hierarchy_ = RoutingMode::base;
@@ -162,7 +161,7 @@ s4u::Host* NetZoneImpl::create_host(const std::string& name, const std::vector<d
   auto* res = (new surf::HostImpl(name))->get_iface();
   res->set_netpoint((new NetPoint(name, NetPoint::Type::Host))->set_englobing_zone(this));
 
-  cpu_model_pm_->create_cpu(res, speed_per_pstate)->set_core_count(core_amount);
+  cpu_model_pm_->create_cpu(res, speed_per_pstate);
 
   return res;
 }
index 5dc3074..6878516 100644 (file)
@@ -272,7 +272,7 @@ Host* Host::set_pstate_speed(const std::vector<double>& speed_per_state)
   return this;
 }
 
-Host* Host::set_pstate_speed(const std::vector<std::string>& speed_per_state)
+std::vector<double> Host::convert_pstate_speed_vector(const std::vector<std::string>& speed_per_state)
 {
   std::vector<double> speed_list(speed_per_state.size());
   for (const auto& speed_str : speed_per_state) {
@@ -280,10 +280,15 @@ Host* Host::set_pstate_speed(const std::vector<std::string>& speed_per_state)
       double speed = xbt_parse_get_speed("", 0, speed_str.c_str(), nullptr, "");
       speed_list.push_back(speed);
     } catch (const simgrid::ParseError&) {
-      xbt_die("Host(%s): Impossible to set_pstate_speed, invalid speed %s", get_cname(), speed_str.c_str());
+      xbt_die("Host: Impossible to set_pstate_speed, invalid speed %s", speed_str.c_str());
     }
   }
-  set_pstate_speed(speed_list);
+  return speed_list;
+}
+
+Host* Host::set_pstate_speed(const std::vector<std::string>& speed_per_state)
+{
+  set_pstate_speed(Host::convert_pstate_speed_vector(speed_per_state));
   return this;
 }
 
index 5905229..9660a89 100644 (file)
@@ -118,6 +118,16 @@ void NetZone::extract_xbt_graph(const s_xbt_graph_t* graph, std::map<std::string
 
   pimpl_->get_graph(graph, nodes, edges);
 }
+
+s4u::Host* NetZone::create_host(const std::string& name, const std::vector<double>& speed_per_pstate)
+{
+  return kernel::actor::simcall(
+      [this, &name, &speed_per_pstate] { return pimpl_->create_host(name, speed_per_pstate); });
+}
+s4u::Host* NetZone::create_host(const std::string& name, const std::vector<std::string>& speed_per_pstate)
+{
+  return create_host(name, Host::convert_pstate_speed_vector(speed_per_pstate));
+}
 } // namespace s4u
 } // namespace simgrid
 
index 9d4b575..e15a33c 100644 (file)
@@ -85,6 +85,7 @@ Cpu* Cpu::set_pstate_speed(const std::vector<double>& speed_per_state)
   xbt_assert(speed_per_state.size() > 0, "CPU %s: processor speed vector cannot be empty", get_cname());
   xbt_assert(not is_sealed(), "CPU %s: processor speed cannot be changed once CPU has been sealed", get_cname());
   speed_per_pstate_ = speed_per_state;
+  speed_.peak       = speed_per_pstate_.front();
   return this;
 }
 
index b4bfc7c..0d06ac2 100644 (file)
@@ -63,7 +63,8 @@ void sg_platf_exit()
 /** @brief Add a host to the current NetZone */
 void sg_platf_new_host(const simgrid::kernel::routing::HostCreationArgs* args)
 {
-  simgrid::s4u::Host* host = routing_get_current()->create_host(args->id, args->speed_per_pstate, args->core_amount);
+  simgrid::s4u::Host* host =
+      routing_get_current()->create_host(args->id, args->speed_per_pstate)->set_core_count(args->core_amount);
 
   if (args->properties) {
     host->set_properties(*args->properties);
@@ -418,7 +419,7 @@ void sg_platf_new_peer(const simgrid::kernel::routing::PeerCreationArgs* peer)
 
   std::vector<double> speed_per_pstate;
   speed_per_pstate.push_back(peer->speed);
-  simgrid::s4u::Host* host = zone->create_host(peer->id, speed_per_pstate, 1);
+  simgrid::s4u::Host* host = zone->create_host(peer->id, speed_per_pstate);
 
   zone->set_peer_link(host->get_netpoint(), peer->bw_in, peer->bw_out, peer->coord);