Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[DVFS] Add two comments
[simgrid.git] / src / plugins / host_dvfs.cpp
index 4cb1f04..3e1b9f2 100644 (file)
@@ -6,9 +6,12 @@
 #include "simgrid/plugins/dvfs.h"
 #include "simgrid/plugins/load.h"
 #include "simgrid/s4u/Engine.hpp"
+#include "src/internal_config.h" // HAVE_SMPI
 #include "src/kernel/activity/ExecImpl.hpp"
 #include "src/plugins/vm/VirtualMachineImpl.hpp"
+#if HAVE_SMPI
 #include "src/smpi/plugins/ampi/ampi.hpp"
+#endif
 #include <xbt/config.hpp>
 
 #include <boost/algorithm/string.hpp>
@@ -258,7 +261,7 @@ private:
   double comp_counter = 0;
   double comp_timer   = 0;
 
-  std::vector<std::vector<double>> rates;
+  std::vector<std::vector<double>> rates; // Each host + all frequencies of that host
 
   unsigned int task_id   = 0;
   bool iteration_running = false; /*< Are we currently between iteration_in and iteration_out calls? */
@@ -267,6 +270,7 @@ public:
   explicit Adagio(simgrid::s4u::Host* ptr)
       : Governor(ptr), rates(100, std::vector<double>(ptr->get_pstate_count(), 0.0))
   {
+#if HAVE_SMPI
     simgrid::smpi::plugin::ampi::on_iteration_in.connect([this](simgrid::s4u::ActorPtr actor) {
       // Every instance of this class subscribes to this event, so one per host
       // This means that for any actor, all 'hosts' are normally notified of these
@@ -282,6 +286,7 @@ public:
         task_id           = 0;
       }
     });
+#endif
     simgrid::kernel::activity::ExecImpl::on_creation.connect([this](simgrid::kernel::activity::ExecImplPtr activity) {
       if (activity->host_ == get_host())
         pre_task();
@@ -293,6 +298,8 @@ public:
         comp_timer += activity->surf_action_->get_finish_time() - activity->surf_action_->get_start_time();
       }
     });
+    // FIXME I think that this fires at the same time for all hosts, so when the src sends something,
+    // the dst will be notified even though it didn't even arrive at the recv yet
     simgrid::s4u::Link::on_communicate.connect(
         [this](kernel::resource::NetworkAction* action, s4u::Host* src, s4u::Host* dst) {
           if ((get_host() == src || get_host() == dst) && iteration_running) {
@@ -331,7 +338,6 @@ public:
       for (int i = 1; i < get_host()->get_pstate_count(); i++) {
         rates[task_id][i] = rates[task_id][0] * (get_host()->get_pstate_speed(i) / get_host()->get_speed());
       }
-      is_initialized = true;
     }
 
     for (int pstate = get_host()->get_pstate_count() - 1; pstate >= 0; pstate--) {