Changed to use macro
authorHarshitha <gplkrsh2@illinois.edu>
Sun, 1 Apr 2012 22:32:20 +0000 (22:32 +0000)
committerHarshitha <gplkrsh2@illinois.edu>
Sun, 1 Apr 2012 22:32:20 +0000 (22:32 +0000)
src/ck-ldb/CentralLB.C
src/ck-ldb/LBDatabase.C

index 4fd93082ad396789b2648ff36913939e2398c762..d1fef876993af3e728bae1ba559a8d91fc6f22e1 100644 (file)
@@ -277,7 +277,8 @@ void CentralLB::ProcessAtSync()
  double bg_walltime;
  theLbdb->GetTime(&total_load,&total_load, &idle_time, &bg_walltime, &bg_walltime);
  theLbdb->IdleTime(&idle_time);
  double bg_walltime;
  theLbdb->GetTime(&total_load,&total_load, &idle_time, &bg_walltime, &bg_walltime);
  theLbdb->IdleTime(&idle_time);
- CkPrintf("Total walltime [%d] %lf: %lf: %lf final laod: %lf\n", CkMyPe(), total_load, idle_time, bg_walltime, (total_load - idle_time));
+ CkPrintf("Total walltime [%d] %lf: %lf: %lf final laod: %lf\n", CkMyPe(),
+    total_load, idle_time, bg_walltime, (total_load - idle_time - bg_walltime));
 
 
 
 
 
 
index 9deae77d2e4a02927ecbec0ff0db1c4aba9947f3..5f070ad2dfc7177ba6c4bb469cc2a17692b6c993 100644 (file)
@@ -19,6 +19,7 @@
 
 #define VEC_SIZE 500
 #define IMB_TOLERANCE 1.1
 
 #define VEC_SIZE 500
 #define IMB_TOLERANCE 1.1
+#define IDLE_LOAD_TOLERANCE 0.3
 
 struct AdaptiveData {
   int iteration;
 
 struct AdaptiveData {
   int iteration;
@@ -59,12 +60,16 @@ struct AdaptiveLBStructure {
 
 CkReductionMsg* lbDataCollection(int nMsg, CkReductionMsg** msgs) {
   double lb_data[6];
 
 CkReductionMsg* lbDataCollection(int nMsg, CkReductionMsg** msgs) {
   double lb_data[6];
+  lb_data[1] = 0.0;
   lb_data[2] = 0.0;
   lb_data[3] = 0.0;
   lb_data[4] = 0.0;
   lb_data[5] = 0.0;
   for (int i = 0; i < nMsg; i++) {
     CkAssert(msgs[i]->getSize() == 6*sizeof(double));
   lb_data[2] = 0.0;
   lb_data[3] = 0.0;
   lb_data[4] = 0.0;
   lb_data[5] = 0.0;
   for (int i = 0; i < nMsg; i++) {
     CkAssert(msgs[i]->getSize() == 6*sizeof(double));
+    if (msgs[i]->getSize() != 6*sizeof(double)) {
+      CkPrintf("Error!!! Reduction not correct. Msg size is %d\n", msgs[i]->getSize());
+    }
     double* m = (double *)msgs[i]->getData();
     // Total count
     lb_data[1] += m[1];
     double* m = (double *)msgs[i]->getData();
     // Total count
     lb_data[1] += m[1];
@@ -613,7 +618,7 @@ bool LBDatabase::AddLoad(int iteration, double load) {
   if (total_contrib_vec[iteration] == getLBDB()->ObjDataCount()) {
     double idle_time;
     IdleTime(&idle_time);
   if (total_contrib_vec[iteration] == getLBDB()->ObjDataCount()) {
     double idle_time;
     IdleTime(&idle_time);
-    CkPrintf("[%d] Idle time %lf for iteration %d\n", CkMyPe(), idle_time, iteration);
+    //CkPrintf("[%d] Idle time %lf for iteration %d\n", CkMyPe(), idle_time, iteration);
     // Skips the 0th iteration collection of stats hence...
     idle_time = idle_time * getLBDB()->ObjDataCount() /
        (adaptive_struct.total_syncs_called + getLBDB()->ObjDataCount());
     // Skips the 0th iteration collection of stats hence...
     idle_time = idle_time * getLBDB()->ObjDataCount() /
        (adaptive_struct.total_syncs_called + getLBDB()->ObjDataCount());
@@ -632,9 +637,9 @@ bool LBDatabase::AddLoad(int iteration, double load) {
       lb_data[5] = idle_time/total_load_vec[iteration];
     }
 
       lb_data[5] = idle_time/total_load_vec[iteration];
     }
 
-    CkPrintf("[%d] sends total load %lf idle time %lf ratio of idle/load %lf at iter %d\n", CkMyPe(),
-        total_load_vec[iteration], idle_time,
-        idle_time/total_load_vec[iteration], adaptive_struct.lb_no_iterations);
+   // CkPrintf("[%d] sends total load %lf idle time %lf ratio of idle/load %lf at iter %d\n", CkMyPe(),
+   //     total_load_vec[iteration], idle_time,
+   //     idle_time/total_load_vec[iteration], adaptive_struct.lb_no_iterations);
 
     CkCallback cb(CkIndex_LBDatabase::ReceiveMinStats((CkReductionMsg*)NULL), thisProxy[0]);
     contribute(6*sizeof(double), lb_data, lbDataCollectionType, cb);
 
     CkCallback cb(CkIndex_LBDatabase::ReceiveMinStats((CkReductionMsg*)NULL), thisProxy[0]);
     contribute(6*sizeof(double), lb_data, lbDataCollectionType, cb);
@@ -679,7 +684,7 @@ void LBDatabase::ReceiveMinStats(CkReductionMsg *msg) {
   GetPrevLBData(tmp1, tmp2);
   double tolerate_imb = IMB_TOLERANCE * tmp2;
 
   GetPrevLBData(tmp1, tmp2);
   double tolerate_imb = IMB_TOLERANCE * tmp2;
 
-  if ((max_idle_load_ratio >= 0.1 || max/avg >= tolerate_imb) && adaptive_lbdb.history_data.size() > 4) {
+  if ((max_idle_load_ratio >= IDLE_LOAD_TOLERANCE || max/avg >= tolerate_imb) && 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
     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
@@ -763,7 +768,10 @@ bool LBDatabase::generatePlan(int& period) {
   double tmp2;
   GetPrevLBData(tmp1, tmp2);
   
   double tmp2;
   GetPrevLBData(tmp1, tmp2);
   
-  double tolerate_imb = IMB_TOLERANCE * tmp2;
+  double tolerate_imb = tmp2;
+  if (max/avg < tolerate_imb) {
+    tolerate_imb = 1.0;
+  }
 
   return getPeriodForStrategy(tolerate_imb, 1, period);
 
 
   return getPeriodForStrategy(tolerate_imb, 1, period);
 
@@ -799,6 +807,7 @@ bool LBDatabase::generatePlan(int& period) {
 bool LBDatabase::getPeriodForStrategy(double new_load_percent, double overhead_percent, int& period) {
   double mslope, aslope, mc, ac;
   getLineEq(new_load_percent, aslope, ac, mslope, mc);
 bool LBDatabase::getPeriodForStrategy(double new_load_percent, double overhead_percent, int& period) {
   double mslope, aslope, mc, ac;
   getLineEq(new_load_percent, aslope, ac, mslope, mc);
+  CkPrintf("new load percent %lf\n", new_load_percent);
   CkPrintf("\n max: %fx + %f; avg: %fx + %f\n", mslope, mc, aslope, ac);
   double a = (mslope - aslope)/2;
   double b = (mc - ac);
   CkPrintf("\n max: %fx + %f; avg: %fx + %f\n", mslope, mc, aslope, ac);
   double a = (mslope - aslope)/2;
   double b = (mc - ac);