cleanup
authorHarshitha <gplkrsh2@illinois.edu>
Mon, 15 Oct 2012 03:07:13 +0000 (22:07 -0500)
committerHarshitha <gplkrsh2@illinois.edu>
Mon, 15 Oct 2012 03:07:13 +0000 (22:07 -0500)
src/ck-core/cklocation.C
src/ck-ldb/CentralLB.C
src/ck-ldb/CentralLB.ci
src/ck-ldb/CentralLB.h
src/ck-ldb/CommAwareRefineLB.C
src/ck-ldb/LBDBManager.h
src/ck-ldb/LBDatabase.C.orig [deleted file]

index 6840a967e3dd00bed8f90e702b4e6d0d48ce8fd0..472e87a19fc9bfd4642431e1ce8071e1aa6bffc0 100644 (file)
@@ -1225,7 +1225,7 @@ void CkMigratable::AtSync(int waitForMigration)
   DEBL((AA"Element %s going to sync\n"AB,idx2str(thisIndexMax)));
   // model-based load balancing, ask user to provide cpu load
   if (usesAutoMeasure == CmiFalse) UserSetLBLoad();
-  
+
   if (!_lb_args.metaLbOn()) {
     myRec->getLBDB()->AtLocalBarrier(ldBarrierHandle);
     return;
index 2cf7a188da26c5a32017aabdfe564d161aa0e7b7..feeba01d5191f4482fe4ee2a95f855c0909540de 100644 (file)
@@ -48,6 +48,13 @@ CreateLBFunc_Def(CentralLB, "CentralLB base class")
 static void getPredictedLoadWithMsg(BaseLB::LDStats* stats, int count, 
                             LBMigrateMsg *, LBInfo &info, int considerComm);
 
+/*
+   void CreateCentralLB()
+   {
+   CProxy_CentralLB::ckNew(0);
+   }
+ */
+
 void CentralLB::staticStartLB(void* data)
 {
   CentralLB *me = (CentralLB*)(data);
@@ -111,20 +118,6 @@ void CentralLB::initLB(const CkLBOptions &opt)
   if (_lb_args.statsOn()) theLbdb->CollectStatsOn();
 
   load_balancer_created = 1;
-
-  // If metabalancer enabled, initialize the variables
- // adaptive_struct.lb_ideal_period =  INT_MAX;
- // adaptive_struct.lb_calculated_period = INT_MAX;
- // adaptive_struct.lb_no_iterations = -1;
- // 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;
- // adaptive_struct.lb_msg_recv_no = 0;
- // local_state = OFF;
 #endif
 }
 
@@ -191,9 +184,6 @@ void CentralLB::AtSync()
 
 void CentralLB::ProcessAtSync()
 {
-
-
-
 #if CMK_LBDB_ON
   if (reduction_started) return;              // reducton in progress
 
@@ -782,7 +772,6 @@ void CentralLB::ReceiveMigration(LBMigrateMsg *m)
   CkCallback cb(CkIndex_CentralLB::ProcessReceiveMigration((CkReductionMsg*)NULL),
                   thisProxy);
   contribute(0, NULL, CkReduction::max_int, cb);
-
 #endif
 }
 
index f974774a3a9ef93645dab5edf680be66ba739a20..92806016babd64a12f95c112b23dee8d9939c311 100644 (file)
@@ -24,7 +24,6 @@ group [migratable] CentralLB : BaseLB {
   entry void ReceiveMigration(LBMigrateMsg*);  
   entry void ProcessReceiveMigration(CkReductionMsg  *);
   entry void MissMigrate(int);
-
 };
 
 };
index 0f5ca31baef0437b97e3fd8c1cba045a3fca7012..7c23332e3f1044f0647c20d2b4437ca5fd151034 100644 (file)
@@ -253,9 +253,6 @@ private:
 
   void BuildStatsMsg();
   void buildStats();
-  bool generatePlan(int& period);
-  bool getLineEq(double& aslope, double& ac, double& mslope, double& mc);
-  bool getPeriodForLinear(double a, double b, double c, int& period);
 
 public:
   int useMem();
index 67d8eeec524e0322d77ac6f6f4c7ad022e86ccee..33d88b1ad21d225b03df9e678fde5f3483408174 100644 (file)
@@ -296,25 +296,6 @@ void CommAwareRefineLB::work(LDStats* stats) {
     }
   }
 
-  int local_comm = 0;
-  int remote_comm = 0;
-  for (int i=0; i< ogr->vertices.size(); i++) {
-    for(int j = 0; j < ogr->vertices[i].sendToList.size(); j++) {
-      vert = ogr->vertices[i].sendToList[j].getNeighborId();
-      if(ogr->vertices[i].getNewPe() == ogr->vertices[vert].getNewPe()) {
-        local_comm++;
-      } else {
-        remote_comm++;
-      }
-    }
-  }
-  CkPrintf("Local communication: %d Remote communication: %d\n", local_comm, remote_comm);
-  stats->local_comm = local_comm;
-  stats->remote_comm = remote_comm;
-
-  stats->is_prev_lb_refine = 3;
-  stats->after_lb_max = 0;
-  stats->after_lb_avg = 0;
   //CkPrintf("CommAwareRefine> After lb max load: %lf avg load: %lf\n", max_load, avg_load/parr->procs.size());
 
   /** ============================== CLEANUP ================================ */
index e7755d54c701100e534c1266485bc7ed0b12aa52..d85fd2200289119bf535c4727cb67751f549bb6e 100644 (file)
@@ -78,8 +78,6 @@ public:
   void insert(LBOM *om);
 
   LDOMHandle AddOM(LDOMid _userID, void* _userData, LDCallbacks _callbacks);
-  
-
   LDObjHandle AddObj(LDOMHandle _h, LDObjid _id, void *_userData,
                     CmiBool _migratable);
   void UnregisterObj(LDObjHandle _h);
