comp_iter = lb_iter = 0;
- compute_thread = new_msg_thread("compute",
- std::tr1::bind(&process::compute_loop,
- this));
+ lb_thread = new_msg_thread("loba",
+ std::tr1::bind(&process::load_balance_loop,
+ this));
e_xbt_log_priority_t logp = xbt_log_priority_verbose;
if (!LOG_ISENABLED(logp))
process::~process()
{
- delete compute_thread;
+ delete lb_thread;
total_load_exit += real_load;
if (opt::log_rate < 0)
return;
if (opt::log_rate >= 0)
XBT_INFO("Initial load: %g", real_load);
XBT_VERB("Starting...");
- compute_thread->start();
- load_balance_loop();
- compute_thread->wait();
+ lb_thread->start();
+ compute_loop();
+ lb_thread->wait();
XBT_VERB("Done.");
return 0;
}
// send
std::for_each(neigh.begin(), neigh.end(),
bind(&process::ctrl_send, this, _1));
+ prev_load_broadcast = get_load();
sleep_until_date(next_iter_after_date, opt::min_lb_iter_duration);
ctrl_receive(0.0);
}
XBT_VERB("Going to finalize for %s...", __func__);
+ // last send, for not losing load scheduled to be sent
+ std::for_each(neigh.begin(), neigh.end(),
+ bind(&process::data_send, this, _1));
+ finalizing = true;
+ total_load_running -= real_load;
XBT_DEBUG("send DATA_CLOSE to %zu neighbor%s",
neigh.size(), ESSE(neigh.size()));
std::for_each(neigh.begin(), neigh.end(),
} else {
load_to_send = nb.get_to_send();
nb.set_to_send(0.0);
+ // do not update real_load here
}
if (load_to_send > 0.0)
comm.data_send(nb.get_data_mbox(),