X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/blobdiff_plain/fb7c087879f5cfc2657a4fc04847106b5f75c122..805029acc414ec084affd6d6f2790e1f1fa20017:/options.cpp diff --git a/options.cpp b/options.cpp index 9ea0a72..9f7ea5c 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 @@ -66,10 +68,14 @@ namespace opt { loba_algorithms_type loba_algorithms; loba_algorithms_type::loba_algorithms_type() { - NOL_INSERT("fairstrategy", "balance with fair strategy", loba_fairstrategy); - NOL_INSERT("makhoul", "balance with Makhoul's PhD algorithm", loba_makhoul); - NOL_INSERT("none", "no load-balancing (for testing only)", process); - NOL_INSERT("simple", "balance with least loaded neighbor", loba_simple); + NOL_INSERT("fairstrategy", "balance with fair strategy", + loba_fairstrategy); + NOL_INSERT("makhoul", "balance with Makhoul's PhD algorithm", + loba_makhoul); + NOL_INSERT("none", "no load-balancing (for testing only)", + process); + NOL_INSERT("simple", "balance with least loaded neighbor", + loba_simple); } topologies_type topologies; @@ -197,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; @@ -219,7 +225,8 @@ bool opt::parse_args(int* argc, char* argv[]) try { opt::comp_cost = cost_func(optarg); } catch (...) { - XBT_ERROR("invalid argument for option '-%c' -- \"%s\"", c, optarg); + XBT_ERROR("invalid argument for option '-%c' -- \"%s\"", + c, optarg); result = false; } break; @@ -227,7 +234,8 @@ bool opt::parse_args(int* argc, char* argv[]) try { opt::comm_cost = cost_func(optarg); } catch (...) { - XBT_ERROR("invalid argument for option '-%c' -- \"%s\"", c, optarg); + XBT_ERROR("invalid argument for option '-%c' -- \"%s\"", + c, optarg); result = false; } break; @@ -249,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; @@ -302,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; } @@ -327,10 +347,14 @@ void opt::print() } DESCR("load balancing algorithm", "%s", loba_algo.c_str()); DESCR("bookkeeping", "%s", h.on_off(bookkeeping)); - DESCR("minimum duration between lb. iterations", "%g", min_lb_iter_duration); + DESCR("minimum duration between lb. iterations", "%g", + 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 duration between comp. iterations", "%g", min_comp_iter_duration); + DESCR("minimum data transfer amount", "%g", min_transfer_amount); + DESCR("maximum data transfer amount", "%g", max_transfer_amount); + 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", @@ -410,6 +434,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";