statistics comps;
statistics comp_iterations;
statistics all_comp_iterations;
+ statistics iter_deviation;
statistics data_send_amount;
statistics data_recv_amount;
statistics data_send_count;
comps.push(proc->get_comp_amount());
comp_iterations.push(proc->get_comp_iter());
all_comp_iterations.push(proc->get_all_comp_iter());
+ iter_deviation.push(proc->get_iter_deviation());
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());
PR_STATS("Computation", comps);
PR_STATS("Comp. iterations", comp_iterations);
PR_STATS("X-Comp. iterations", all_comp_iterations);
+ PR_STATS("Supernumer. comp. iter.", iter_deviation);
PR_STATS("Idle duration", idle_duration);
PR_STATS("Data send amount", data_send_amount);
PR_STATS("Data recv amount", data_recv_amount);
print_loads(true, xbt_log_priority_debug);
}
+double process::get_iter_deviation() const
+{
+ double average_cost = opt::comp_cost(total_load_average);
+ // Do not count idle periods
+ double comp_iter_opt = acc.comp_amount / average_cost;
+/*
+ // Add iterations that could have been achieved while beeing idle
+ // (kept for documentation)
+ double self_speed = MSG_get_host_speed(MSG_host_self());
+ double average_duration = average_cost / self_speed;
+ comp_iter_opt += idle_duration / average_duration;
+*/
+ return comp_iter - comp_iter_opt;
+}
+
int process::run()
{
if (opt::log_rate >= 0) {
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_iter_deviation() const;
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; }