X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/blobdiff_plain/7392b187b59a5049eca85891ebd8a202d8d4e1ca..c7d143b408d7ebd1136daa8d0e6c1b708826b475:/loba_fairstrategy.cpp?ds=sidebyside diff --git a/loba_fairstrategy.cpp b/loba_fairstrategy.cpp index 8790892..4054729 100644 --- a/loba_fairstrategy.cpp +++ b/loba_fairstrategy.cpp @@ -1,49 +1,26 @@ -#include #include XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(loba); #include "loba_fairstrategy.h" -/* simple version: - * load balance with a least-loaded neighbor, - * without breaking the ping-pong condition - */ - -class compare { -public : - bool operator()(const neighbor*a, const neighbor*b) { - return a->get_load()>b->get_load(); - } -}; - -double loba_fairstrategy::load_balance(double my_load) +void loba_fairstrategy::load_balance() { - std::sort(pneigh.begin(), pneigh.end(), compare()); + pneigh_sort_by_load(std::greater()); + print_loads_p(false, xbt_log_priority_debug); - //print_loads_p(); - - double sum_sent=0; - bool found=true; - - while(found) { - found=false; + const double delta = 0.001; + bool found = true; + while (found) { + found = false; for (unsigned i = 0 ; i < pneigh.size() ; ++i) { - double l = pneigh[i]->get_load(); - if (l >= my_load) - continue; - if (l < my_load+2) { - found=true; - pneigh[i]->add_load(1); - pneigh[i]->add_to_send(1); - //INFO1("sent to %s",pneigh[i]->get_name()); - my_load--; - sum_sent++; + if (pneigh[i]->get_load() <= get_load() - 2 * delta) { + found = true; + send(pneigh[i], delta); + XBT_DEBUG("sent to %s", pneigh[i]->get_name()); } } } - - return sum_sent; } // Local variables: