Made a few more refinements to the algorithm for determining the "best"
authorGreg Koenig <koenig@uiuc.edu>
Thu, 14 Dec 2006 19:14:50 +0000 (19:14 +0000)
committerGreg Koenig <koenig@uiuc.edu>
Thu, 14 Dec 2006 19:14:50 +0000 (19:14 +0000)
PE to place an object onto.  Also, changed the default mode of the balancer
to use the discrete algorithm instead of the scaled load algorithm since
this mode usually works better in more cases.

src/ck-ldb/GridCommLB.C
src/ck-ldb/GridCommLB.h

index 1e3e460ea79b6834f430e302f826fd0698d9c295..21b04698ebb6dace1d1084d0dc1b7ae9f5777641 100644 (file)
@@ -470,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;
@@ -532,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_objs < (&PE_Data[min_index])->num_wan_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) &&
-                  ((&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) {
index d1ea556e21ba199d1e7bb40b46eab76e758fe1cf..8f00707116c9268b7943204f05a42e65acab5d88 100644 (file)
@@ -12,7 +12,7 @@
 
 #define CK_LDB_GRIDCOMMLB_MODE 0
 #define CK_LDB_GRIDCOMMLB_BACKGROUND_LOAD 1
-#define CK_LDB_GRIDCOMMLB_LOAD_TOLERANCE 0.05
+#define CK_LDB_GRIDCOMMLB_LOAD_TOLERANCE 0.10
 
 #ifndef MAXINT
 #define MAXINT 2147483647