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 */
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
*
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
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;
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;
}
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) {
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;
}
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
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;
}
/** @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);
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);