f0e1dba5177d207d52e30d3191175ff5386a2629
[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 #if CONVERSE_VERSION_VMI
15 extern "C" int CmiGetCluster (int process);
16 #endif
17
18 void CreateGridCommRefineLB ();
19
20 class PE_Data_T
21 {
22   public:
23     CmiBool available;
24     int cluster;
25     int num_objs;
26     int num_lan_objs;
27     int num_lan_msgs;
28     int num_wan_objs;
29     int num_wan_msgs;
30     double relative_speed;
31     double scaled_load;
32 };
33
34 class Object_Data_T
35 {
36   public:
37     CmiBool migratable;
38     int cluster;
39     int from_pe;
40     int to_pe;
41     int num_lan_msgs;
42     int num_wan_msgs;
43     double load;
44 };
45
46 class GridCommRefineLB : public CentralLB
47 {
48   public:
49     GridCommRefineLB (const CkLBOptions &);
50     GridCommRefineLB (CkMigrateMessage *msg);
51
52     void work (CentralLB::LDStats *stats, int count);
53
54     void pup (PUP::er &p) { CentralLB::pup (p); }
55
56   private:
57     int Get_Cluster (int pe);
58     int Find_Maximum_WAN_Object (int pe);
59     int Find_Minimum_WAN_PE (int cluster);
60     void Assign_Object_To_PE (int target_object, int target_pe);
61     void Remove_Object_From_PE (int target_object, int target_pe);
62     CmiBool QueryBalanceNow (int step);
63
64     int Num_PEs;
65     int Num_Objects;
66     int Num_Clusters;
67     PE_Data_T *PE_Data;
68     Object_Data_T *Object_Data;
69     double CK_LDB_GridCommRefineLB_Tolerance;
70 };
71
72 #endif