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