doc: Add serial to list of ci file reserved words
[charm.git] / src / ck-ldb / GridCommLB.C
index fef676b981fd585176bc9e77ea9c21a3a154589a..c44ff84dc85f8162e4882f42b07d307d7fd3b1f5 100644 (file)
@@ -43,7 +43,7 @@
 #include "GridCommLB.h"
 #include "manager.h"
 
-CreateLBFunc_Def (GridCommLB, "Grid communication load balancer (evenly distribute objects across each cluster)");
+CreateLBFunc_Def (GridCommLB, "Grid communication load balancer (evenly distribute objects across each cluster)")
 
 
 
@@ -100,6 +100,12 @@ GridCommLB::GridCommLB (CkMigrateMessage *msg) : CentralLB (msg)
     CK_LDB_GridCommLB_Mode = CK_LDB_GRIDCOMMLB_MODE;
   }
 
+  if (value = getenv ("CK_LDB_GRIDCOMMLB_BACKGROUND_LOAD")) {
+    CK_LDB_GridCommLB_Background_Load = atoi (value);
+  } else {
+    CK_LDB_GridCommLB_Background_Load = CK_LDB_GRIDCOMMLB_BACKGROUND_LOAD;
+  }
+
   if (value = getenv ("CK_LDB_GRIDCOMMLB_LOAD_TOLERANCE")) {
     CK_LDB_GridCommLB_Load_Tolerance = atof (value);
   } else {
@@ -187,7 +193,7 @@ void GridCommLB::Initialize_PE_Data (CentralLB::LDStats *stats)
   for (i = 0; i < Num_PEs; i++) {
     (&PE_Data[i])->relative_speed = (double) (stats->procs[i].pe_speed / min_speed);
     if (CK_LDB_GridCommLB_Background_Load) {
-      (&PE_Data[i])->scaled_load += stats->procs[i].bg_cputime;
+      (&PE_Data[i])->scaled_load += stats->procs[i].bg_walltime;
     }
   }
 }
@@ -443,29 +449,6 @@ int GridCommLB::Find_Maximum_Object (int cluster)
   }
 
   return (max_index);
-
-/*
-  int i;
-  int max_index;
-  int max_wan_msgs;
-
-
-  max_index = -1;
-  max_wan_msgs = -1;
-
-  for (i = 0; i < Num_Objects; i++) {
-    if ((&Object_Data[i])->cluster == cluster) {
-      if ((&Object_Data[i])->to_pe == -1) {
-       if ((&Object_Data[i])->num_wan_msgs > max_wan_msgs) {
-         max_index = i;
-         max_wan_msgs = (&Object_Data[i])->num_wan_msgs;
-       }
-      }
-    }
-  }
-
-  return (max_index);
-*/
 }
 
 
@@ -487,6 +470,37 @@ int GridCommLB::Find_Maximum_Object (int cluster)
 int GridCommLB::Find_Minimum_PE (int cluster)
 {
   if (CK_LDB_GridCommLB_Mode == 0) {
+    int min_index;
+    int min_objs;
+    int i;
+
+
+    min_index = -1;
+    min_objs = MAXINT;
+
+    for (i = 0; i < Num_PEs; i++) {
+      if (((&PE_Data[i])->available) && ((&PE_Data[i])->cluster == cluster)) {
+       if ((&PE_Data[i])->num_objs < min_objs) {
+         min_index = i;
+         min_objs = (&PE_Data[i])->num_objs;
+       } else if (((&PE_Data[i])->num_objs == min_objs) &&
+                  ((&PE_Data[i])->num_wan_objs < (&PE_Data[min_index])->num_wan_objs)) {
+         min_index = i;
+       } else if (((&PE_Data[i])->num_objs == min_objs) &&
+                  ((&PE_Data[i])->num_wan_objs == (&PE_Data[min_index])->num_wan_objs) &&
+                  ((&PE_Data[i])->num_wan_msgs < (&PE_Data[min_index])->num_wan_msgs)) {
+         min_index = i;
+       } else if (((&PE_Data[i])->num_objs == min_objs) &&
+                  ((&PE_Data[i])->num_wan_objs == (&PE_Data[min_index])->num_wan_objs) &&
+                  ((&PE_Data[i])->num_wan_msgs == (&PE_Data[min_index])->num_wan_msgs) &&
+                  ((&PE_Data[i])->scaled_load < (&PE_Data[min_index])->scaled_load)) {
+         min_index = i;
+       }
+      }
+    }
+
+    return (min_index);
+  } else if (CK_LDB_GridCommLB_Mode == 1) {
     int min_index;
     int min_load_index;
     double min_scaled_load;
@@ -549,34 +563,6 @@ int GridCommLB::Find_Minimum_PE (int cluster)
       }
     }
 
-    return (min_index);
-  } else if (CK_LDB_GridCommLB_Mode == 1) {
-    int min_index;
-    int min_objs;
-    int i;
-
-
-    min_index = -1;
-    min_objs = MAXINT;
-
-    for (i = 0; i < Num_PEs; i++) {
-      if (((&PE_Data[i])->available) && ((&PE_Data[i])->cluster == cluster)) {
-       if ((&PE_Data[i])->num_objs < min_objs) {
-         min_index = i;
-         min_objs = (&PE_Data[i])->num_objs;
-       } else if (((&PE_Data[i])->num_objs == min_objs) &&
-                  ((&PE_Data[i])->num_wan_msgs < (&PE_Data[min_index])->num_wan_msgs)) {
-         min_index = i;
-         min_objs = (&PE_Data[i])->num_objs;
-       } else if (((&PE_Data[i])->num_objs == min_objs) &&
-                  ((&PE_Data[i])->num_wan_msgs == (&PE_Data[min_index])->num_wan_msgs) &&
-                  ((&PE_Data[i])->scaled_load < (&PE_Data[min_index])->scaled_load)) {
-         min_index = i;
-         min_objs = (&PE_Data[i])->num_objs;
-       }
-      }
-    }
-
     return (min_index);
   } else {
     if (_lb_args.debug() > 0) {
@@ -619,7 +605,7 @@ void GridCommLB::Assign_Object_To_PE (int target_object, int target_pe)
 ** The Charm++ load balancing framework invokes this method to cause the
 ** load balancer to migrate objects to "better" PEs.
 */
-void GridCommLB::work (CentralLB::LDStats *stats, int count)
+void GridCommLB::work (LDStats *stats)
 {
   int i;
 
@@ -632,7 +618,7 @@ void GridCommLB::work (CentralLB::LDStats *stats, int count)
   stats->makeCommHash ();
 
   // Initialize object variables for the number of PEs and number of objects.
-  Num_PEs = count;
+  Num_PEs = stats->nprocs();
   Num_Objects = stats->n_objs;
 
   if (_lb_args.debug() > 0) {