Fix hash table usage for XLC
[charm.git] / src / ck-ldb / GridCommLB.h
blobc5bbb7eac24b2d293eeb4c4c3385c80aaa9a1429
1 #ifndef _GRIDCOMMLB_H_
2 #define _GRIDCOMMLB_H_
4 #include <limits.h>
5 #include <math.h>
6 #include "CentralLB.h"
8 #define CK_LDB_GRIDCOMMLB_MODE 0
9 #define CK_LDB_GRIDCOMMLB_BACKGROUND_LOAD 1
10 #define CK_LDB_GRIDCOMMLB_LOAD_TOLERANCE 0.10
12 #ifndef MAXINT
13 #define MAXINT 2147483647
14 #endif
16 #ifndef MAXDOUBLE
17 #define MAXDOUBLE 1e10
18 #endif
20 void CreateGridCommLB ();
22 class PE_Data_T
24 public:
25 bool available;
26 int cluster;
27 int num_objs;
28 int num_lan_objs;
29 int num_lan_msgs;
30 int num_wan_objs;
31 int num_wan_msgs;
32 double relative_speed;
33 double scaled_load;
36 class Object_Data_T
38 public:
39 bool migratable;
40 int cluster;
41 int from_pe;
42 int to_pe;
43 int num_lan_msgs;
44 int num_wan_msgs;
45 double load;
48 class GridCommLB : public CBase_GridCommLB
50 public:
51 GridCommLB (const CkLBOptions &);
52 GridCommLB (CkMigrateMessage *msg);
54 bool QueryBalanceNow (int step);
55 void work (LDStats *stats);
56 void pup (PUP::er &p) { }
58 private:
59 int Get_Cluster (int pe);
60 void Initialize_PE_Data (CentralLB::LDStats *stats);
61 int Available_PE_Count ();
62 int Compute_Number_Of_Clusters ();
63 void Initialize_Object_Data (CentralLB::LDStats *stats);
64 void Examine_InterObject_Messages (CentralLB::LDStats *stats);
65 void Map_NonMigratable_Objects_To_PEs ();
66 void Map_Migratable_Objects_To_PEs (int cluster);
67 int Find_Maximum_Object (int cluster);
68 int Find_Minimum_PE (int cluster);
69 void Assign_Object_To_PE (int target_object, int target_pe);
71 int CK_LDB_GridCommLB_Mode;
72 int CK_LDB_GridCommLB_Background_Load;
73 double CK_LDB_GridCommLB_Load_Tolerance;
75 int Num_PEs;
76 int Num_Objects;
77 int Num_Clusters;
78 PE_Data_T *PE_Data;
79 Object_Data_T *Object_Data;
82 #endif