From: Raphaƫl Couturier Date: Fri, 17 Dec 2010 13:29:17 +0000 (+0100) Subject: Add loba_fairstrategy. X-Git-Tag: v0.1~223 X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/commitdiff_plain/fdc3237504c68a8f89faf2c56fa281df7f2bb972?hp=035e2d971fc603174fa4c6883359f02d34b77226 Add loba_fairstrategy. --- diff --git a/loba_fairstrategy.cpp b/loba_fairstrategy.cpp new file mode 100644 index 0000000..fd710c2 --- /dev/null +++ b/loba_fairstrategy.cpp @@ -0,0 +1,43 @@ +#include "loba_fairstrategy.h" + +#include + +XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(loba); + +/* simple version: + * load balance with a least-loaded neighbor, + * without breaking the ping-pong condition + */ +double loba_fairstrategy::load_balance(double my_load) +{ + int imin = -1; + int imax = -1; + double min = my_load; + double max = -1.0; + for (unsigned i = 0 ; i < pneigh.size() ; ++i) { + double l = pneigh[i]->get_load(); + if (l >= my_load) + continue; + if (l < min) { + imin = i; + min = l; + } + if (l > max) { + imax = i; + max = l; + } + } + if (imin != -1) { + // found someone + double balance = (my_load - max) / 2; + DEBUG6("%d:%g %d:%g %g %g", imin, min, imax, max, my_load, balance); + pneigh[imin]->set_to_send(balance); + return balance; + } else { + return 0.0; + } +} + +// Local variables: +// mode: c++ +// End: diff --git a/loba_fairstrategy.h b/loba_fairstrategy.h new file mode 100644 index 0000000..9984c36 --- /dev/null +++ b/loba_fairstrategy.h @@ -0,0 +1,19 @@ +#ifndef LOBA_FAIRSTRATEGY_H +#define LOBA_FAIRSTRATEGY_H + +#include "process.h" + +class loba_fairstrategy: public process { +public: + loba_fairstrategy(int argc, char* argv[]): process(argc, argv) { } + ~loba_fairstrategy() { } + +private: + double load_balance(double my_load); +}; + +#endif //!LOBA_SIMPLE + +// Local variables: +// mode: c++ +// End: diff --git a/options.cpp b/options.cpp index 12e1b22..e413470 100644 --- a/options.cpp +++ b/options.cpp @@ -6,6 +6,7 @@ #include // getopt #include #include "loba_simple.h" +#include "loba_fairstrategy.h" XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(main); @@ -45,6 +46,7 @@ namespace opt { loba_algorithms_type loba_algorithms; loba_algorithms_type::loba_algorithms_type() { + NOL_INSERT("fairstrategy", "balance with fair strategy", loba_fairstrategy); NOL_INSERT("none", "no load-balancing (for testing)", process); NOL_INSERT("simple", "balance with least loaded neighbor", loba_simple); }