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