#include "tracing.h"
#include "version.h"
-#define DATA_DESCR_WIDTH 37
+#define DATA_DESCR_WIDTH 39
namespace {
// Failure exit status
statistics loads;
statistics comps;
statistics comp_iterations;
+ statistics all_comp_iterations;
statistics data_send_amount;
statistics data_recv_amount;
statistics data_send_count;
loads.push(proc->get_real_load());
comps.push(proc->get_comp_amount());
comp_iterations.push(proc->get_comp_iter());
+ all_comp_iterations.push(proc->get_all_comp_iter());
data_send_amount.push(proc->get_data_send_amount());
data_recv_amount.push(proc->get_data_recv_amount());
data_send_count.push(proc->get_data_send_count());
#define PR_STATS(descr, st) \
XBT_INFO("| %.*s: %g / %g / %g", DATA_DESCR_WIDTH, \
- descr " (total/avg./stddev)................................", \
+ descr " (total/avg./stddev).............................", \
st.get_sum(), st.get_mean(), st.get_stddev())
int main(int argc, char* argv[])
PR_STATS("Load", loads);
PR_STATS("Computation", comps);
PR_STATS("Comp. iterations", comp_iterations);
+ PR_STATS("X-Comp. iterations", all_comp_iterations);
PR_STATS("Data send amount", data_send_amount);
PR_STATS("Data recv amount", data_recv_amount);
PR_STATS("Data send count", data_send_count);
close_received = false;
finalizing = false;
- comp_iter = lb_iter = 0;
+ all_comp_iter = comp_iter = lb_iter = 0;
lb_thread = new_msg_thread("loba",
std::bind(&process::load_balance_loop, this));
"received_load is %g, but should be 0.0 !", received_load);
if (opt::log_rate < 0)
return;
- XBT_INFO("Final load after %d:%d iterations: %g",
- lb_iter, comp_iter, real_load);
+ XBT_INFO("Final load after %d:%d:%d iterations: %g",
+ lb_iter, comp_iter, all_comp_iter, real_load);
XBT_VERB("Expected load was: %g", expected_load);
XBT_VERB("Total computation for this process: %g", get_comp_amount());
print_loads(true, xbt_log_priority_debug);
// nothing to do with opt::bookkeeping
if (opt::log_rate && lb_iter % opt::log_rate == 0) {
- XBT_INFO("(%u:%u) current load: %g", lb_iter, comp_iter, real_load);
+ XBT_INFO("(%u:%u:%u) current load: %g",
+ lb_iter, comp_iter, all_comp_iter, real_load);
XBT_VERB("... expected load: %g", expected_load);
}
std::bind(&process::data_send, this, _1));
mutex.release();
+ ++all_comp_iter;
if (real_load == 0.0)
continue;
double get_real_load() const { return real_load; }
double get_comp_amount() const { return acc.comp_amount; }
unsigned get_comp_iter() const { return comp_iter; }
+ unsigned get_all_comp_iter() const { return all_comp_iter; }
double get_data_send_amount() const { return acc.data_send.amount; }
double get_data_recv_amount() const { return acc.data_recv.amount; }
unsigned get_data_send_count() const { return acc.data_send.count; }
unsigned lb_iter; // counter of load-balancing iterations
unsigned comp_iter; // counter of computation iterations
+ unsigned all_comp_iter; // counter of computation iterations
+ // (counting empty iterations too)
double prev_load_broadcast; // used to ensure that we do not send
// a same information messages