I Rearranged the load balancer, so WSLB->NeighborLB, NeighborLB->NborBaseLB,
[charm.git] / src / ck-ldb / NeighborLB.h
1 #ifndef _NEIGHBORLB_H_
2 #define _NEIGHBORLB_H_
3
4 #include <math.h>
5
6 #include "NborBaseLB.h"
7 #include "NeighborLB.decl.h"
8
9 void CreateNeighborLB();
10
11 class NeighborLB : public NborBaseLB {
12 public:
13   NeighborLB();
14 private:
15   CmiBool QueryBalanceNow(int step) { return CmiTrue; };
16   virtual int num_neighbors() {
17     return (CkNumPes() > 5) ? 4 : (CkNumPes()-1);
18   };
19   virtual void neighbors(int* _n) {
20     const int me = CkMyPe();
21     const int npe = CkNumPes();
22     if (npe > 1)
23       _n[0] = (me + npe - 1) % npe;
24     if (npe > 2)
25       _n[1] = (me + 1) % npe;
26
27     int bigstep = (npe - 1) / 3 + 1;
28     if (bigstep == 1) bigstep++;
29
30     if (npe > 3)
31       _n[2] = (me + bigstep) % npe;
32     if (npe > 4)
33       _n[3] = (me + npe - bigstep) % npe;
34   };
35
36   NLBMigrateMsg* Strategy(NborBaseLB::LDStats* stats, int count);
37 };
38
39 #endif /* _NeighborLB_H_ */