X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/blobdiff_plain/052b10b56499e63b129bfdfee1de270b1e190e6b..7154ea8a74d7566156c7e65034fdbad45d230cf5:/options.cpp?ds=inline diff --git a/options.cpp b/options.cpp index 189bed2..e9aa9b0 100644 --- a/options.cpp +++ b/options.cpp @@ -48,6 +48,8 @@ namespace opt { std::string loba_algo("simple"); bool bookkeeping = false; double min_lb_iter_duration = 1.0; // fixme: find better defaults + double min_transfer_amount = 0.0; + double max_transfer_amount = 0.0; // Application parameters cost_func comp_cost("1e9, 0"); // fixme: find better defaults @@ -201,7 +203,7 @@ bool opt::parse_args(int* argc, char* argv[]) int c; opterr = 0; while ((c = getopt(*argc, argv, - "a:bc:C:d:D:ehi:I:l:L:N:s:S:t:T:vV")) != -1) { + "a:bc:C:d:D:ehi:I:l:L:m:M:N:s:S:t:T:vV")) != -1) { switch (c) { case 'a': opt::loba_algo = optarg; @@ -255,6 +257,12 @@ bool opt::parse_args(int* argc, char* argv[]) case 'L': PARSE_ARG(opt::auto_depl::load); break; + case 'm': + PARSE_ARG(opt::min_transfer_amount); + break; + case 'M': + PARSE_ARG(opt::max_transfer_amount); + break; case 'N': PARSE_ARG(opt::auto_depl::nhosts); break; @@ -308,6 +316,12 @@ bool opt::parse_args(int* argc, char* argv[]) result = false; } + if (opt::max_transfer_amount && + opt::max_transfer_amount < opt::min_transfer_amount) { + XBT_ERROR("max. data transfer amount < min. data transfer amount"); + result = false; + } + return result; } @@ -337,15 +351,18 @@ void opt::print() min_lb_iter_duration); DESCR("computation cost factors", "[%s]", comp_cost.to_string().c_str()); DESCR("communication cost factors", "[%s]", comm_cost.to_string().c_str()); + DESCR("minimum data transfer amount", "%g", min_transfer_amount); + DESCR("maximum data transfer amount", "%s", + h.val_or_string(max_transfer_amount, "no limit")); DESCR("minimum duration between comp. iterations", "%g", min_comp_iter_duration); DESCR("computations start after lb. iter", "%u", comp_iter_delay); DESCR("computations start after time", "%g", comp_time_delay); DESCR("maximum number of lb. iterations", "%s", - h.val_or_string(lb_maxiter, "infinity")); + h.val_or_string(lb_maxiter, "no limit")); DESCR("maximum number of comp. iterations", "%s", - h.val_or_string(comp_maxiter, "infinity")); - DESCR("time limit", "%s", h.val_or_string(time_limit, "infinity")); + h.val_or_string(comp_maxiter, "no limit")); + DESCR("time limit", "%s", h.val_or_string(time_limit, "no limit")); DESCR("exit on close", "%s", h.on_off(exit_on_close)); XBT_INFO("`----"); @@ -418,6 +435,12 @@ void opt::usage() std::clog << o("-C [aN,...]a0") << "polynomial factors for communication cost" << " [" << opt::comm_cost.to_string() << "]\n"; + std::clog << o("-m value") + << "minimum data transfer amount" + << " [" << opt::min_transfer_amount << "]\n"; + std::clog << o("-M value") + << "maximum data transfer amount, 0 for no limit" + << " [" << opt::max_transfer_amount << "]\n"; std::clog << o("-S value") << "minimum duration between comp. iterations" << " [" << opt::min_comp_iter_duration << "]\n"; @@ -430,13 +453,13 @@ void opt::usage() std::clog << "\nParameters for the end of the simulation\n"; std::clog << o("-i value") - << "maximum number of lb. iterations, 0 for infinity" + << "maximum number of lb. iterations, 0 for no limit" << " [" << opt::lb_maxiter << "]\n"; std::clog << o("-I value") - << "maximum number of comp. iterations, 0 for infinity" + << "maximum number of comp. iterations, 0 for no limit" << " [" << opt::comp_maxiter << "]\n"; std::clog << o("-t value") - << "time limit (simulated time), 0 for infinity" + << "time limit (simulated time), 0 for no limit" << " [" << opt::time_limit << "]\n"; std::clog << o("-e") << "toggle exit on reception of \"close\" message" << " [" << opt_helper::on_off(opt::exit_on_close) << "]\n";