Adaptively identify lb period for static load
authorHarshitha Menon <gplkrsh2@illinois.edu>
Tue, 22 Nov 2011 19:11:04 +0000 (13:11 -0600)
committerHarshitha Menon <gplkrsh2@illinois.edu>
Tue, 22 Nov 2011 19:11:04 +0000 (13:11 -0600)
src/ck-ldb/CentralLB.C
src/ck-ldb/CentralLB.h

index 2265a342ecc798b6744fa79b3c66e1e97c39e09c..f0cd019a1c7717f48c1234cc55f5d9149f067c73 100644 (file)
@@ -203,7 +203,7 @@ void CentralLB::turnOff()
 
 void CentralLB::AtSync()
 {
 
 void CentralLB::AtSync()
 {
-  CkPrintf("AtSync CEntral LB\n");
+  CkPrintf("AtSync CEntral LB [%d]\n", CkMyPe());
 #if CMK_LBDB_ON
   DEBUGF(("[%d] CentralLB AtSync step %d!!!!!\n",CkMyPe(),step()));
 
 #if CMK_LBDB_ON
   DEBUGF(("[%d] CentralLB AtSync step %d!!!!!\n",CkMyPe(),step()));
 
@@ -344,33 +344,40 @@ void CentralLB::ReceiveMinStats(CkReductionMsg *msg) {
     return;
   }
 
     return;
   }
 
-  // Some heuristics for lbperiod
+  // Generate the plan for the adaptive strategy
+  if (generatePlan()) {
+    thisProxy.ResumeClients(lb_ideal_period, 0);
+  } else {
+    thisProxy.ResumeClients(0);
+  }
+}
+
+bool CentralLB::generatePlan() {
+  if (adaptive_lbdb.history_data.size() <= 3) {
+    return false;
+  }
 
 
+  // Some heuristics for lbperiod
   // If constant load or almost constant,
   // then max * new_lb_period > avg * new_lb_period + lb_cost
   // If constant load or almost constant,
   // then max * new_lb_period > avg * new_lb_period + lb_cost
-  if (adaptive_lbdb.history_data.size() > 3) {
-    max = 0.0;
-    avg = 0.0;
-    for (int i = 1; i < adaptive_lbdb.history_data.size(); i++) {
-      data = adaptive_lbdb.history_data[i];
-      max += data.max_load;
-      avg += data.avg_load;
-    }
-    max /= (lb_no_iterations - adaptive_lbdb.history_data[0].iteration);
-    avg /= (lb_no_iterations - adaptive_lbdb.history_data[0].iteration);
+  double max = 0.0;
+  double avg = 0.0;
+  AdaptiveData data;
+  for (int i = 1; i < adaptive_lbdb.history_data.size(); i++) {
+    data = adaptive_lbdb.history_data[i];
+    max += data.max_load;
+    avg += data.avg_load;
+  }
+  max /= (lb_no_iterations - adaptive_lbdb.history_data[0].iteration);
+  avg /= (lb_no_iterations - adaptive_lbdb.history_data[0].iteration);
 
 
-    int ideal_period = (lb_strategy_cost + lb_migration_cost) / (max - avg);
-    CkPrintf("max : %lf, avg: %lf, strat cost: %lf, migration_cost: %lf, idealperiod : %d \n",
-        max, avg, lb_strategy_cost, lb_migration_cost, ideal_period);
+  lb_ideal_period = (lb_strategy_cost + lb_migration_cost) / (max - avg);
+  CkPrintf("max : %lf, avg: %lf, strat cost: %lf, migration_cost: %lf, idealperiod : %d \n",
+      max, avg, lb_strategy_cost, lb_migration_cost, lb_ideal_period);
 
 
-    CkPrintf("Not very overloaded\n\n");
-    thisProxy.ResumeClients(ideal_period, 0);
-  } else {
-    thisProxy.ResumeClients(0);
-  }
+  return true;
 }
 
 }
 
-
 // called only on 0
 void CentralLB::ReceiveCounts(CkReductionMsg  *msg)
 {
 // called only on 0
 void CentralLB::ReceiveCounts(CkReductionMsg  *msg)
 {
index 4c41682a85534dfe334f902a47755f1af8235dc6..2d04e41fba01e488a3c3842ff27569df9bc2bcb1 100644 (file)
@@ -255,6 +255,7 @@ private:
 
   void BuildStatsMsg();
   void buildStats();
 
   void BuildStatsMsg();
   void buildStats();
+  bool generatePlan();
 
 public:
   int useMem();
 
 public:
   int useMem();