doc: Add serial to list of ci file reserved words
[charm.git] / src / ck-ldb / HybridLB.C
1 /**
2  * \addtogroup CkLdb
3 */
4 /*@{*/
5
6 /*
7   A Hybrid strategy that uses 3 level tree
8   The top level applies refinement strategy
9   The test applies greedy strategy
10 */
11
12 #include "HybridLB.h"
13 #include "LBDBManager.h"
14
15 #include "GreedyLB.h"
16 #include "GreedyCommLB.h"
17 #include "RefineCommLB.h"
18 #include "RefineLB.h"
19 #include "MetisLB.h"
20
21 #define  DEBUGF(x)      // CmiPrintf x;
22
23 CreateLBFunc_Def(HybridLB, "Hybrid load balancer")
24
25 HybridLB::HybridLB(const CkLBOptions &opt): HybridBaseLB(opt)
26 {
27 #if CMK_LBDB_ON
28   lbname = (char *)"HybridLB";
29
30   // defines topology in base class
31 //  tree = new ThreeLevelTree;
32
33   // decide which load balancer to call
34   // IMPORTANT: currently, the greedy LB must allow objects that
35   // are not from existing processors.
36   refine = (CentralLB *)AllocateRefineLB();
37 //  greedy = (CentralLB *)AllocateMetisLB();
38   greedy = (CentralLB *)AllocateGreedyLB();
39
40   initTree();
41 #endif
42 }
43
44 HybridLB::~HybridLB()
45 {
46   delete greedy;
47   delete refine;
48 }
49
50 void HybridLB::work(LDStats* stats)
51 {
52 #if CMK_LBDB_ON
53         theLbdb->ResetAdaptive();
54   LevelData *lData = levelData[currentLevel];
55
56   // TODO: let's generate LBMigrateMsg ourself
57   //  take into account the outObjs
58   //if (currentLevel == tree->numLevels()-1) 
59   if (currentLevel == 1) 
60     greedy->work(stats);
61   else
62     refine->work(stats);
63 #endif
64 }
65   
66 #include "HybridLB.def.h"
67
68 /*@{*/
69