X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/blobdiff_plain/03a16acd38dfaa266986de5d73f4a90c0ddbfeb1..42f18fc226227e296e7a555539b2f1fc778bc430:/main.cpp diff --git a/main.cpp b/main.cpp index 80a43d9..b50340a 100644 --- a/main.cpp +++ b/main.cpp @@ -1,4 +1,5 @@ #include +#include #include #include // strchr #include @@ -28,7 +29,7 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(main); #include "tracing.h" #include "version.h" -#define DATA_DESCR_WIDTH 37 +#define DATA_DESCR_WIDTH 39 namespace { // Failure exit status @@ -50,6 +51,8 @@ namespace { statistics loads; statistics comps; + statistics comp_iterations; + statistics all_comp_iterations; statistics data_send_amount; statistics data_recv_amount; statistics data_send_count; @@ -58,6 +61,7 @@ namespace { statistics ctrl_recv_amount; statistics ctrl_send_count; statistics ctrl_recv_count; + statistics convergence; } @@ -77,6 +81,8 @@ static int simulation_main(int argc, char* argv[]) proc_mutex->acquire(); 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()); @@ -85,6 +91,9 @@ static int simulation_main(int argc, char* argv[]) ctrl_recv_amount.push(proc->get_ctrl_recv_amount()); ctrl_send_count.push(proc->get_ctrl_send_count()); ctrl_recv_count.push(proc->get_ctrl_recv_count()); + double c = proc->get_convergence(); + if (c != -1.0) + convergence.push(c); // Synchronization barrier... // The goal is to circumvent a limitation in SimGrid (at least @@ -169,9 +178,14 @@ static void install_signal_handler() } } +#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)................................", \ + descr " (total/avg./stddev).............................", \ st.get_sum(), st.get_mean(), st.get_stddev()) int main(int argc, char* argv[]) @@ -251,7 +265,7 @@ int main(int argc, char* argv[]) } else if (opt::auto_depl::load < 0.0) opt::auto_depl::load = -opt::auto_depl::load * opt::auto_depl::nhosts; - double iload = trunc(opt::auto_depl::load); + double iload = std::trunc(opt::auto_depl::load); if (opt::integer_transfer && opt::auto_depl::load != iload) { XBT_WARN("Total load %g is not an integer. Truncate it.", opt::auto_depl::load); @@ -309,9 +323,12 @@ int main(int argc, char* argv[]) 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); @@ -320,16 +337,26 @@ int main(int argc, char* argv[]) 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"); + PR_VALUE("Number of hosts that converged", "%u / %u", + convergence.get_count(), loads.get_count()); + PR_VALUE("Date of first host convergence", "%g", convergence.get_min()); + PR_VALUE("Date of last host convergence", "%g", convergence.get_max()); + XBT_INFO("`----"); + } if (exit_status) XBT_ERROR("Simulation failed (%#x).", exit_status);