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