Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
a host and not an host
[simgrid.git] / src / s4u / s4u_Host.cpp
index 77ab45f..6c27ca3 100644 (file)
@@ -4,8 +4,9 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "simgrid/kernel/routing/NetPoint.hpp"
+#include "simgrid/s4u/Actor.hpp"
 #include "simgrid/s4u/Engine.hpp"
-#include "src/simix/smx_host_private.hpp"
+#include "simgrid/s4u/Exec.hpp"
 #include "src/surf/HostImpl.hpp"
 
 #include <string>
@@ -48,7 +49,7 @@ Host::~Host()
 
 /** @brief Fire the required callbacks and destroy the object
  *
- * Don't delete directly an Host, call h->destroy() instead.
+ * Don't delete directly a host, call h->destroy() instead.
  *
  * This is cumbersome but this is the simplest solution to ensure that the
  * onDestruction() callback receives a valid object (because of the destructor
@@ -85,8 +86,8 @@ void Host::turn_on()
 {
   if (is_off()) {
     simgrid::simix::simcall([this] {
-      this->pimpl_->turn_on();
       this->pimpl_cpu->turn_on();
+      this->pimpl_->turn_on();
       on_state_change(*this);
     });
   }
@@ -222,7 +223,9 @@ double Host::get_speed() const
   return this->pimpl_cpu->get_speed(1.0);
 }
 /** @brief Returns the current computation load (in flops per second)
+ *
  * The external load (coming from an availability trace) is not taken in account.
+ * You may also be interested in the load plugin.
  */
 double Host::get_load() const
 {
@@ -256,7 +259,7 @@ int Host::get_pstate() const
 
 /**
  * @ingroup simix_storage_management
- * @brief Returns the list of storages attached to an host.
+ * @brief Returns the list of storages attached to a host.
  * @return a vector containing all storages attached to the host
  */
 std::vector<const char*> Host::get_attached_storages() const
@@ -283,14 +286,18 @@ std::unordered_map<std::string, Storage*> const& Host::get_mounted_storages()
   return *mounts_;
 }
 
+ExecPtr Host::exec_async(double flops)
+{
+  return this_actor::exec_init(flops)->set_host(this);
+}
+
 void Host::execute(double flops)
 {
   execute(flops, 1.0 /* priority */);
 }
 void Host::execute(double flops, double priority)
 {
-  smx_activity_t s = simcall_execution_start("", "", flops, 1 / priority /*priority*/, 0. /*bound*/, this);
-  simcall_execution_wait(s);
+  this_actor::exec_init(flops)->set_host(this)->set_priority(1 / priority)->start()->wait();
 }
 
 } // namespace s4u
@@ -511,7 +518,7 @@ int sg_host_is_off(sg_host_t host)
   return host->is_off();
 }
 
-/** @brief Get the properties of an host */
+/** @brief Get the properties of a host */
 xbt_dict_t sg_host_get_properties(sg_host_t host)
 {
   xbt_dict_t as_dict = xbt_dict_new_homogeneous(xbt_free_f);
@@ -604,7 +611,7 @@ void sg_host_dump(sg_host_t host)
   }
 }
 
-/** @brief Return the list of actors attached to an host.
+/** @brief Return the list of actors attached to a host.
  *
  * @param host a host
  * @param whereto a dynar in which we should push actors living on that host
@@ -621,3 +628,8 @@ sg_host_t sg_host_self()
   smx_actor_t process = SIMIX_process_self();
   return (process == nullptr) ? nullptr : process->host_;
 }
+
+double sg_host_load(sg_host_t host)
+{
+  return host->get_load();
+}