From e53538eff3dccb0bf53d2f3916659f991ae6f6b8 Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Mon, 6 Jun 2011 11:03:32 +0200 Subject: [PATCH] Add option for integer transfer. --- options.cpp | 11 ++++++++++- options.h | 1 + process.cpp | 3 +++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/options.cpp b/options.cpp index bde2ae8..39f043c 100644 --- a/options.cpp +++ b/options.cpp @@ -62,6 +62,7 @@ namespace opt { double min_lb_iter_duration = 1.0; // fixme: find better defaults double min_transfer_amount = 0.0; double max_transfer_amount = 0.0; + bool integer_transfer = false; // Application parameters cost_func comp_cost("1e9, 0"); // fixme: find better defaults @@ -224,7 +225,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:m:M:N:r:Rs:S:t:T:vVx:")) != -1) { + "a:bc:C:d:D:ehi:I:l:L:m:M:N:r:Rs:S:t:T:vVx:Z")) != -1) { switch (c) { case 'a': opt::loba_algo = optarg; @@ -320,6 +321,9 @@ bool opt::parse_args(int* argc, char* argv[]) PARSE_ARG(opt::option_x); XBT_WARN("option_x set to %d", opt::option_x); break; + case 'Z': + opt::integer_transfer = !opt::integer_transfer; + break; case '?': XBT_ERROR("invalid option -- '%c'", optopt); result = false; @@ -393,6 +397,8 @@ void opt::print() 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("only transfer integer data shares", "%s", + h.on_off(integer_transfer)); DESCR("minimum duration between comp. iterations", "%g", min_comp_iter_duration); DESCR("computations start after lb. iter", "%u", comp_iter_delay); @@ -499,6 +505,9 @@ void opt::usage() std::clog << o("-M value") << "maximum data transfer amount, 0 for no limit" << " [" << opt::max_transfer_amount << "]\n"; + std::clog << o("-Z") + << "toggle transfer integer of integer data shares only" + << " [" << opt_helper::on_off(opt::integer_transfer) << "]\n"; std::clog << "\nEnd of the simulation:\n"; std::clog << o("-i value") diff --git a/options.h b/options.h index 0c69e11..f0f2935 100644 --- a/options.h +++ b/options.h @@ -46,6 +46,7 @@ namespace opt { extern double min_transfer_amount; extern double max_transfer_amount; extern double min_lb_iter_duration; + extern bool integer_transfer; // Application parameters extern cost_func comp_cost; diff --git a/process.cpp b/process.cpp index 45d0621..193c87b 100644 --- a/process.cpp +++ b/process.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -305,6 +306,8 @@ void process::ctrl_send(neighbor& nb) double process::compute_load_to_send(double desired) { + if (opt::integer_transfer) + desired = std::floor(desired); return desired >= opt::min_transfer_amount ? desired : 0.0; } -- 2.39.5