]> AND Private Git Repository - loba.git/commitdiff
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
New parameter: "-k value", to specify divisor for algorithms *best*.
authorArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Mon, 3 Oct 2011 12:30:38 +0000 (14:30 +0200)
committerArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Mon, 3 Oct 2011 15:39:33 +0000 (17:39 +0200)
Define and use opt::loba_best_divisor instead of opt::option_x to
specify the divisor for algorithms besteffort and 2besteffort.

The command line parameter "-k" is used to change its value.

TODO
loba_2besteffort.cpp
loba_besteffort.cpp
options.cpp
options.h

diff --git a/TODO b/TODO
index e99ae98c542edc03c1b366ab87e87461e77b7709..dfa777906e6506d8803969adab020bfe7b0a4f8f 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,5 +1,5 @@
 * Remove usage of opt::option_x in loba_besteffort.cpp and loba_2besteffort.cpp
-   Either simply remove it, or change it to a real option.
+   Use -k instead (done).  Remove hack marked "FIXME" in opt::parse_args().
 
 * Support heterogeneous platforms?
    Not sure yet.
index 820c7a5f813a6a0d2deba0b4a6c72a691506400c..82fcd3659abbe1454367c4dca75f67c8f68197c6 100644 (file)
@@ -31,8 +31,8 @@ void loba_2besteffort::load_balance()
         // don't continue if get_load() <= mean, or pneigh[i]->get_load >= mean
         if (transfer <= 0.0)
             break;
-        if (opt::option_x)
-            transfer /= opt::option_x; // HACK!!!
+        if (opt::loba_best_divisor)
+            transfer /= opt::loba_best_divisor;
         send(pneigh[i], transfer);
         XBT_DEBUG("sent %g to %s", transfer, pneigh[i]->get_name());
     }
index 22343e0af364db111c148fc10abd50e2f1b8ea2a..f3a8c33ef32fca74f50e5aed8a3d635a8b0c14d0 100644 (file)
@@ -26,8 +26,8 @@ void loba_besteffort::load_balance()
     double mean = sum / (bound + 1);
     for (unsigned i = 0 ; i < bound ; ++i) {
         double transfer = mean - pneigh[i]->get_load();
-        if (opt::option_x)
-            transfer /= opt::option_x; // HACK!!!
+        if (opt::loba_best_divisor)
+            transfer /= opt::loba_best_divisor;
         send(pneigh[i], transfer);
         XBT_DEBUG("sent %g to %s", transfer, pneigh[i]->get_name());
     }
index b440f7ce76be2f908dc47fdc2a99d5a007819851..5ca56d74843bc17ee1e32219f9fe9edb83c06b97 100644 (file)
@@ -66,6 +66,7 @@ namespace opt {
     double min_transfer_amount = 0.0;
     double max_transfer_amount = 0.0;
     bool integer_transfer = false;
+    unsigned loba_best_divisor = 1;
 
     // Application parameters
     cost_func comp_cost("1e9, 0");              // fixme: find better defaults
@@ -230,7 +231,7 @@ bool opt::parse_args(int* argc, char* argv[])
     int c;
     opterr = 0;
     while ((c = getopt(*argc, argv,
-                       "a:bc:C:d:D:eEhi:I:l:L:m:M:N:r:Rs:S:t:T:vVx:X:Z"))
+                       "a:bc:C:d:D:eEhi:I:k:l:L:m:M:N:r:Rs:S:t:T:vVx:X:Z"))
            != -1) {
         switch (c) {
         case 'a':
@@ -279,6 +280,9 @@ bool opt::parse_args(int* argc, char* argv[])
         case 'i':
             PARSE_ARG(opt::lb_maxiter);
             break;
+        case 'k':
+            PARSE_ARG(opt::loba_best_divisor);
+            break;
         case 'I':
             PARSE_ARG(opt::comp_maxiter);
             break;
@@ -346,6 +350,13 @@ bool opt::parse_args(int* argc, char* argv[])
 
 #undef PARSE_ARG
 
+    if (opt::option_x) {        // FIXME: remove this one day...
+        opt::loba_best_divisor = opt::option_x;
+        XBT_WARN("divisor for algorithms *best* set from option -x (%d => %u),"
+                 " use -k instead",
+                 opt::option_x, opt::loba_best_divisor);
+    }
+
     if (opt::version_requested || opt::help_requested)
         return 1;
 
@@ -373,6 +384,12 @@ bool opt::parse_args(int* argc, char* argv[])
         result = false;
     }
 
+    if (opt::loba_best_divisor <= 0) {
+        XBT_ERROR("divisor for algorithms *best* (%u) should be positive",
+                  opt::loba_best_divisor);
+        result = false;
+    }
+
     if (!opt::auto_depl::random_seed)
         opt::auto_depl::random_seed = time(NULL);
 
@@ -417,6 +434,7 @@ void opt::print()
           h.val_or_string(max_transfer_amount, "no limit"));
     DESCR("only transfer integer data shares", "%s",
           h.on_off(integer_transfer));
+    DESCR("divisor for algorithms *best*", "%u", loba_best_divisor);
     DESCR("minimum duration between comp. iterations", "%g",
           min_comp_iter_duration);
     DESCR("computations start after lb. iter", "%u", comp_iter_delay);
@@ -503,6 +521,8 @@ void opt::usage()
     if (opt::help_requested > 1)
         std::clog << o("")
                   << "(a not so good idea introduced by git commit f5336c5)\n";
+    std::clog << o("-k value") << "divisor for algorithms *best*"
+              << " [" << opt::loba_best_divisor << "]\n";
 
     std::clog << "\nLb. and comp. iterations:\n";
     std::clog << o("-s value")
index 89a3f1285ce44b91a9c045ad2247ecb48d1eab92..ef7a73e6ce379d9915ee7e213a59db267487a4cd 100644 (file)
--- a/options.h
+++ b/options.h
@@ -49,6 +49,7 @@ namespace opt {
     extern double max_transfer_amount;
     extern double min_lb_iter_duration;
     extern bool integer_transfer;
+    extern unsigned loba_best_divisor;
 
     // Application parameters
     extern cost_func comp_cost;