doc: Add serial to list of ci file reserved words
[charm.git] / src / ck-ldb / GridCommLB.h
1 #ifndef _GRIDCOMMLB_H_
2 #define _GRIDCOMMLB_H_
3
4 #include <limits.h>
5 #include <math.h>
6 #include "CentralLB.h"
7
8 #define CK_LDB_GRIDCOMMLB_MODE 0
9 #define CK_LDB_GRIDCOMMLB_BACKGROUND_LOAD 1
10 #define CK_LDB_GRIDCOMMLB_LOAD_TOLERANCE 0.10
11
12 #ifndef MAXINT
13 #define MAXINT 2147483647
14 #endif
15
16 #ifndef MAXDOUBLE
17 #define MAXDOUBLE 1e10
18 #endif
19
20 #if CONVERSE_VERSION_VMI
21 extern "C" int CmiGetCluster (int process);
22 #endif
23
24 void CreateGridCommLB ();
25
26 class PE_Data_T
27 {
28   public:
29     CmiBool available;
30     int cluster;
31     int num_objs;
32     int num_lan_objs;
33     int num_lan_msgs;
34     int num_wan_objs;
35     int num_wan_msgs;
36     double relative_speed;
37     double scaled_load;
38 };
39
40 class Object_Data_T
41 {
42   public:
43     CmiBool migratable;
44     int cluster;
45     int from_pe;
46     int to_pe;
47     int num_lan_msgs;
48     int num_wan_msgs;
49     double load;
50 };
51
52 class GridCommLB : public CentralLB
53 {
54   public:
55     GridCommLB (const CkLBOptions &);
56     GridCommLB (CkMigrateMessage *msg);
57
58     CmiBool QueryBalanceNow (int step);
59     void work (LDStats *stats);
60     void pup (PUP::er &p) { CentralLB::pup (p); }
61
62   private:
63     int Get_Cluster (int pe);
64     void Initialize_PE_Data (CentralLB::LDStats *stats);
65     int Available_PE_Count ();
66     int Compute_Number_Of_Clusters ();
67     void Initialize_Object_Data (CentralLB::LDStats *stats);
68     void Examine_InterObject_Messages (CentralLB::LDStats *stats);
69     void Map_NonMigratable_Objects_To_PEs ();
70     void Map_Migratable_Objects_To_PEs (int cluster);
71     int Find_Maximum_Object (int cluster);
72     int Find_Minimum_PE (int cluster);
73     void Assign_Object_To_PE (int target_object, int target_pe);
74
75     int CK_LDB_GridCommLB_Mode;
76     int CK_LDB_GridCommLB_Background_Load;
77     double CK_LDB_GridCommLB_Load_Tolerance;
78
79     int Num_PEs;
80     int Num_Objects;
81     int Num_Clusters;
82     PE_Data_T *PE_Data;
83     Object_Data_T *Object_Data;
84 };
85
86 #endif