-/* Copyright (c) 2010-2018. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2010-2019. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#include <xbt/config.hpp>
#include <boost/algorithm/string.hpp>
+#if HAVE_SMPI
+#include "src/smpi/include/smpi_request.hpp"
+#endif
SIMGRID_REGISTER_PLUGIN(host_dvfs, "Dvfs support", &sg_host_dvfs_plugin_init)
[](double val){if (val != 0.1) sg_host_dvfs_plugin_init();});
static simgrid::config::Flag<std::string> cfg_governor("plugin/dvfs/governor",
- "Which Governor should be used that adapts the CPU frequency?", "performance",
+ "Which Governor should be used that adapts the CPU frequency?",
+ "performance",
- std::map<std::string, std::string>({
- {"adagio", "TODO: Doc"},
- {"conservative", "TODO: Doc"},
- {"ondemand", "TODO: Doc"},
- {"performance", "TODO: Doc"},
- {"powersave", "TODO: Doc"},
- }),
+ std::map<std::string, std::string>({
+#if HAVE_SMPI
+ {"adagio", "TODO: Doc"},
+#endif
+ {"conservative", "TODO: Doc"}, {"ondemand", "TODO: Doc"},
+ {"performance", "TODO: Doc"}, {"powersave", "TODO: Doc"},
+ }),
- [](std::string val) { if (val != "performance") sg_host_dvfs_plugin_init(); });
+ [](const std::string& val) {
+ if (val != "performance")
+ sg_host_dvfs_plugin_init();
+ });
-static simgrid::config::Flag<int> cfg_min_pstate("plugin/dvfs/min-pstate", {"plugin/dvfs/min_pstate"},
- "Which pstate is the minimum (and hence fastest) pstate for this governor?", 0,
- [](int index) {});
+static simgrid::config::Flag<int>
+ cfg_min_pstate("plugin/dvfs/min-pstate", {"plugin/dvfs/min_pstate"},
+ "Which pstate is the minimum (and hence fastest) pstate for this governor?", 0);
static const int max_pstate_not_limited = -1;
-static simgrid::config::Flag<int> cfg_max_pstate("plugin/dvfs/max-pstate", {"plugin/dvfs/max_pstate"},
- "Which pstate is the maximum (and hence slowest) pstate for this governor?", max_pstate_not_limited,
- [](int index) {});
+static simgrid::config::Flag<int>
+ cfg_max_pstate("plugin/dvfs/max-pstate", {"plugin/dvfs/max_pstate"},
+ "Which pstate is the maximum (and hence slowest) pstate for this governor?", max_pstate_not_limited);
/** @addtogroup SURF_plugin_load
}
};
+#if HAVE_SMPI
class Adagio : public Governor {
private:
int best_pstate = 0;
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? */
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
task_id = 0;
}
});
-#endif
simgrid::kernel::activity::ExecImpl::on_creation.connect([this](simgrid::kernel::activity::ExecImplPtr activity) {
if (activity->host_ == get_host())
pre_task();
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) {
+ [this](kernel::resource::NetworkAction*, s4u::Host* src, s4u::Host* dst) {
if ((get_host() == src || get_host() == dst) && iteration_running) {
post_task();
}
virtual void update() override {}
};
+#endif
} // namespace dvfs
} // namespace plugin
} // namespace simgrid
} else if (dvfs_governor == "ondemand") {
return std::unique_ptr<simgrid::plugin::dvfs::Governor>(
new simgrid::plugin::dvfs::OnDemand(daemon_proc->get_host()));
- } else if (dvfs_governor == "adagio") {
+ }
+#if HAVE_SMPI
+ else if (dvfs_governor == "adagio") {
return std::unique_ptr<simgrid::plugin::dvfs::Governor>(
new simgrid::plugin::dvfs::Adagio(daemon_proc->get_host()));
- } else if (dvfs_governor == "performance") {
+ }
+#endif
+ else if (dvfs_governor == "performance") {
return std::unique_ptr<simgrid::plugin::dvfs::Governor>(
new simgrid::plugin::dvfs::Performance(daemon_proc->get_host()));
} else if (dvfs_governor == "powersave") {