Updating the migration and strategy cost
authorHarshitha <gplkrsh2@illinois.edu>
Thu, 29 Mar 2012 19:41:34 +0000 (14:41 -0500)
committerHarshitha <gplkrsh2@illinois.edu>
Thu, 29 Mar 2012 19:41:34 +0000 (14:41 -0500)
src/ck-core/cklocation.C
src/ck-ldb/AdaptiveLB.C
src/ck-ldb/CentralLB.C
src/ck-ldb/LBDatabase.C
src/ck-ldb/LBDatabase.h

index 7dcbf11118194c8763e76148eb0ca084442d5981..cca6035a995e5d2db5b4ce2acc44dac251048df7 100644 (file)
@@ -1136,10 +1136,11 @@ void CkMigratable::AtSync(int waitForMigration)
   double tmp = prev_load;
   prev_load = myRec->getObjTime();
   double current_load = prev_load - tmp;
-  myRec->getLBDB()->AddLoad(atsync_iteration, current_load);
 
-  myRec->getLBDB()->AtLocalBarrier(ldBarrierHandle);
-  return;
+  if (atsync_iteration != 0) {
+    myRec->getLBDB()->AddLoad(atsync_iteration, current_load);
+  }
+
 //
 //  if (atsync_iteration == 3) {
 //    myRec->getLBDB()->AtLocalBarrier(ldBarrierHandle);
index 8660b11b597be4b3576e25c723f2af6da3c13334..a2e43ab1274051f02aa51391af428e93c930e822 100644 (file)
@@ -91,6 +91,8 @@ void AdaptiveLB::work(LDStats* stats)
 
   CkPrintf("AdaptiveLB> Previous LB %d\n", is_prev_lb_refine);
 
+  refineLB->work(stats);
+  return;
   // Choose the right LB
   //
   // If communication overhead is 10% computation, then choose Scotch LB
index 0456dbc0039c22c248dadeff39f9766916fd8338..4fd93082ad396789b2648ff36913939e2398c762 100644 (file)
@@ -1448,6 +1448,7 @@ void CentralLB::CheckMigrationComplete()
     }
 
     //FIX ME!!! adaptive_struct.lb_migration_cost = (CkWallTimer() - start_lb_time);
+    theLbdb->SetMigrationCost(CkWallTimer() - start_lb_time);
 
     lbdone = 0;
     future_migrates_expected = -1;
@@ -1505,6 +1506,7 @@ LBMigrateMsg* CentralLB::Strategy(LDStats* stats)
              lbname, cur_ld_balancer, strat_end_time, strat_end_time-strat_start_time);
     // FIX ME!!! adaptive_struct.lb_strategy_cost = (strat_end_time - strat_start_time);
     //CkPrintf("Strategy cost %f %f %f\n", strat_end_time, strat_start_time, adaptive_struct.lb_strategy_cost);
+    theLbdb->SetStrategyCost(strat_end_time - strat_start_time);
   }
   return msg;
 #else
index 2d3875145ec312b5d4f8607cd2bba5c2a1682a02..b481b7dbb3af0aa44ec9834bd5ccf66d8170b71f 100644 (file)
 
 #include "NullLB.h"
 
+#define VEC_SIZE 500
+
 struct AdaptiveData {
   int iteration;
   double max_load;
   double avg_load;
-  double max_idle_time;
+  double max_idle_load_ratio;
   double idle_time;
 };
 
