+ elapsed_time.stop();
+ if (!check_for_lost_load())
+ exit_status |= EXIT_FAILURE_LOAD;
+
+ XBT_INFO(",----[ Results ]");
+ 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);
+ PR_STATS("Data recv count", data_recv_count);
+ PR_STATS("Ctrl send amount", ctrl_send_amount);
+ PR_STATS("Ctrl recv amount", ctrl_recv_amount);
+ PR_STATS("Ctrl send count", ctrl_send_count);
+ PR_STATS("Ctrl recv count", ctrl_recv_count);
+ PR_VALUE("Total simulated time", "%g", simulated_time);
+ PR_VALUE("Total simulation time", "%g", simulation_time.duration());
+ PR_VALUE("Elapsed (wall clock) time", "%g", elapsed_time.duration());
+ XBT_INFO("`----");
+
+ double load_imbalance = 100.0 * loads.get_stddev() / loads.get_mean();
+ double transfer_amount =
+ data_send_amount.get_sum() / opt::comm_cost(loads.get_sum());
+
+ XBT_INFO(",----[ Useful metrics ]");
+ PR_VALUE("Final load imbalance", "%g %s", load_imbalance,
+ "percent of the load average");
+ PR_VALUE("Data transfer amount", "%g %s", transfer_amount,
+ "times the total amount of data");
+ PR_VALUE("Number of hosts that converged", "%u / %u",
+ convergence.get_count(), loads.get_count());
+ PR_VALUE("Times of convergence (min/max/avg/dev)", "%g / %g / %g / %g",
+ convergence.get_min(), convergence.get_max(),
+ convergence.get_mean(), convergence.get_stddev());
+ PR_STATS("Idle duration", idle_duration);
+ PR_STATS("Supernumer. comp. iter.", iter_deviation);
+ XBT_INFO("`----");
+