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

Private GIT Repository
Add option -E : egocentric mode.
authorArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Thu, 15 Sep 2011 16:09:55 +0000 (18:09 +0200)
committerArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Thu, 15 Sep 2011 16:09:55 +0000 (18:09 +0200)
The changes introduced by commit f5336c506a2c288f6a4a9ed84ecb21b12a22a2dd
("Do not go below expected_load when bookkeeping.") are now only
used when egocentric mode is turned on.

The default behaviour is reverted to the previous one.

options.cpp
options.h
process.cpp

index 3ca93b78adc73cdbf183643e9d37617a0a7c9cc3..b38726756353aed4c39c83a1f9f1fad53f72f463 100644 (file)
@@ -59,6 +59,7 @@ namespace opt {
     // Load balancing algorithm
     std::string loba_algo("simple");
     bool bookkeeping = false;
+    bool egocentric = false;
     double min_lb_iter_duration = 1.0;          // fixme: find better defaults
     double min_transfer_amount = 0.0;
     double max_transfer_amount = 0.0;
@@ -225,7 +226,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:Z")) != -1) {
+                       "a:bc:C:d:D:eEhi:I:l:L:m:M:N:r:Rs:S:t:T:vVx:Z")) != -1) {
         switch (c) {
         case 'a':
             opt::loba_algo = optarg;
@@ -264,6 +265,9 @@ bool opt::parse_args(int* argc, char* argv[])
         case 'e':
             opt::exit_on_close = !opt::exit_on_close;
             break;
+        case 'E':
+            opt::egocentric = !opt::egocentric;
+            break;
         case 'h':
             opt::help_requested++;
             break;
@@ -392,6 +396,7 @@ void opt::print()
     }
     DESCR("load balancing algorithm", "%s", loba_algo.c_str());
     DESCR("bookkeeping", "%s", h.on_off(bookkeeping));
+    DESCR("egocentric mode", "%s", h.on_off(egocentric));
     DESCR("minimum duration between lb. iterations", "%g",
           min_lb_iter_duration);
     DESCR("computation cost factors", "[%s]", comp_cost.to_string().c_str());
@@ -479,6 +484,11 @@ void opt::usage()
         so_list(opt::loba_algorithms);
     std::clog << o("-b") << "toggle bookkeeping (\"virtual load\")"
               << " [" << opt_helper::on_off(opt::bookkeeping) << "]\n";
+    std::clog << o("-E") << "toggle egocentric mode when bookkeeping"
+              << " [" << opt_helper::on_off(opt::egocentric) << "]\n";
+    if (opt::help_requested > 1)
+        std::clog << o("")
+                  << "(a not so good idea introduced by git commit f5336c5)\n";
 
     std::clog << "\nLb. and comp. iterations:\n";
     std::clog << o("-s value")
index f0f29359e993396f20601a4ba86d90b43e305453..ed32b85e42271b9708e8c3a5b11260f3a093bdc2 100644 (file)
--- a/options.h
+++ b/options.h
@@ -43,6 +43,7 @@ namespace opt {
     // Load balancing algorithm
     extern std::string loba_algo;
     extern bool bookkeeping;
+    extern bool egocentric;
     extern double min_transfer_amount;
     extern double max_transfer_amount;
     extern double min_lb_iter_duration;
index 0f7380c8c4802a7cecf5f7498deb3deaa32c0863..1883464d5d3364427e1946388ffae150be211218 100644 (file)
@@ -322,14 +322,15 @@ void process::data_send(neighbor& nb)
 {
     double load_to_send;
     if (opt::bookkeeping) {
-        double excess_load = real_load - expected_load;
-        if (excess_load > 0.0) {
-            load_to_send = compute_load_to_send(std::min(excess_load,
-                                                         nb.get_debt()));
-            if (load_to_send > 0.0)
-                nb.set_debt(nb.get_debt() - load_to_send);
-        } else
-            load_to_send = 0.0;
+        double excess_load;
+        if (opt::egocentric)
+            excess_load = std::max(0.0, real_load - expected_load);
+        else
+            excess_load = real_load;
+        load_to_send = compute_load_to_send(std::min(excess_load,
+                                                     nb.get_debt()));
+        if (load_to_send > 0.0)
+            nb.set_debt(nb.get_debt() - load_to_send);
     } else {
         load_to_send = compute_load_to_send(nb.get_to_send());
         if (load_to_send > 0.0)