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

Private GIT Repository
2cf613f5773d21815376a09b651732ca19e2a2a9
[loba.git] / loba_simple.cpp
1 #include "loba_simple.h"
2
3 #include <xbt/log.h>
4
5 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(loba);
6
7 /* simple version:
8  *   load balance with a least-loaded neighbor,
9  *   without breaking the ping-pong condition
10  */
11 double loba_simple::load_balance(double my_load)
12 {
13     int imin = -1;
14     int imax = -1;
15     double min = my_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 >= my_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) {
31         // found someone
32         double balance = (my_load - max) / 2;
33         DEBUG6("%d:%g %d:%g %g %g", imin, min, imax, max, my_load, balance);
34         pneigh[imin]->set_to_send(balance);
35         return balance;
36     } else {
37         return 0.0;
38     }
39 }
40
41 // Local variables:
42 // mode: c++
43 // End: