doc: Add serial to list of ci file reserved words
[charm.git] / src / ck-ldb / RecBisectBfLB.h
1 /**
2  * \addtogroup CkLdb
3 */
4 /*@{*/
5
6 #ifndef _RECBISECTBFLB_H_
7 #define _RECBISECTBFLB_H_
8
9 #include "CentralLB.h"
10 #include "RecBisectBfLB.decl.h"
11
12 #include "ObjGraph.h"
13 #include "graph.h"
14 #include "bitvecset.h"
15 #include "cklists.h"
16
17 typedef CkQ<int> IntQueue;
18
19 void CreateRecBisectBfLB();
20 BaseLB * AllocateRecBisectBfLB();
21
22 typedef struct {
23   int size;
24   int * nodeArray;
25 } PartitionRecord;
26
27
28 typedef struct {
29   int next;
30   int max;
31   PartitionRecord * partitions;
32 } PartitionList;
33
34
35 class RecBisectBfLB : public CentralLB {
36 public:
37   RecBisectBfLB(const CkLBOptions &);
38   RecBisectBfLB(CkMigrateMessage *m):CentralLB(m) {}
39 private:
40   CmiBool QueryBalanceNow(int step);
41   void work(LDStats* stats);
42
43   Graph * convertGraph(ObjGraph *og);
44   
45   void  partitionInTwo(Graph *g, int nodes[], int numNodes, 
46                  int ** pp1, int *numP1, int **pp2, int *numP2, 
47                  int ratio1, int ratio2);  
48   int findNextUnassigned(int max, BV_Set * all, BV_Set * s1, BV_Set * s2);
49   float addToQ(IntQueue * q, Graph *g, BV_Set * all, BV_Set * s1, BV_Set * s2);
50   
51   void  enqChildren(IntQueue * q, Graph *g, BV_Set * all, 
52               BV_Set * s1, BV_Set * s2, int node) ;
53   
54   void addPartition(PartitionList * partitions, int * nodes, int num) ;
55   void printPartitions(PartitionList * partitions) ;
56   void recursivePartition(int numParts, Graph *g, int nodes[], int numNodes, 
57                      PartitionList *partitions);
58
59 };
60
61
62
63 #endif /* _RECBISECTBFLB_H_ */
64
65
66 /*@}*/