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

Private GIT Repository
5702fba8a667fb76d6c982bd495769f1363adec2
[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 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 - min) / 2;
33         DEBUG6("%d:%g %d:%g %g %g", imin, min, imax, max, my_load, balance);
34         pneigh[imin]->set_to_send(balance);
35         pneigh[imin]->add_load(balance);
36         return balance;
37     } else {
38         return 0.0;
39     }
40 }
41
42 // Local variables:
43 // mode: c++
44 // End: