X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/blobdiff_plain/ffea735548f5d4940dae32d8071a2676f6716ad0..f483eedcc241fabb1210b5800d903989202ad9fe:/loba_simple.cpp?ds=sidebyside diff --git a/loba_simple.cpp b/loba_simple.cpp index d44a1de..5a0a153 100644 --- a/loba_simple.cpp +++ b/loba_simple.cpp @@ -1,22 +1,22 @@ -#include "loba_simple.h" - #include XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(loba); +#include "loba_simple.h" + /* simple version: * load balance with a least-loaded neighbor, * without breaking the ping-pong condition */ -double loba_simple::load_balance(double my_load) +void loba_simple::load_balance() { int imin = -1; int imax = -1; - double min = my_load; + double min = get_load(); double max = -1.0; for (unsigned i = 0 ; i < pneigh.size() ; ++i) { double l = pneigh[i]->get_load(); - if (l >= my_load) + if (l >= get_load()) continue; if (l < min) { imin = i; @@ -27,15 +27,12 @@ double loba_simple::load_balance(double my_load) max = l; } } - if (imin != -1) { - // found someone - double balance = (my_load - min) / 2; - DEBUG6("%d:%g %d:%g %g %g", imin, min, imax, max, my_load, balance); - pneigh[imin]->set_to_send(balance); - pneigh[imin]->set_load(min+balance); - return balance; - } else { - return 0.0; + if (imin != -1) { // found someone + double balance = std::min((get_load() - min) / 2.0, + (get_load() - max)); + XBT_DEBUG("%d:%g %d:%g %g %g", + imin, min, imax, max, get_load(), balance); + send(pneigh[imin], balance); } }