diff --git a/src/ck-ldb/LBDatabase.C.orig b/src/ck-ldb/LBDatabase.C.orig
deleted file mode 100644 (file)
index 3eef547..0000000
+++ /dev/null
@@ -1,1334 +0,0 @@
-/**
- * \addtogroup CkLdb
-*/
-/*@{*/
-
-#include "converse.h"
-
-/*
- * This C++ file contains the Charm stub functions
- */
-
-#include "LBDatabase.h"
-#include "LBSimulation.h"
-#include "topology.h"
-
-#include "limits.h"
-
-#include "NullLB.h"
-
-#define VEC_SIZE 500
-#define IMB_TOLERANCE 1.1
-#define IDLE_LOAD_TOLERANCE 0.3
-#define NEGLECT_IDLE 2 // Should never be == 1
-
-#   define DEBAD(x) /*CkPrintf x*/
-
-struct AdaptiveData {
-  double iteration;
-  double max_load;
-  double avg_load;
-  double max_idle_load_ratio;
-  double idle_time;
-};
-
-struct AdaptiveLBDatabase {
-  std::vector<AdaptiveData> history_data;
-} adaptive_lbdb;
-
-struct AdaptiveLBInfo {
-  double max_avg_ratio;
-  double remote_local_ratio;
-};
-
-struct AdaptiveLBStructure {
-  int tentative_period;
-  int final_lb_period;
-  int lb_calculated_period;
-  int lb_no_iterations;
-  int global_max_iter_no;
-  int tentative_max_iter_no;
-  int global_recv_iter_counter;
-  bool in_progress;
-  double lb_strategy_cost;
-  double lb_migration_cost;
-  bool lb_period_informed;
-  bool doCommStrategy;
-  int lb_msg_send_no;
-  int lb_msg_recv_no;
-  int total_syncs_called;
-  int last_lb_type;
-  AdaptiveLBInfo greedy_info;
-  AdaptiveLBInfo refine_info;
-  AdaptiveLBInfo comm_info;
-  AdaptiveLBInfo comm_refine_info;
-} adaptive_struct;
-
-
-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));
-    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];
-    // Avg load
-    lb_data[2] += m[2];
-    // Max load
-    lb_data[3] = ((m[3] > lb_data[3])? m[3] : lb_data[3]);
-    // Avg idle
-    lb_data[4] += m[4];
-    // Max idle
-    lb_data[5] = ((m[5] > lb_data[5]) ? m[5] : lb_data[5]);
-    if (i == 0) {
-      // Iteration no
-      lb_data[0] = m[0];
-    }
-    if (m[0] != lb_data[0]) {
-      CkPrintf("Error!!! Reduction is intermingled between iteration %lf and\
-      %lf\n", lb_data[0], m[0]);
-    }
-  }
-  return CkReductionMsg::buildNew(6*sizeof(double), lb_data);
-}
-
-/*global*/ CkReduction::reducerType lbDataCollectionType;
-/*initcall*/ void registerLBDataCollection(void) {
-  lbDataCollectionType = CkReduction::addReducer(lbDataCollection);
-}
-
-CkGroupID _lbdb;
-
-CkpvDeclare(int, numLoadBalancers);  /**< num of lb created */
-CkpvDeclare(int, hasNullLB);         /**< true if NullLB is created */
-CkpvDeclare(int, lbdatabaseInited);  /**< true if lbdatabase is inited */
-
-// command line options
-CkLBArgs _lb_args;
-int _lb_predict=0;
-int _lb_predict_delay=10;
-int _lb_predict_window=20;
-
-// registry class stores all load balancers linked and created at runtime
-class LBDBRegistry {
-friend class LBDBInit;
-friend class LBDatabase;
-private:
-  // table for all available LBs linked in
-  struct LBDBEntry {
-    const char *name;
-    LBCreateFn  cfn;
-    LBAllocFn   afn;
-    const char *help;
-    int        shown;          // if 0, donot show in help page
-    LBDBEntry(): name(0), cfn(0), afn(0), help(0), shown(1) {}
-    LBDBEntry(int) {}
-    LBDBEntry(const char *n, LBCreateFn cf, LBAllocFn af, 
-              const char *h, int show=1):
-      name(n), cfn(cf), afn(af), help(h), shown(show) {};
-  };
-  CkVec<LBDBEntry> lbtables;           // a list of available LBs linked
-  CkVec<const char *>   compile_lbs;   // load balancers at compile time
-  CkVec<const char *>   runtime_lbs;   // load balancers at run time
-public:
-  LBDBRegistry() {}
-  void displayLBs()
-  {
-    CmiPrintf("\nAvailable load balancers:\n");
-    for (int i=0; i<lbtables.length(); i++) {
-      LBDBEntry &entry = lbtables[i];
-      if (entry.shown) CmiPrintf("* %s:        %s\n", entry.name, entry.help);
-    }
-    CmiPrintf("\n");
-  }
-  void addEntry(const char *name, LBCreateFn fn, LBAllocFn afn, const char *help, int shown) {
-    lbtables.push_back(LBDBEntry(name, fn, afn, help, shown));
-  }
-  void addCompiletimeBalancer(const char *name) {
-    compile_lbs.push_back(name); 
-  }
-  void addRuntimeBalancer(const char *name) {
-    runtime_lbs.push_back(name); 
-  }
-  LBCreateFn search(const char *name) {
-    char *ptr = strpbrk((char *)name, ":,");
-    int slen = ptr!=NULL?ptr-name:strlen(name);
-    for (int i=0; i<lbtables.length(); i++)
-      if (0==strncmp(name, lbtables[i].name, slen)) return lbtables[i].cfn;
-    return NULL;
-  }
-  LBAllocFn getLBAllocFn(const char *name) {
-    char *ptr = strpbrk((char *)name, ":,");
-    int slen = ptr-name;
-    for (int i=0; i<lbtables.length(); i++)
-      if (0==strncmp(name, lbtables[i].name, slen)) return lbtables[i].afn;
-    return NULL;
-  }
-};
-
-static LBDBRegistry lbRegistry;
-
-void LBDefaultCreate(const char *lbname)
-{
-  lbRegistry.addCompiletimeBalancer(lbname);
-}
-
-// default is to show the helper
-void LBRegisterBalancer(const char *name, LBCreateFn fn, LBAllocFn afn, const char *help, int shown)
-{
-  lbRegistry.addEntry(name, fn, afn, help, shown);
-}
-
-LBAllocFn getLBAllocFn(char *lbname) {
-    return lbRegistry.getLBAllocFn(lbname);
-}
-
-LBCreateFn getLBCreateFn(const char *lbname) {
-    return lbRegistry.search(lbname);
-}
-// create a load balancer group using the strategy name
-static void createLoadBalancer(const char *lbname)
-{
-    LBCreateFn fn = lbRegistry.search(lbname);
-    if (!fn) {    // invalid lb name
-      CmiPrintf("Abort: Unknown load balancer: '%s'!\n", lbname);
-      lbRegistry.displayLBs();    // display help page
-      CkAbort("Abort");
-    }
-    // invoke function to create load balancer 
-    fn();
-}
-
-// mainchare
-LBDBInit::LBDBInit(CkArgMsg *m)
-{
-#if CMK_LBDB_ON
-  _lbdb = CProxy_LBDatabase::ckNew();
-
-  // runtime specified load balancer
-  if (lbRegistry.runtime_lbs.size() > 0) {
-    for (int i=0; i<lbRegistry.runtime_lbs.size(); i++) {
-      const char *balancer = lbRegistry.runtime_lbs[i];
-      createLoadBalancer(balancer);
-    }
-  }
-  else if (lbRegistry.compile_lbs.size() > 0) {
-    for (int i=0; i<lbRegistry.compile_lbs.size(); i++) {
-      const char* balancer = lbRegistry.compile_lbs[i];
-      createLoadBalancer(balancer);
-    }
-  }
-  else {
-    // NullLB is the default when none of above lb created
-    // note user may create his own load balancer in his code manually like
-    // in NAMD, but never mind NullLB can disable itself if there is 
-    // a non NULL LB.
-    createLoadBalancer("NullLB");
-  }
-
-  // simulation mode
-  if (LBSimulation::doSimulation) {
-    CmiPrintf("Charm++> Entering Load Balancer Simulation Mode ... \n");
-    CProxy_LBDatabase(_lbdb).ckLocalBranch()->StartLB();
-  }
-#endif
-  delete m;
-}
-
-// called from init.C
-void _loadbalancerInit()
-{
-  CkpvInitialize(int, lbdatabaseInited);
-  CkpvAccess(lbdatabaseInited) = 0;
-  CkpvInitialize(int, numLoadBalancers);
-  CkpvAccess(numLoadBalancers) = 0;
-  CkpvInitialize(int, hasNullLB);
-  CkpvAccess(hasNullLB) = 0;
-
-  char **argv = CkGetArgv();
-  char *balancer = NULL;
-  CmiArgGroup("Charm++","Load Balancer");
-  while (CmiGetArgStringDesc(argv, "+balancer", &balancer, "Use this load balancer")) {
-    if (CkMyRank() == 0)                
-      lbRegistry.addRuntimeBalancer(balancer);   /* lbRegistry is a static */
-  }
-
-  // set up init value for LBPeriod time in seconds
-  // it can also be set by calling LDSetLBPeriod()
-  CmiGetArgDoubleDesc(argv,"+LBPeriod", &_lb_args.lbperiod(),"the minimum time period in seconds allowed for two consecutive automatic load balancing");
-  _lb_args.loop() = CmiGetArgFlagDesc(argv, "+LBLoop", "Use multiple load balancing strategies in loop");
-
-  // now called in cldb.c: CldModuleGeneralInit()
-  // registerLBTopos();
-  CmiGetArgStringDesc(argv, "+LBTopo", &_lbtopo, "define load balancing topology");
-  //Read the K parameter for RefineKLB
-  CmiGetArgIntDesc(argv, "+LBNumMoves", &_lb_args.percentMovesAllowed() , "Percentage of chares to be moved (used by RefineKLB) [0-100]");
-
-  /**************** FUTURE PREDICTOR ****************/
-  _lb_predict = CmiGetArgFlagDesc(argv, "+LBPredictor", "Turn on LB future predictor");
-  CmiGetArgIntDesc(argv, "+LBPredictorDelay", &_lb_predict_delay, "Number of balance steps before learning a model");
-  CmiGetArgIntDesc(argv, "+LBPredictorWindow", &_lb_predict_window, "Number of steps to use to learn a model");
-  if (_lb_predict_window < _lb_predict_delay) {
-    CmiPrintf("LB> [%d] Argument LBPredictorWindow (%d) less than LBPredictorDelay (%d) , fixing\n", CkMyPe(), _lb_predict_window, _lb_predict_delay);
-    _lb_predict_delay = _lb_predict_window;
-  }
-
-  /******************* SIMULATION *******************/
-  // get the step number at which to dump the LB database
-  CmiGetArgIntDesc(argv, "+LBVersion", &_lb_args.lbversion(), "LB database file version number");
-  CmiGetArgIntDesc(argv, "+LBCentPE", &_lb_args.central_pe(), "CentralLB processor");
-  int _lb_dump_activated = 0;
-  if (CmiGetArgIntDesc(argv, "+LBDump", &LBSimulation::dumpStep, "Dump the LB state from this step"))
-    _lb_dump_activated = 1;
-  if (_lb_dump_activated && LBSimulation::dumpStep < 0) {
-    CmiPrintf("LB> Argument LBDump (%d) negative, setting to 0\n",LBSimulation::dumpStep);
-    LBSimulation::dumpStep = 0;
-  }
-  CmiGetArgIntDesc(argv, "+LBDumpSteps", &LBSimulation::dumpStepSize, "Dump the LB state for this amount of steps");
-  if (LBSimulation::dumpStepSize <= 0) {
-    CmiPrintf("LB> Argument LBDumpSteps (%d) too small, setting to 1\n",LBSimulation::dumpStepSize);
-    LBSimulation::dumpStepSize = 1;
-  }
-  CmiGetArgStringDesc(argv, "+LBDumpFile", &LBSimulation::dumpFile, "Set the LB state file name");
-  // get the simulation flag and number. Now the flag can also be avoided by the presence of the number
-  LBSimulation::doSimulation = CmiGetArgIntDesc(argv, "+LBSim", &LBSimulation::simStep, "Read LB state from LBDumpFile since this step");
-  // check for stupid LBSim parameter
-  if (LBSimulation::doSimulation && LBSimulation::simStep < 0) {
-    CmiPrintf("LB> Argument LBSim (%d) invalid, should be >= 0\n");
-    CkExit();
-    return;
-  }
-  CmiGetArgIntDesc(argv, "+LBSimSteps", &LBSimulation::simStepSize, "Read LB state for this number of steps");
-  if (LBSimulation::simStepSize <= 0) {
-    CmiPrintf("LB> Argument LBSimSteps (%d) too small, setting to 1\n",LBSimulation::simStepSize);
-    LBSimulation::simStepSize = 1;
-  }
-
-
-  LBSimulation::simProcs = 0;
-  CmiGetArgIntDesc(argv, "+LBSimProcs", &LBSimulation::simProcs, "Number of target processors.");
-
-  LBSimulation::showDecisionsOnly = 
-    CmiGetArgFlagDesc(argv, "+LBShowDecisions",
-                     "Write to File: Load Balancing Object to Processor Map decisions during LB Simulation");
-
-  // force a global barrier after migration done
-  _lb_args.syncResume() = CmiGetArgFlagDesc(argv, "+LBSyncResume", 
-                  "LB performs a barrier after migration is finished");
-
-  // both +LBDebug and +LBDebug level should work
-  if (!CmiGetArgIntDesc(argv, "+LBDebug", &_lb_args.debug(), 
-                                          "Turn on LB debugging printouts"))
-    _lb_args.debug() = CmiGetArgFlagDesc(argv, "+LBDebug", 
-                                            "Turn on LB debugging printouts");
-
-  // getting the size of the team with +teamSize
-  if (!CmiGetArgIntDesc(argv, "+teamSize", &_lb_args.teamSize(), 
-                                          "Team size"))
-    _lb_args.teamSize() = 1;
-
-  // ask to print summary/quality of load balancer
-  _lb_args.printSummary() = CmiGetArgFlagDesc(argv, "+LBPrintSummary",
-               "Print load balancing result summary");
-
-  // to ignore baclground load
-  _lb_args.ignoreBgLoad() = CmiGetArgFlagDesc(argv, "+LBNoBackground", 
-                      "Load balancer ignores the background load.");
-#ifdef __BIGSIM__
-  _lb_args.ignoreBgLoad() = 1;
-#endif
-  _lb_args.migObjOnly() = CmiGetArgFlagDesc(argv, "+LBObjOnly", 
-                      "Only load balancing migratable objects, ignoring all others.");
-  if (_lb_args.migObjOnly()) _lb_args.ignoreBgLoad() = 1;
-
-  // assume all CPUs are identical
-  _lb_args.testPeSpeed() = CmiGetArgFlagDesc(argv, "+LBTestPESpeed", 
-                      "Load balancer test all CPUs speed.");
-  _lb_args.samePeSpeed() = CmiGetArgFlagDesc(argv, "+LBSameCpus", 
-                      "Load balancer assumes all CPUs are of same speed.");
-  if (!_lb_args.testPeSpeed()) _lb_args.samePeSpeed() = 1;
-
-  _lb_args.useCpuTime() = CmiGetArgFlagDesc(argv, "+LBUseCpuTime", 
-                      "Load balancer uses CPU time instead of wallclock time.");
-
-  // turn instrumentation off at startup
-  _lb_args.statsOn() = !CmiGetArgFlagDesc(argv, "+LBOff",
-                       "Turn load balancer instrumentation off");
-
-  // turn instrumentation of communicatin off at startup
-  _lb_args.traceComm() = !CmiGetArgFlagDesc(argv, "+LBCommOff",
-               "Turn load balancer instrumentation of communication off");
-
-  // set alpha and beeta
-  _lb_args.alpha() = PER_MESSAGE_SEND_OVERHEAD_DEFAULT;
-  _lb_args.beeta() = PER_BYTE_SEND_OVERHEAD_DEFAULT;
-  CmiGetArgDoubleDesc(argv,"+LBAlpha", &_lb_args.alpha(),
-                           "per message send overhead");
-  CmiGetArgDoubleDesc(argv,"+LBBeta", &_lb_args.beeta(),
-                           "per byte send overhead");
-
-  if (CkMyPe() == 0) {
-    if (_lb_args.debug()) {
-      CmiPrintf("CharmLB> Verbose level %d, load balancing period: %g seconds\n", _lb_args.debug(), _lb_args.lbperiod());
-    }
-    if (_lb_args.debug() > 1) {
-      CmiPrintf("CharmLB> Topology %s alpha: %es beta: %es.\n", _lbtopo, _lb_args.alpha(), _lb_args.beeta());
-    }
-    if (_lb_args.printSummary())
-      CmiPrintf("CharmLB> Load balancer print summary of load balancing result.\n");
-    if (_lb_args.ignoreBgLoad())
-      CmiPrintf("CharmLB> Load balancer ignores processor background load.\n");
-    if (_lb_args.samePeSpeed())
-      CmiPrintf("CharmLB> Load balancer assumes all CPUs are same.\n");
-    if (_lb_args.useCpuTime())
-      CmiPrintf("CharmLB> Load balancer uses CPU time instead of wallclock time.\n");
-    if (LBSimulation::doSimulation)
-      CmiPrintf("CharmLB> Load balancer running in simulation mode on file '%s' version %d.\n", LBSimulation::dumpFile, _lb_args.lbversion());
-    if (_lb_args.statsOn()==0)
-      CkPrintf("CharmLB> Load balancing instrumentation is off.\n");
-    if (_lb_args.traceComm()==0)
-      CkPrintf("CharmLB> Load balancing instrumentation for communication is off.\n");
-    if (_lb_args.migObjOnly())
-      CkPrintf("LB> Load balancing strategy ignores non-migratable objects.\n");
-  }
-}
-
-int LBDatabase::manualOn = 0;
-char *LBDatabase::avail_vector = NULL;
-CmiNodeLock avail_vector_lock;
-
-static LBRealType * _expectedLoad = NULL;
-
-void LBDatabase::initnodeFn()
-{
-  int proc;
-  int num_proc = CkNumPes();
-  avail_vector= new char[num_proc];
-  for(proc = 0; proc < num_proc; proc++)
-      avail_vector[proc] = 1;
-  avail_vector_lock = CmiCreateLock();
-
-  _expectedLoad = new LBRealType[num_proc];
-  for (proc=0; proc<num_proc; proc++) _expectedLoad[proc]=0.0;
-
-  //CkPrintf("Total objs in %d is %d\n", CkMyPe(), getLBDB()->ObjDataCount());
-}
-
-// called my constructor
-void LBDatabase::init(void) 
-{
-  //thisProxy = CProxy_LBDatabase(thisgroup);
-  myLDHandle = LDCreate();
-  mystep = 0;
-  nloadbalancers = 0;
-  new_ld_balancer = 0;
-
-  CkpvAccess(lbdatabaseInited) = 1;
-#if CMK_LBDB_ON
-  if (manualOn) TurnManualLBOn();
-#endif
-  
-  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;
-  prev_idle = 0.0;
-  alpha_beta_cost_to_load = 1.0; // Some random value. Fix me!
-
-  // If metabalancer enabled, initialize the variables
-  adaptive_struct.tentative_period =  INT_MAX;
-  adaptive_struct.final_lb_period =  INT_MAX;
-  adaptive_struct.lb_calculated_period = INT_MAX;
-  adaptive_struct.lb_no_iterations = -1;
-  adaptive_struct.global_max_iter_no = 0;
-  adaptive_struct.tentative_max_iter_no = -1;
-  adaptive_struct.global_recv_iter_counter = 0;
-  adaptive_struct.in_progress = false;
-  adaptive_struct.lb_strategy_cost = 0.0;
-  adaptive_struct.lb_migration_cost = 0.0;
-  adaptive_struct.lb_msg_send_no = 0;
-  adaptive_struct.lb_msg_recv_no = 0;
-  adaptive_struct.total_syncs_called = 0;
-  adaptive_struct.last_lb_type = -1;
-
-  lb_in_progress = false;
-
-  is_prev_lb_refine = -1;
-}
-
-LBDatabase::LastLBInfo::LastLBInfo()
-{
-  expectedLoad = _expectedLoad;
-}
-
-void LBDatabase::get_avail_vector(char * bitmap) {
-    CmiAssert(bitmap && avail_vector);
-    const int num_proc = CkNumPes();
-    for(int proc = 0; proc < num_proc; proc++){
-      bitmap[proc] = avail_vector[proc];
-    }
-}
-
-// new_ld == -1(default) : calcualte a new ld
-//           -2 : ignore new ld
-//           >=0: given a new ld
-void LBDatabase::set_avail_vector(char * bitmap, int new_ld){
-    int assigned = 0;
-    const int num_proc = CkNumPes();
-    if (new_ld == -2) assigned = 1;
-    else if (new_ld >= 0) {
-      CmiAssert(new_ld < num_proc);
-      new_ld_balancer = new_ld;
-      assigned = 1;
-    }
-    CmiAssert(bitmap && avail_vector);
-    for(int count = 0; count < num_proc; count++){
-        avail_vector[count] = bitmap[count];
-        if((bitmap[count] == 1) && !assigned){
-            new_ld_balancer = count;
-            assigned = 1;
-        }
-    }
-}
-
-// called in CreateFooLB() when multiple load balancers are created
-// on PE0, BaseLB of each load balancer applies a ticket number
-// and broadcast the ticket number to all processors
-int LBDatabase::getLoadbalancerTicket()  { 
-  int seq = nloadbalancers;
-  nloadbalancers ++;
-  loadbalancers.resize(nloadbalancers); 
-  loadbalancers[seq] = NULL;
-  return seq; 
-}
-
-void LBDatabase::addLoadbalancer(BaseLB *lb, int seq) {
-//  CmiPrintf("[%d] addLoadbalancer for seq %d\n", CkMyPe(), seq);
-  if (seq == -1) return;
-  if (CkMyPe() == 0) {
-    CmiAssert(seq < nloadbalancers);
-    if (loadbalancers[seq]) {
-      CmiPrintf("Duplicate load balancer created at %d\n", seq);
-      CmiAbort("LBDatabase");
-    }
-  }
-  else
-    nloadbalancers ++;
-  loadbalancers.resize(seq+1);
-  loadbalancers[seq] = lb;
-}
-
-// switch strategy in order
-void LBDatabase::nextLoadbalancer(int seq) {
-  if (seq == -1) return;               // -1 means this is the only LB
-  int next = seq+1;
-  if (_lb_args.loop()) {
-    if (next == nloadbalancers) next = 0;
-  }
-  else {
-    if (next == nloadbalancers) next --;  // keep using the last one
-  }
-  if (seq != next) {
-    loadbalancers[seq]->turnOff();
-    CmiAssert(loadbalancers[next]);
-    loadbalancers[next]->turnOn();
-  }
-}
-
-// return the seq-th load balancer string name of
-// it can be specified in either compile time or runtime
-// runtime has higher priority
-const char *LBDatabase::loadbalancer(int seq) {
-  if (lbRegistry.runtime_lbs.length()) {
-    CmiAssert(seq < lbRegistry.runtime_lbs.length());
-    return lbRegistry.runtime_lbs[seq];
-  }
-  else {
-    CmiAssert(seq < lbRegistry.compile_lbs.length());
-    return lbRegistry.compile_lbs[seq];
-  }
-}
-
-void LBDatabase::pup(PUP::er& p)
-{ 
-       IrrGroup::pup(p); 
-       // the memory should be already allocated
-       int np;
-       if (!p.isUnpacking()) np = CkNumPes();
-       p|np;
-       CmiAssert(avail_vector);
-       // in case number of processors changes
-       if (p.isUnpacking() && np > CkNumPes()) {
-               CmiLock(avail_vector_lock);
-               delete [] avail_vector;
-               avail_vector = new char[np];
-               for (int i=0; i<np; i++) avail_vector[i] = 1;
-               CmiUnlock(avail_vector_lock);
-       }
-       p(avail_vector, np);
-       p|mystep;
-       if(p.isUnpacking()) nloadbalancers = 0;
-}
-
-
-void LBDatabase::EstObjLoad(const LDObjHandle &_h, double cputime)
-{
-#if CMK_LBDB_ON
-  LBDB *const db = (LBDB*)(_h.omhandle.ldb.handle);
-  LBObj *const obj = db->LbObj(_h);
-
-  CmiAssert(obj != NULL);
-  obj->setTiming(cputime);
-#endif
-}
-
-void LBDatabase::ResumeClients() {
-  // If metabalancer enabled, initialize the variables
-  adaptive_lbdb.history_data.clear();
-
-  adaptive_struct.tentative_period =  INT_MAX;
-  adaptive_struct.final_lb_period =  INT_MAX;
-  adaptive_struct.lb_calculated_period = INT_MAX;
-  adaptive_struct.lb_no_iterations = -1;
-  adaptive_struct.global_max_iter_no = 0;
-  adaptive_struct.tentative_max_iter_no = -1;
-  adaptive_struct.global_recv_iter_counter = 0;
-  adaptive_struct.in_progress = false;
-  adaptive_struct.lb_strategy_cost = 0.0;
-  adaptive_struct.lb_migration_cost = 0.0;
-  adaptive_struct.lb_msg_send_no = 0;
-  adaptive_struct.lb_msg_recv_no = 0;
-  adaptive_struct.total_syncs_called = 0;
-  
-  max_load_vec.clear();
-  total_load_vec.clear();
-  total_contrib_vec.clear();
-  prev_idle = 0.0;
-  if (lb_in_progress) {
-    lbdb_no_obj_callback.clear();
-    lb_in_progress = false;
-  }
-
-  max_load_vec.resize(VEC_SIZE, 0.0);
-  total_load_vec.resize(VEC_SIZE, 0.0);
-  total_contrib_vec.resize(VEC_SIZE, 0.0);
-
-  if (getLBDB()->ObjDataCount() == 0) {
-    HandleAdaptiveNoObj();
-  }
-  LDResumeClients(myLDHandle);
-}
-
-bool LBDatabase::AddLoad(int iteration, double load) {
-  total_contrib_vec[iteration]++;
-  adaptive_struct.total_syncs_called++;
-  DEBAD(("At PE %d Total contribution for iteration %d is %lf total objs %d\n", CkMyPe(), iteration,
-    total_contrib_vec[iteration], getLBDB()->ObjDataCount()));
-
-  if (iteration > adaptive_struct.lb_no_iterations) {
-    adaptive_struct.lb_no_iterations = iteration;
-  }
-  total_load_vec[iteration] += load;
- // if (max_load_vec[iteration] < load) {
- //   max_load_vec[iteration] = load;
- // }
-  if (total_contrib_vec[iteration] == getLBDB()->ObjDataCount()) {
-    double idle_time;
-    IdleTime(&idle_time);
-
-    if (iteration < NEGLECT_IDLE) {
-      prev_idle = idle_time;
-    }
-    idle_time -= prev_idle;
-
-    // Skips the 0th iteration collection of stats hence...
-   // idle_time = idle_time * getLBDB()->ObjDataCount() /
-   //   (adaptive_struct.total_syncs_called + getLBDB()->ObjDataCount());
-   int total_countable_syncs = adaptive_struct.total_syncs_called + (1 - NEGLECT_IDLE) * getLBDB()->ObjDataCount();
-    if (total_countable_syncs != 0) {
-      idle_time = idle_time * getLBDB()->ObjDataCount() / total_countable_syncs;
-    }
-    //CkPrintf("[%d] Idle time %lf and countable %d for iteration %d\n", CkMyPe(), idle_time, total_countable_syncs, iteration);
-
-    double lb_data[6];
-    lb_data[0] = iteration;
-    lb_data[1] = 1;
-    lb_data[2] = total_load_vec[iteration];
-    //lb_data[2] = max_load_vec[iteration];
-    lb_data[3] = total_load_vec[iteration];
-    //lb_data[3] = getLBDB()->ObjDataCount();
-    lb_data[4] = idle_time;
-    if (total_load_vec[iteration] == 0.0) {
-      lb_data[5] = idle_time;
-    } else {
-      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);
-
-    CkCallback cb(CkIndex_LBDatabase::ReceiveMinStats((CkReductionMsg*)NULL), thisProxy[0]);
-    contribute(6*sizeof(double), lb_data, lbDataCollectionType, cb);
-  }
-  return true;
-}
-
-void LBDatabase::ReceiveMinStats(CkReductionMsg *msg) {
-  double* load = (double *) msg->getData();
-  double avg = load[2]/load[1];
-  double max = load[3];
-  double avg_idle = load[4]/load[1];
-  double max_idle_load_ratio = load[5];
-  int iteration_n = load[0];
-  DEBAD(("** [%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]));
-  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]);
-  //CkPrintf("** [%d] Iteration Avg load: %lf Max load: %lf Avg Idle : %lf Max Idle : %lf for %lf procs %lf/%lf\n",iteration_n, avg, max, avg_idle, max_idle_load_ratio, load[1], load[4],load[1]);
-  delete msg;
-  
-  if (adaptive_struct.final_lb_period != iteration_n) {
-    for (int i = 0; i < lbdb_no_obj_callback.size(); i++) {
-      thisProxy[lbdb_no_obj_callback[i]].TriggerAdaptiveReduction();
-    }
-  }
-  // Store the data for this iteration
-  adaptive_struct.lb_no_iterations = iteration_n;
-  AdaptiveData data;
-  data.iteration = adaptive_struct.lb_no_iterations;
-  data.max_load = max;
-  data.avg_load = avg;
-  data.max_idle_load_ratio = max_idle_load_ratio;
-  data.idle_time = avg_idle;
-  adaptive_lbdb.history_data.push_back(data);
-
-  // If lb period inform is in progress, dont inform again
-  if (adaptive_struct.in_progress || (adaptive_struct.final_lb_period == iteration_n)) {
-    return;
-  }
-
-  double idle_load_tolerance = IDLE_LOAD_TOLERANCE;
-<<<<<<< HEAD
-  CkPrintf("%lf Alpha beta cost \n", alpha_beta_cost_to_load);
-=======
-  CkPrintf("alpha_beta_to_load %lf\n", alpha_beta_cost_to_load);
->>>>>>> 61a4e2efa017ec4edc0eeeb377012830a9151348
-  if (alpha_beta_cost_to_load < 0.1) {
-    // Ignore the effect hence increase tolerance
-    CkPrintf("Changing the idle load tolerance coz this isn't communication intensive benchmark\n");
-    idle_load_tolerance = 1024.0;
-  }
-
-
-
-//  if (adaptive_struct.lb_period_informed) {
-//    return;
-//  }
-
-  // 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) {
-  // Generate the plan for the adaptive strategy
-  int period;
-  double ratio_at_t = 1.0;
-  if (generatePlan(period, ratio_at_t)) {
-    //CkPrintf("Carry out load balancing step at iter\n");
-    DEBAD(("Generated period and calculated %d and period %d max iter %d\n",
-    adaptive_struct.lb_calculated_period, period,
-    adaptive_struct.tentative_max_iter_no));
-    int tmp1;
-    double tmp2, tmp3;
-    GetPrevLBData(tmp1, tmp2, tmp3);
-    double tolerate_imb;
-
-    if (ratio_at_t == 1.0) {
-      tolerate_imb = IMB_TOLERANCE * tmp2;
-    } else {
-      CkPrintf("Changed tolerance to %lf after line eq whereas max/avg is %lf\n", ratio_at_t, max/avg);
-      tolerate_imb = ratio_at_t;
-    }
-
-    CkPrintf("Prev LB Data Type %d, max/avg %lf, local/remote %lf\n", tmp1, tmp2, tmp3);
-
-
-
-    if ((max_idle_load_ratio >= idle_load_tolerance || max/avg >= tolerate_imb) && adaptive_lbdb.history_data.size() > 6) {
-      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 the previously calculated_period (not the final decision) is greater
-      // than the iter +1, we can inform this and expect to get a change.
-      if ((iteration_n + 1 > adaptive_struct.tentative_max_iter_no) &&
-          (iteration_n+1 < adaptive_struct.lb_calculated_period)) {
-        if (max/avg < tolerate_imb) {
-          adaptive_struct.doCommStrategy = true;
-          CkPrintf("No load imbalance but idle time\n");
-        } else {
-          adaptive_struct.doCommStrategy = false;
-          CkPrintf("load imbalance \n");
-        }
-        adaptive_struct.lb_calculated_period = iteration_n + 1;
-        adaptive_struct.lb_period_informed = true;
-        adaptive_struct.in_progress = true;
-        CkPrintf("Informing everyone the lb period is %d\n",
-            adaptive_struct.lb_calculated_period);
-        thisProxy.LoadBalanceDecision(adaptive_struct.lb_msg_send_no++, adaptive_struct.lb_calculated_period);
-      }
-      return;
-    }
-
-    // If the new lb period from linear extrapolation is less than current set lb period
-    //if (adaptive_struct.lb_calculated_period > period) {
-    if (period > adaptive_struct.tentative_max_iter_no) {
-      adaptive_struct.doCommStrategy = false;
-      adaptive_struct.lb_calculated_period = period;
-      adaptive_struct.in_progress = true;
-      adaptive_struct.lb_period_informed = true;
-      CkPrintf("Informing everyone the lb period is %d\n",
-          adaptive_struct.lb_calculated_period);
-      thisProxy.LoadBalanceDecision(adaptive_struct.lb_msg_send_no++, adaptive_struct.lb_calculated_period);
-      return;
-    }
-  }
-
-  int tmp1;
-  double tmp2, tmp3;
-  GetPrevLBData(tmp1, tmp2, tmp3);
-  double tolerate_imb;
-
-  if (ratio_at_t == 1.0) {
-    tolerate_imb = IMB_TOLERANCE * tmp2;
-  } else {
-    tolerate_imb = ratio_at_t;
-  }
-
-  CkPrintf("Prev LB Data Type %d, max/avg %lf, local/remote %lf\n", tmp1, tmp2, tmp3);
-
-
-  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
-     // if (iteration_n <= 5) {
-     //   adaptive_struct.lb_calculated_period = 9;
-     // } else if (iteration_n <= 10) {
-     //   adaptive_struct.lb_calculated_period = 7;
-     // }// else if (iteration_n <= 10) {
-     // //adaptive_struct.lb_calculated_period = 9;
-     // //} else if (iteration_n > adaptive_struct.tentative_max_iter_no) {
-     // //  adaptive_struct.lb_calculated_period = iteration_n + 1;
-     // //}
-
-     // adaptive_struct.doCommStrategy = false;
-     // adaptive_struct.lb_period_informed = true;
-
-     // CkPrintf("Informing everyone the lb period is %d\n",
-     //     adaptive_struct.lb_calculated_period);
-     // thisProxy.LoadBalanceDecision(adaptive_struct.lb_msg_send_no++, adaptive_struct.lb_calculated_period);
-     // return;
-
-//    }
-
-
-    // If the previously calculated_period (not the final decision) is greater
-    // than the iter +1, we can inform this and expect to get a change.
-    if ((iteration_n + 1 > adaptive_struct.tentative_max_iter_no) &&
-        (iteration_n+1 < adaptive_struct.lb_calculated_period)) {
-      if (max/avg < tolerate_imb) {
-        adaptive_struct.doCommStrategy = true;
-        CkPrintf("No load imbalance but idle time\n");
-      } else {
-        adaptive_struct.doCommStrategy = false;
-        CkPrintf("load imbalance \n");
-      }
-      adaptive_struct.lb_calculated_period = iteration_n + 1;
-      adaptive_struct.lb_period_informed = true;
-      adaptive_struct.in_progress = true;
-      CkPrintf("Informing everyone the lb period is %d\n",
-          adaptive_struct.lb_calculated_period);
-      thisProxy.LoadBalanceDecision(adaptive_struct.lb_msg_send_no++, adaptive_struct.lb_calculated_period);
-    }
-    return;
-  }
-
-}
-
-bool LBDatabase::generatePlan(int& period, double& ratio_at_t) {
-  if (adaptive_lbdb.history_data.size() <= 4) {
-    return false;
-  }
-
-  // Some heuristics for lbperiod
-  // If constant load or almost constant,
-  // then max * new_lb_period > avg * new_lb_period + lb_cost
-  double max = 0.0;
-  double avg = 0.0;
-  AdaptiveData data;
-  for (int i = 0; i < adaptive_lbdb.history_data.size(); i++) {
-    data = adaptive_lbdb.history_data[i];
-    max += data.max_load;
-    avg += data.avg_load;
-    DEBAD(("max (%d, %lf) avg (%d, %lf)\n", i, data.max_load, i, data.avg_load));
-  }
-//  max /= (adaptive_struct.lb_no_iterations - adaptive_lbdb.history_data[0].iteration);
-//  avg /= (adaptive_struct.lb_no_iterations - adaptive_lbdb.history_data[0].iteration);
-//
-//  adaptive_struct.tentative_period = (adaptive_struct.lb_strategy_cost +
-//  adaptive_struct.lb_migration_cost) / (max - avg);
-//  CkPrintf("max : %lf, avg: %lf, strat cost: %lf, migration_cost: %lf, idealperiod : %d \n",
-//      max, avg, adaptive_struct.lb_strategy_cost, adaptive_struct.lb_migration_cost, adaptive_struct.tentative_period);
-//
-
-  // If linearly varying load, then find lb_period
-  // area between the max and avg curve 
-  // If we can attain perfect balance, then the new load is close to the
-  // average. Hence we pass 1, else pass in some other value which would be the
-  // new max_load after load balancing.
-  int tmp1;
-  double tmp2, tmp3;
-  GetPrevLBData(tmp1, tmp2, tmp3);
-  
-  double tolerate_imb = tmp2;
-  if (max/avg < tolerate_imb) {
-    CkPrintf("Resorting to imb = 1.0 coz max/avg (%lf) < imb(%lf)\n", max/avg, tolerate_imb);
-    tolerate_imb = 1.0;
-  }
-
-  return getPeriodForStrategy(tolerate_imb, 1, period, ratio_at_t);
-
-//  int refine_period, scratch_period;
-//  bool obtained_refine, obtained_scratch;
-//  obtained_refine = getPeriodForStrategy(1, 1, refine_period);
-//  obtained_scratch = getPeriodForStrategy(1, 1, scratch_period);
-//
-//  if (obtained_refine) {
-//    if (!obtained_scratch) {
-//      period = refine_period;
-//      adaptive_struct.isRefine = true;
-//      return true;
-//    }
-//    if (scratch_period < 1.1*refine_period) {
-//      adaptive_struct.isRefine = false;
-//      period = scratch_period;
-//      return true;
-//    }
-//    period = refine_period;
-//    adaptive_struct.isRefine = true;
-//    return true;
-//  }
-//
-//  if (obtained_scratch) {
-//    period = scratch_period;
-//    adaptive_struct.isRefine = false;
-//    return true;
-//  }
-//  return false;
-}
-
-bool LBDatabase::getPeriodForStrategy(double new_load_percent,
-    double overhead_percent, int& period, double& ratio_at_t) {
-  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);
-  double c = -(adaptive_struct.lb_strategy_cost +
-      adaptive_struct.lb_migration_cost) * overhead_percent;
-  //c = -2.5;
-  bool got_period = getPeriodForLinear(a, b, c, period);
-  if (!got_period) {
-    return false;
-  }
-  
-  if (mslope < 0) {
-    if (period > (-mc/mslope)) {
-      CkPrintf("Max < 0 Period set when max load is -ve\n");
-      return false;
-    }
-  }
-
-  if (aslope < 0) {
-    if (period > (-ac/aslope)) {
-      CkPrintf("Avg < 0 Period set when avg load is -ve\n");
-      return false;
-    }
-  }
-
-  int intersection_t = (mc-ac) / (aslope - mslope);
-  if (intersection_t > 0 && period > intersection_t) {
-    CkPrintf("Avg | Max Period set when curves intersect\n");
-    return false;
-  }
-  ratio_at_t = ((mslope*period + mc)/(aslope*period + ac));
-  return true;
-}
-
-bool LBDatabase::getPeriodForLinear(double a, double b, double c, int& period) {
-  CkPrintf("Quadratic Equation %lf X^2 + %lf X + %lf\n", a, b, c);
-  if (a == 0.0) {
-    period = (-c / b);
-    CkPrintf("Ideal period for linear load %d\n", period);
-    return true;
-  }
-  int x;
-  double t = (b * b) - (4*a*c);
-  if (t < 0) {
-    CkPrintf("(b * b) - (4*a*c) is -ve sqrt : %lf\n", sqrt(t));
-    return false;
-  }
-  t = (-b + sqrt(t)) / (2*a);
-  x = t;
-  if (x < 0) {
-    CkPrintf("boo!!! x (%d) < 0\n", x);
-    x = 0;
-    return false;
-  }
-  period = x;
-  CkPrintf("Ideal period for linear load %d\n", period);
-  return true;
-}
-
-bool LBDatabase::getLineEq(double new_load_percent, double& aslope, double& ac, double& mslope, double& mc) {
-  int total = adaptive_lbdb.history_data.size();
-  int iterations = 1 + adaptive_lbdb.history_data[total - 1].iteration -
-      adaptive_lbdb.history_data[0].iteration;
-  double a1 = 0;
-  double m1 = 0;
-  double a2 = 0;
-  double m2 = 0;
-  AdaptiveData data;
-  int i = 0;
-  for (i = 0; i < total/2; i++) {
-    data = adaptive_lbdb.history_data[i];
-    m1 += data.max_load;
-    a1 += data.avg_load;
-  }
-  m1 /= i;
-  a1 = (a1 * new_load_percent) / i;
-
-  for (i = total/2; i < total; i++) {
-    data = adaptive_lbdb.history_data[i];
-    m2 += data.max_load;
-    a2 += data.avg_load;
-  }
-  m2 /= (i - total/2);
-  a2 = (a2 * new_load_percent) / (i - total/2);
-
-  aslope = 2 * (a2 - a1) / iterations;
-  mslope = 2 * (m2 - m1) / iterations;
-  ac = adaptive_lbdb.history_data[0].avg_load * new_load_percent;
-  mc = adaptive_lbdb.history_data[0].max_load;
-
-  //ac = (adaptive_lbdb.history_data[1].avg_load * new_load_percent - aslope);
-  //mc = (adaptive_lbdb.history_data[1].max_load - mslope);
-
-  return true;
-}
-
-void LBDatabase::LoadBalanceDecision(int req_no, int period) {
-  if (req_no < adaptive_struct.lb_msg_recv_no) {
-    CkPrintf("Error!!! Received a request which was already sent or old\n");
-    return;
-  }
-  //CkPrintf("[%d] Load balance decision made cur iteration: %d period:%d state: %d\n",CkMyPe(), adaptive_struct.lb_no_iterations, period, local_state);
-  adaptive_struct.tentative_period = period;
-  //local_state = ON;
-  adaptive_struct.lb_msg_recv_no = req_no;
-  thisProxy[0].ReceiveIterationNo(req_no, adaptive_struct.lb_no_iterations);
-}
-
-void LBDatabase::LoadBalanceDecisionFinal(int req_no, int period) {
-  if (req_no < adaptive_struct.lb_msg_recv_no) {
-    return;
-  }
-  DEBAD(("[%d] Final Load balance decision made cur iteration: %d period:%d \n",CkMyPe(), adaptive_struct.lb_no_iterations, period));
-  adaptive_struct.tentative_period = period;
-  adaptive_struct.final_lb_period = period;
-  LDOMAdaptResumeSync(myLDHandle, period);
-
-//  if (local_state == ON) {
-//    local_state = DECIDED;
-//    return;
-//  }
-
-  // If the state is PAUSE, then its waiting for the final decision from central
-  // processor. If the decision is that the ideal period is in the future,
-  // resume. If the ideal period is now, then carry out load balancing.
-//  if (local_state == PAUSE) {
-//    if (adaptive_struct.lb_no_iterations < adaptive_struct.tentative_period) {
-//      local_state = DECIDED;
-//      //SendMinStats();
-//      //FIX ME!!! ResumeClients(0);
-//    } else {
-//      local_state = LOAD_BALANCE;
-//      //FIX ME!!! ProcessAtSync();
-//    }
-//    return;
-//  }
-//  CkPrintf("Error!!! Final decision received but the state is invalid %d\n", local_state);
-}
-
-
-void LBDatabase::ReceiveIterationNo(int req_no, int local_iter_no) {
-  CmiAssert(CkMyPe() == 0);
-
-  adaptive_struct.global_recv_iter_counter++;
-  if (local_iter_no > adaptive_struct.global_max_iter_no) {
-    adaptive_struct.global_max_iter_no = local_iter_no;
-  }
-
-  int period;
-  if (CkNumPes() == adaptive_struct.global_recv_iter_counter) {
-
-    if (adaptive_struct.global_max_iter_no > adaptive_struct.tentative_max_iter_no) {
-      adaptive_struct.tentative_max_iter_no = adaptive_struct.global_max_iter_no;
-    }
-    period = (adaptive_struct.tentative_period > adaptive_struct.global_max_iter_no) ? adaptive_struct.tentative_period : adaptive_struct.global_max_iter_no + 1;
-    // If no one has gone into load balancing stage, then we can safely change
-    // the period otherwise keep the old period.
-    if (adaptive_struct.global_max_iter_no < adaptive_struct.final_lb_period) {
-      adaptive_struct.tentative_period = period;
-      CkPrintf("Final lb_period CHANGED!%d\n", adaptive_struct.tentative_period);
-    } else {
-      adaptive_struct.tentative_period = adaptive_struct.final_lb_period;
-      CkPrintf("Final lb_period NOT CHANGED!%d\n", adaptive_struct.tentative_period);
-    }
-    thisProxy.LoadBalanceDecisionFinal(req_no, adaptive_struct.tentative_period);
-    adaptive_struct.in_progress = false;
-    //adaptive_struct.global_max_iter_no = -1;
-    adaptive_struct.global_recv_iter_counter = 0;
-  }
-}
-
-int LBDatabase::getPredictedLBPeriod(bool& is_tentative) {
-  if (adaptive_struct.tentative_period < adaptive_struct.final_lb_period) {
-    is_tentative = true;
-    return adaptive_struct.tentative_period;
-   } else {
-     is_tentative = false;
-     return adaptive_struct.final_lb_period;
-   }
-}
-
-void LBDatabase::ResetAdaptive() {
-  adaptive_struct.lb_no_iterations = -1;
-  lb_in_progress = true;
-}
-
-void LBDatabase::HandleAdaptiveNoObj() {
-  adaptive_struct.lb_no_iterations++;
-  //CkPrintf("HandleAdaptiveNoObj %d\n", adaptive_struct.lb_no_iterations);
-  thisProxy[0].RegisterNoObjCallback(CkMyPe());
-  TriggerAdaptiveReduction();
-}
-
-void LBDatabase::RegisterNoObjCallback(int index) {
-  if (lb_in_progress) {
-    lbdb_no_obj_callback.clear();
-    //CkPrintf("Clearing and registering\n");
-    lb_in_progress = false;
-  }
-  lbdb_no_obj_callback.push_back(index);
-  CkPrintf("Registered %d to have no objs.\n", index);
-
-  // If collection has already happened and this is second iteration, then
-  // trigger reduction.
-  if (adaptive_struct.lb_no_iterations != -1) {
-    //CkPrintf("Collection already started now %d so kick in\n", adaptive_struct.lb_no_iterations);
-    thisProxy[index].TriggerAdaptiveReduction();
-  }
-}
-
-void LBDatabase::TriggerAdaptiveReduction() {
-  adaptive_struct.lb_no_iterations++;
-  //CkPrintf("Trigger adaptive for %d\n", adaptive_struct.lb_no_iterations);
-  double lb_data[6];
-  lb_data[0] = adaptive_struct.lb_no_iterations;
-  lb_data[1] = 1;
-  lb_data[2] = 0.0;
-  lb_data[3] = 0.0;
-  lb_data[4] = 0.0;
-  lb_data[5] = 0.0;
-
-  // 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);
-}
-
-
-bool LBDatabase::isStrategyComm() {
-  return adaptive_struct.doCommStrategy;
-}
-
-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;
-}
-
-void LBDatabase::UpdateAfterLBData(int lb, double lb_max, double lb_avg, double
-    local_comm, double remote_comm) {
-  adaptive_struct.last_lb_type = lb;
-  if (lb == 0) {
-    adaptive_struct.greedy_info.max_avg_ratio = lb_max/lb_avg;
-  } else if (lb == 1) {
-    adaptive_struct.refine_info.max_avg_ratio = lb_max/lb_avg;
-  } else if (lb == 2) {
-    adaptive_struct.comm_info.remote_local_ratio = remote_comm/local_comm;
-  } else if (lb == 3) {
-    adaptive_struct.comm_refine_info.remote_local_ratio =
-    remote_comm/local_comm;
-  }
-}
-
-void LBDatabase::UpdateAfterLBData(double max_load, double max_cpu, double
-avg_load) {
-  if (adaptive_struct.last_lb_type == -1) {
-    adaptive_struct.last_lb_type = 0;
-  }
-  int lb = adaptive_struct.last_lb_type;
-  //CkPrintf("Storing data after lb ratio %lf for lb %d\n", max_load/avg_load, lb);
-  if (lb == 0) {
-    adaptive_struct.greedy_info.max_avg_ratio = max_load/avg_load;
-  } else if (lb == 1) {
-    adaptive_struct.refine_info.max_avg_ratio = max_load/avg_load;
-  } else if (lb == 2) {
-    adaptive_struct.comm_info.max_avg_ratio = max_load/avg_load;
-  } else if (lb == 3) {
-    adaptive_struct.comm_refine_info.max_avg_ratio = max_load/avg_load;
-  }
-}
-
-void LBDatabase::UpdateAfterLBComm(double alpha_beta_to_load) {
-<<<<<<< HEAD
-  CkPrintf("Setting LB alpa beta %lf \n", alpha_beta_to_load);
-=======
-  CkPrintf("Setting alpha beta %lf\n", alpha_beta_to_load);
->>>>>>> 61a4e2efa017ec4edc0eeeb377012830a9151348
-  alpha_beta_cost_to_load = alpha_beta_to_load;
-}
-
-
-void LBDatabase::GetPrevLBData(int& lb_type, double& lb_max_avg_ratio, double&
-    remote_local_comm_ratio) {
-  lb_type = adaptive_struct.last_lb_type;
-  lb_max_avg_ratio = 1;
-  remote_local_comm_ratio = 1;
-  GetLBDataForLB(lb_type, lb_max_avg_ratio, remote_local_comm_ratio);
-}
-
-void LBDatabase::GetLBDataForLB(int lb_type, double& lb_max_avg_ratio, double&
-    remote_local_comm_ratio) {
-  if (lb_type == 0) {
-    lb_max_avg_ratio = adaptive_struct.greedy_info.max_avg_ratio;
-  } else if (lb_type == 1) {
-    lb_max_avg_ratio = adaptive_struct.refine_info.max_avg_ratio;
-  } else if (lb_type == 2) {
-    remote_local_comm_ratio = adaptive_struct.comm_info.remote_local_ratio;
-  } else if (lb_type == 3) {
-    remote_local_comm_ratio =
-       adaptive_struct.comm_refine_info.remote_local_ratio;
-  }
-}
-
-/*
-  callable from user's code
-*/
-void TurnManualLBOn()
-{
-#if CMK_LBDB_ON
-   LBDatabase * myLbdb = LBDatabase::Object();
-   if (myLbdb) {
-     myLbdb->TurnManualLBOn();
-   }
-   else {
-     LBDatabase::manualOn = 1;
-   }
-#endif
-}
-
-void TurnManualLBOff()
-{
-#if CMK_LBDB_ON
-   LBDatabase * myLbdb = LBDatabase::Object();
-   if (myLbdb) {
-     myLbdb->TurnManualLBOff();
-   }
-   else {
-     LBDatabase::manualOn = 0;
-   }
-#endif
-}
-
-extern "C" void LBTurnInstrumentOn() { 
-#if CMK_LBDB_ON
-  if (CkpvAccess(lbdatabaseInited))
-    LBDatabase::Object()->CollectStatsOn(); 
-  else
-    _lb_args.statsOn() = 1;
-#endif
-}
-
-extern "C" void LBTurnInstrumentOff() { 
-#if CMK_LBDB_ON
-  if (CkpvAccess(lbdatabaseInited))
-    LBDatabase::Object()->CollectStatsOff(); 
-  else
-    _lb_args.statsOn() = 0;
-#endif
-}
-void LBClearLoads() {
-#if CMK_LBDB_ON
-  LBDatabase::Object()->ClearLoads(); 
-#endif
-}
-
-void LBTurnPredictorOn(LBPredictorFunction *model) {
-#if CMK_LBDB_ON
-  LBDatabase::Object()->PredictorOn(model);
-#endif
-}
-
-void LBTurnPredictorOn(LBPredictorFunction *model, int wind) {
-#if CMK_LBDB_ON
-  LBDatabase::Object()->PredictorOn(model, wind);
-#endif
-}
-
-void LBTurnPredictorOff() {
-#if CMK_LBDB_ON
-  LBDatabase::Object()->PredictorOff();
-#endif
-}
-
-void LBChangePredictor(LBPredictorFunction *model) {
-#if CMK_LBDB_ON
-  LBDatabase::Object()->ChangePredictor(model);
-#endif
-}
-
-void LBSetPeriod(double second) {
-#if CMK_LBDB_ON
-  if (CkpvAccess(lbdatabaseInited))
-    LBDatabase::Object()->SetLBPeriod(second); 
-  else
-    _lb_args.lbperiod() = second;
-#endif
-}
-
-#include "LBDatabase.def.h"
-
-/*@}*/