doc: Add serial to list of ci file reserved words
[charm.git] / src / ck-ldb / GridHybridLB.h
1 #ifndef _GRIDHYBRIDLB_H_
2 #define _GRIDHYBRIDLB_H_
3
4 #include "CentralLB.h"
5
6 #define CK_LDB_GRIDHYBRIDLB_MODE 0
7 #define CK_LDB_GRIDHYBRIDLB_BACKGROUND_LOAD 1
8 #define CK_LDB_GRIDHYBRIDLB_LOAD_TOLERANCE 0.10
9
10 #ifndef MAXINT
11 #define MAXINT 2147483647
12 #endif
13
14 #ifndef MAXDOUBLE
15 #define MAXDOUBLE 1e10
16 #endif
17
18 extern "C" void METIS_PartGraphRecursive (int*, int*, int*, int*, int*, int*,
19                                           int*, int*, int*, int*, int*);
20
21 extern "C" void METIS_PartGraphKway (int*, int*, int*, int*, int*, int*,
22                                      int*, int*, int*, int*, int*);
23
24 extern "C" void METIS_PartGraphVKway (int*, int*, int*, int*, int*, int*,
25                                       int*, int*, int*, int*, int*);
26
27 extern "C" void METIS_WPartGraphRecursive (int*, int*, int*, int*,
28                                            int*, int*, int*, int*,
29                                            float*, int*, int*, int*);
30
31 extern "C" void METIS_WPartGraphKway (int*, int*, int*, int*,
32                                       int*, int*, int*, int*,
33                                       float*, int*, int*, int*);
34
35 extern "C" void METIS_mCPartGraphRecursive (int*, int*, int*, int*,
36                                             int*, int*, int*, int*,
37                                             int*, int*, int*, int*);
38
39 extern "C" void METIS_mCPartGraphKway (int*, int*, int*, int*, int*,
40                                        int*, int*, int*, int*, int*,
41                                        int*, int*, int*);
42
43 #if CONVERSE_VERSION_VMI
44 extern "C" int CmiGetCluster (int process);
45 #endif
46
47 void CreateGridHybridLB ();
48
49 class PE_Data_T
50 {
51   public:
52     CmiBool available;
53     int cluster;
54     int num_objs;
55     int num_lan_objs;
56     int num_lan_msgs;
57     int num_wan_objs;
58     int num_wan_msgs;
59     double relative_speed;
60     double scaled_load;
61 };
62
63 class Object_Data_T
64 {
65   public:
66     CmiBool migratable;
67     int cluster;
68     int from_pe;
69     int to_pe;
70     int num_lan_msgs;
71     int num_wan_msgs;
72     double load;
73     int secondary_index;
74 };
75
76 class Cluster_Data_T
77 {
78   public:
79     int num_pes;
80     double total_cpu_power;
81     double scaled_cpu_power;
82 };
83
84 class GridHybridLB : public CentralLB
85 {
86   public:
87     GridHybridLB (const CkLBOptions &);
88     GridHybridLB (CkMigrateMessage *msg);
89
90     CmiBool QueryBalanceNow (int step);
91     void work (LDStats *stats);
92     void pup (PUP::er &p) { CentralLB::pup (p); }
93
94   private:
95     int Get_Cluster (int pe);
96     void Initialize_PE_Data (CentralLB::LDStats *stats);
97     int Available_PE_Count ();
98     int Compute_Number_Of_Clusters ();
99     void Initialize_Object_Data (CentralLB::LDStats *stats);
100     void Initialize_Cluster_Data ();
101     void Partition_Objects_Into_Clusters (CentralLB::LDStats *stats);
102     void Examine_InterObject_Messages (CentralLB::LDStats *stats);
103     void Map_NonMigratable_Objects_To_PEs ();
104     void Map_Migratable_Objects_To_PEs (int cluster);
105     int Find_Maximum_Object (int cluster);
106     int Find_Minimum_PE (int cluster);
107     void Assign_Object_To_PE (int target_object, int target_pe);
108
109     int CK_LDB_GridHybridLB_Mode;
110     int CK_LDB_GridHybridLB_Background_Load;
111     double CK_LDB_GridHybridLB_Load_Tolerance;
112
113     int Num_PEs;
114     int Num_Objects;
115     int Num_Clusters;
116     PE_Data_T *PE_Data;
117     Object_Data_T *Object_Data;
118     Cluster_Data_T *Cluster_Data;
119 };
120
121 #endif