@@ -36,7 +38,6 @@ struct AdaptiveLBStructure {
   int global_max_iter_no;
   int global_recv_iter_counter;
   bool in_progress;
-  double prev_load;
   double lb_strategy_cost;
   double lb_migration_cost;
   bool lb_period_informed;
@@ -412,9 +413,9 @@ void LBDatabase::init(void)
   if (manualOn) TurnManualLBOn();
 #endif
   
-  max_load_vec.resize(100, 0.0);
-  total_load_vec.resize(100, 0.0);
-  total_contrib_vec.resize(100, 0.0);
+  max_load_vec.resize(VEC_SIZE, 0.0);
+  total_load_vec.resize(VEC_SIZE, 0.0);
+  total_contrib_vec.resize(VEC_SIZE, 0.0);
   max_iteration = -1;
 
   // If metabalancer enabled, initialize the variables
@@ -424,7 +425,6 @@ void LBDatabase::init(void)
   adaptive_struct.global_max_iter_no = 0;
   adaptive_struct.global_recv_iter_counter = 0;
   adaptive_struct.in_progress = false;
-  adaptive_struct.prev_load = 0.0;
   adaptive_struct.lb_strategy_cost = 0.0;
   adaptive_struct.lb_migration_cost = 0.0;
   adaptive_struct.lb_msg_send_no = 0;
@@ -570,7 +570,6 @@ void LBDatabase::ResumeClients() {
   adaptive_struct.global_max_iter_no = 0;
   adaptive_struct.global_recv_iter_counter = 0;
   adaptive_struct.in_progress = false;
-  adaptive_struct.prev_load = 0.0;
   adaptive_struct.lb_strategy_cost = 0.0;
   adaptive_struct.lb_migration_cost = 0.0;
   adaptive_struct.lb_msg_send_no = 0;
@@ -581,9 +580,9 @@ void LBDatabase::ResumeClients() {
   total_load_vec.clear();
   total_contrib_vec.clear();
 
-  max_load_vec.resize(100, 0.0);
-  total_load_vec.resize(100, 0.0);
-  total_contrib_vec.resize(100, 0.0);
+  max_load_vec.resize(VEC_SIZE, 0.0);
+  total_load_vec.resize(VEC_SIZE, 0.0);
+  total_contrib_vec.resize(VEC_SIZE, 0.0);
 
   LDResumeClients(myLDHandle);
 }
@@ -637,9 +636,9 @@ void LBDatabase::ReceiveMinStats(CkReductionMsg *msg) {
   double avg = load[2]/load[1];
   double max = load[3];
   double avg_idle = load[4]/load[1];
-  double max_idle = load[5];
+  double max_idle_load_ratio = load[5];
   int iteration_n = load[0];
-  CkPrintf("** [%d] Iteration Avg load: %lf Max load: %lf Avg Idle : %lf Max Idle : %lf for %lf procs\n",iteration_n, avg, max, avg_idle, max_idle, load[1]);
+  CkPrintf("** [%d] Iteration Avg load: %lf Max load: %lf Avg Idle : %lf Max Idle : %lf for %lf procs\n",iteration_n, avg, max, avg_idle, max_idle_load_ratio, load[1]);
   delete msg;
  
   // Store the data for this iteration
@@ -648,7 +647,7 @@ void LBDatabase::ReceiveMinStats(CkReductionMsg *msg) {
   data.iteration = adaptive_struct.lb_no_iterations;
   data.max_load = max;
   data.avg_load = avg;
-  data.max_idle_time = max_idle;
+  data.max_idle_load_ratio = max_idle_load_ratio;
   data.idle_time = avg_idle;
   adaptive_lbdb.history_data.push_back(data);
 
@@ -664,8 +663,8 @@ void LBDatabase::ReceiveMinStats(CkReductionMsg *msg) {
   // If the max/avg ratio is greater than the threshold and also this is not the
   // step immediately after load balancing, carry out load balancing
   //if (max/avg >= 1.1 && adaptive_lbdb.history_data.size() > 4) {
-  if ((max_idle >= 0.1 || max/avg >= 1.5) && adaptive_lbdb.history_data.size() > 4) {
-    CkPrintf("Carry out load balancing step at iter max/avg(%lf) and max_idle ratio (%lf)\n", max/avg, max_idle);
+  if ((max_idle_load_ratio >= 0.1 || max/avg >= 1.5) && adaptive_lbdb.history_data.size() > 4) {
+    CkPrintf("Carry out load balancing step at iter max/avg(%lf) and max_idle_load_ratio ratio (%lf)\n", max/avg, max_idle_load_ratio);
 //    if (!adaptive_struct.lb_period_informed) {
 //      // Just for testing
 //      adaptive_struct.lb_calculated_period = 40;
@@ -938,6 +937,14 @@ bool LBDatabase::isStrategyComm() {
   return adaptive_struct.isCommLB;
 }
 
+void LBDatabase::SetMigrationCost(double lb_migration_cost) {
+  adaptive_struct.lb_migration_cost = lb_migration_cost;
+}
+
+void LBDatabase::SetStrategyCost(double lb_strategy_cost) {
+  adaptive_struct.lb_strategy_cost = lb_strategy_cost;
+}
+
 /*
   callable from user's code
 */
index 73ddd25f22b37a928a46fcafba2cf6eddf9da400..7f0ec235e9be0457edf880eaaa6c304aba8dd5a9 100644 (file)
@@ -381,6 +381,9 @@ public:
     lb_avg = after_lb_avg;
   }
 
+  void SetMigrationCost(double lb_migration_cost);
+  void SetStrategyCost(double lb_strategy_cost);
+
 private:
   //CProxy_LBDatabase thisProxy;
   int mystep;