From: Arnaud Giersch Date: Wed, 29 Feb 2012 16:37:13 +0000 (+0100) Subject: Add possibility to set the convergence threshold automatically. X-Git-Tag: exp_20120229~4 X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/commitdiff_plain/6327e2032096180078429253034afecb48208abd?ds=inline;hp=245565c060611ddfed5067ab4000e91e440c402c Add possibility to set the convergence threshold automatically. --- diff --git a/options.cpp b/options.cpp index 2db9aeb..21f9b9b 100644 --- a/options.cpp +++ b/options.cpp @@ -569,6 +569,9 @@ void opt::usage() std::clog << o("-% value") << "percent of the load average to assume the convergence" << " [" << opt::avg_load_ratio << "]\n"; + if (opt::help_requested > 1) + std::clog << o("") + << "or, if negative, 100 * (nhosts / -value) / avg_load\n"; std::clog << o("-G") << "toggle exit on detection of convergence" << " [" << opt_helper::on_off(opt::exit_on_convergence) << "]\n"; std::clog << o("-t value") diff --git a/process.cpp b/process.cpp index dfbf123..01b5e0f 100644 --- a/process.cpp +++ b/process.cpp @@ -24,6 +24,7 @@ double process::total_load_exit = 0.0; int process::process_counter = 0; double process::total_load_average; +double process::average_load_ratio; double process::load_diff_threshold; std::atomic process::convergence_counter(0); @@ -75,8 +76,13 @@ process::process(int argc, char* argv[]) total_load_init += real_load; total_load_running += real_load; total_load_average = total_load_running / process_counter; + if (opt::avg_load_ratio >= 0.0) + average_load_ratio = opt::avg_load_ratio; + else + average_load_ratio = 100.0 * + (process_counter / -opt::avg_load_ratio) / total_load_average; load_diff_threshold = (opt::load_ratio_threshold + - opt::avg_load_ratio * total_load_average) / 100.0; + average_load_ratio * total_load_average) / 100.0; proc_mutex->release(); ctrl_close_pending = data_close_pending = neigh.size(); @@ -118,10 +124,10 @@ process::~process() lb_iter, comp_iter, all_comp_iter, real_load); if (convergence >= 0.0) XBT_INFO("Convergence within %g%% was achieved at time %g", - opt::avg_load_ratio, convergence); + average_load_ratio, convergence); else XBT_INFO("Convergence within %g%% was not achieved", - opt::avg_load_ratio); + average_load_ratio); 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); diff --git a/process.h b/process.h index 5e1faa6..aa9ebcb 100644 --- a/process.h +++ b/process.h @@ -97,6 +97,7 @@ private: static int process_counter; static double total_load_average; + static double average_load_ratio; static double load_diff_threshold; static std::atomic convergence_counter;