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

Private GIT Repository
Define process::send(), and simplify load_balance() logic.
[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) {
31         // found someone
32         double balance = (get_load() - max) / 2;
33         DEBUG6("%d:%g %d:%g %g %g", imin, min, imax, max, get_load(), balance);
34         send(pneigh[imin], balance);
35     }
36 }
37
38 // Local variables:
39 // mode: c++
40 // End: