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

Private GIT Repository
Use xbt_die instead of throwing an std::logic_error exception.
[loba.git] / loba_simple.cpp
1 #include <xbt/log.h>
2
3 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(loba);
4
5 #include "loba_simple.h"
6
7 /* simple version:
8  *   load balance with a least-loaded neighbor,
9  *   without breaking the ping-pong condition
10  */
11 void loba_simple::load_balance()
12 {
13     int imin = -1;
14     int imax = -1;
15     double min = get_load();
16     double max = -1.0;
17     for (unsigned i = 0 ; i < pneigh.size() ; ++i) {
18         double l = pneigh[i]->get_load();
19         if (l >= get_load())
20             continue;
21         if (l < min) {
22             imin = i;
23             min = l;
24         }
25         if (l > max) {
26             imax = i;
27             max = l;
28         }
29     }
30     if (imin != -1) {           // found someone
31         double balance = std::min((get_load() - min) / 2.0,
32                                   (get_load() - max));
33         XBT_DEBUG("%d:%g %d:%g %g %g",
34                   imin, min, imax, max, get_load(), balance);
35         send(pneigh[imin], balance);
36     }
37 }
38
39 // Local variables:
40 // mode: c++
41 // End: