// fixme: find better defaults
cost_func comp_cost("1e9, 0");
cost_func comm_cost("1, 0");
+ double min_iter_duration = 1.0;
// Parameters for the end of the simulation
// fixme: find better defaults
const char* opt_helper::descr(const char* str)
{
- const int descr_width = 35;
+ const int descr_width = 40;
std::string& res = descr_str;
res = str;
res.resize(descr_width, '.');
int c;
opterr = 0;
- while ((c = getopt(*argc, argv, "a:bc:C:ehi:I:l:L:N:T:vV")) != -1) {
+ while ((c = getopt(*argc, argv, "a:bc:C:ehi:I:l:L:N:s:T:vV")) != -1) {
switch (c) {
case 'a':
opt::loba_algo = optarg;
case 'N':
std::istringstream(optarg) >> opt::auto_depl::nhosts;
break;
+ case 's':
+ std::istringstream(optarg) >> opt::min_iter_duration;
+ break;
case 'T':
opt::auto_depl::topology = optarg;
result = opt_helper::nol_find_prefix(opt::topologies, "topology",
DESCR("bookkeeping", "%s", h.on_off(bookkeeping));
DESCR("computation cost factors", "[%s]", comp_cost.to_string().c_str());
DESCR("communication cost factors", "[%s]", comm_cost.to_string().c_str());
+ DESCR("minimum duration between iterations", "%g", min_iter_duration);
DESCR("maximum number of comp. iterations", "%s",
h.val_or_string(comp_maxiter, "infinity"));
DESCR("maximum number of lb. iterations", "%s",
std::clog << o("-C [fn,...]f0")
<< "polynomial factors for communication cost"
<< " (" << opt::comm_cost.to_string() << ")\n";
+ std::clog << o("-s value")
+ << "minimum duration between iterations"
+ << " (" << opt::min_iter_duration << ")\n";
std::clog << "\nParameters for the end of the simulation\n";
std::clog << o("-i value")
int process::run()
{
+ double next_iter_after_date = 0.0;
INFO1("Initial load: %g", load);
VERB0("Starting...");
comp_iter = lb_iter = 0;
while (true) {
+ if (opt::min_iter_duration) {
+ double now = MSG_get_clock();
+ if (now < next_iter_after_date){
+ double delay = next_iter_after_date - now;
+ DEBUG1("sleeping for %g s", delay);
+ MSG_process_sleep(next_iter_after_date - now);
+ }
+ next_iter_after_date = MSG_get_clock() + opt::min_iter_duration;
+ }
+
if (load > 0.0) {
++comp_iter;
if (opt::log_rate && comp_iter % opt::log_rate == 0) {