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