}
}
+#define PR_VALUE(descr, format, ...) \
+ XBT_INFO("| %.*s: " format, DATA_DESCR_WIDTH, \
+ descr ".................................................", \
+ __VA_ARGS__)
+
#define PR_STATS(descr, st) \
XBT_INFO("| %.*s: %g / %g / %g", DATA_DESCR_WIDTH, \
descr " (total/avg./stddev).............................", \
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("Ctrl recv amount", ctrl_recv_amount);
PR_STATS("Ctrl send count", ctrl_send_count);
PR_STATS("Ctrl recv count", ctrl_recv_count);
- XBT_INFO("| %.*s: %g", DATA_DESCR_WIDTH,
- "Total simulated time..................................",
- simulated_time);
- XBT_INFO("| %.*s: %g", DATA_DESCR_WIDTH,
- "Total simulation time.................................",
- simulation_time.duration());
- XBT_INFO("| %.*s: %g", DATA_DESCR_WIDTH,
- "Elapsed (wall clock) time.............................",
- elapsed_time.duration());
+ 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");
XBT_INFO("`----");
+
}
if (exit_status)
XBT_ERROR("Simulation failed (%#x).", exit_status);