doc: Add serial to list of ci file reserved words
[charm.git] / src / ck-ldb / CentralPredictor.C
index e04f79bc97373b8e1a5b67a39f63b5e1748d8a3b..64f2a6721d8bc5f984d14e615d1b5f7bd0cf3fba 100644 (file)
@@ -1,10 +1,3 @@
-/*****************************************************************************
- * $Source$
- * $Author$
- * $Date$
- * $Revision$
- *****************************************************************************/
-
 /**
  * \addtogroup CkLdb
 */
@@ -38,98 +31,9 @@ void CentralLB::staticChangePredictor(void* data, void *model)
   me->changePredictor((LBPredictorFunction*)model);
 }
 
-/*
-// definitions for the implemented predictor model
-#define NR_THRESHOLD            0.0001
-#define INITIALIZE_PARAMS(x)    {x[0]=0; x[1]=1; x[2]=0; x[3]=0; x[4]=0; x[5]=0;}
-#define PRED_FUNCTION(x, param) param[0] + param[1]*x + param[2]*x*x + param[3]*sin(param[4]*(x+param[5]))
-
-#define ADD_DIFFERENTIAL(diff,collec,index,param)  {diff[0]+=PRED_DERIVATE_0(collec[index+1].objData[object].cpuTime,collec[index].objData[object].cpuTime,param); \
-diff[1]+=PRED_DERIVATE_1(collec[index+1].objData[object].cpuTime,collec[index].objData[object].cpuTime,param); \
-diff[2]+=PRED_DERIVATE_2(collec[index+1].objData[object].cpuTime,collec[index].objData[object].cpuTime,param); \
-diff[3]+=PRED_DERIVATE_3(collec[index+1].objData[object].cpuTime,collec[index].objData[object].cpuTime,param); \
-diff[4]+=PRED_DERIVATE_4(collec[index+1].objData[object].cpuTime,collec[index].objData[object].cpuTime,param); \
-diff[5]+=PRED_DERIVATE_5(collec[index+1].objData[object].cpuTime,collec[index].objData[object].cpuTime,param);}
-
-#define PRED_DERIVATE_0(y,x,p)  (y-PRED_FUNCTION(x,p))
-#define PRED_DERIVATE_1(y,x,p)  (y-PRED_FUNCTION(x,p))*x
-#define PRED_DERIVATE_2(y,x,p)  (y-PRED_FUNCTION(x,p))*x*x
-#define PRED_DERIVATE_3(y,x,p)  (y-PRED_FUNCTION(x,p))*sin(p[4]*(x+p[5]))
-#define PRED_DERIVATE_4(y,x,p)  (y-PRED_FUNCTION(x,p))*p[3]*(x+p[5])*cos(p[4]*(x+p[5]))
-#define PRED_DERIVATE_5(y,x,p)  (y-PRED_FUNCTION(x,p))*p[3]*p[4]*cos(p[4]*(x+p[5]))
-
-#define PRINT_MODEL(param)   "LB: %f + %fx + %fx^2 + %fsin%f(x+%f)\n",param[0],param[1],param[2],param[3],param[4],param[5]
-#define LEARNING_PARAM   1
-
-static void Newton_Raphson(CentralLB::FutureModel *mod, int object) {
-#if CMK_LBDB_ON
-  int i,j;
-  double differential[NUM_PARAMETERS];
-  double error = 0;
-  int loop=0;
-  char mystring[10]="my";
-  for (i=0; i<_lb_predict_delay-1; ++i) {
-    CkPrintf("y,x = %f %f\n",mod->collection[i+1].objData[object].cpuTime,mod->collection[i].objData[object].cpuTime,PRED_FUNCTION(mod->collection[i].objData[object].cpuTime, mod->parameters[object]));
-    error += pow(mod->collection[i+1].objData[object].cpuTime - PRED_FUNCTION(mod->collection[i].objData[object].cpuTime, mod->parameters[object]), 2);
-  }
-
-  while (error > NR_THRESHOLD) {
-    CkPrintf("error: %f\n",error);
-    if (++loop==10) CmiAbort(mystring);
-    for (j=0; j<NUM_PARAMETERS; ++j) differential[j] = 0;
-    for (i=0; i<_lb_predict_delay-1; ++i) {
-      ADD_DIFFERENTIAL(differential, mod->collection, i, mod->parameters[object]);
-
-      //       differential[i] += PRED_DERIVATE(i, mod->collection[j+1].objData[object].cpuTime, mod->collection[j].objData[object].cpuTime, mod->parameters[object]);
-      mod->parameters[object][i] += LEARNING_PARAM * differential[i];
-    }
-    CkPrintf(PRINT_MODEL(mod->parameters[object]));
-    error = 0;
-    for (i=0; i<_lb_predict_delay-1; ++i) error += pow(mod->collection[i+1].objData[object].cpuTime - PRED_FUNCTION(mod->collection[i].objData[object].cpuTime, mod->parameters[object]), 2);
-  }
-
-#endif
-}
-*/
-
 #define MAX_CHISQ_ITER 10000
 #define SMALL_NUMBER   0.00001    // to avoid singular matrix in gaussj
 
-/*
-#define NUM_PARAMETERS 6
-#define MY_FUNCTION    hypothesis_function
-
-// FUNCTIONS TO DEFINE A SPECIFIC MODEL
-
-inline int future_numPar() {return 6;}
-
-inline void initialize_params(double *x) {double normall=1.0/pow(2,31); x[0]=rand()*normall; x[1]=rand()*normall; x[2]=rand()*normall; x[3]=rand()*normall; x[4]=rand()*normall; x[5]=rand()*normall;}
-
-// compute the prediction function for the variable x with parameters param
-inline double pred_function(double x, double *param) {return (param[0] + param[1]*x + param[2]*x*x + param[3]*sin(param[4]*(x+param[5])));}
-
-inline void print_future_model(double *param) {CkPrintf("LB: %f + %fx + %fx^2 + %fsin%f(x+%f)\n",param[0],param[1],param[2],param[3],param[4],param[5]);}
-
-// compute the prediction function and its derivatives respect to the parameters
-void hypothesis_function(double x, double *param, double &y, double *dyda) {
-#if CMK_LBDB_ON
-  double tmp;
-
-  y = pred_function(x, param);
-
-  dyda[0] = 1;
-  dyda[1] = x;
-  dyda[2] = x*x;
-  tmp = param[4] * (x+param[5]);
-  dyda[3] = sin(tmp);
-  dyda[4] = param[3] * (x+param[5]) * cos(tmp);
-  dyda[5] = param[3] * param[4] *cos(tmp);
-
-#endif
-}
-*/
-// END OF FUNCTIONS TO DEFINE A SPECIFIC MODEL
-
 void gaussj(double **a, double *b, int n) {
 #if CMK_LBDB_ON
   int i,j,k;
@@ -310,20 +214,20 @@ bool Marquardt_solver(CentralLB::FutureModel *mod, int object) {
   delete[] y;
   delete[] temp;
 
-  return true;
 #endif
+  return true;
 }
 
 // routine that update LDStats given a predictor model
-void CentralLB::FuturePredictor(CentralLB::LDStats* stats) {
+void CentralLB::FuturePredictor(BaseLB::LDStats* stats) {
 #if CMK_LBDB_ON
   bool model_done;
   int i;
 
   if (predicted_model->cur_stats < _lb_predict_delay) {
     // not yet ready to create the model, just store the relevant statistic
-    predicted_model->collection[predicted_model->start_stats].objData = new LDObjData[stats->n_objs];
-    predicted_model->collection[predicted_model->start_stats].commData = new LDCommData[stats->n_comm];
+    predicted_model->collection[predicted_model->start_stats].objData.resize(stats->n_objs);
+    predicted_model->collection[predicted_model->start_stats].commData.resize(stats->n_comm);
     predicted_model->collection[predicted_model->start_stats].n_objs = stats->n_objs;
     predicted_model->collection[predicted_model->start_stats].n_migrateobjs = stats->n_migrateobjs;
     predicted_model->collection[predicted_model->start_stats].n_comm = stats->n_comm;
@@ -375,12 +279,8 @@ void CentralLB::FuturePredictor(CentralLB::LDStats* stats) {
       if (predicted_model->start_stats >= predicted_model->n_stats) predicted_model->start_stats -= predicted_model->n_stats;
       if (predicted_model->cur_stats < predicted_model->n_stats) ++predicted_model->cur_stats;
 
-      if (predicted_model->collection[predicted_model->start_stats].objData != NULL) {
-       delete predicted_model->collection[predicted_model->start_stats].objData;
-       delete predicted_model->collection[predicted_model->start_stats].commData;
-      }
-      predicted_model->collection[predicted_model->start_stats].objData = new LDObjData[stats->n_objs];
-      predicted_model->collection[predicted_model->start_stats].commData = new LDCommData[stats->n_comm];
+      predicted_model->collection[predicted_model->start_stats].objData.resize(stats->n_objs);
+      predicted_model->collection[predicted_model->start_stats].commData.resize(stats->n_comm);
 
       predicted_model->collection[predicted_model->start_stats].n_objs = stats->n_objs;
       predicted_model->collection[predicted_model->start_stats].n_migrateobjs = stats->n_migrateobjs;
@@ -418,8 +318,10 @@ void CentralLB::FuturePredictor(CentralLB::LDStats* stats) {
     for (int i=0; i<stats->n_objs; ++i) {
       if (predicted_model->model_valid[i]) {
        param = predicted_model->parameters[i];
-       stats->objData[i].cpuTime = predicted_model->predictor->predict(stats->objData[i].cpuTime, param);
        stats->objData[i].wallTime = predicted_model->predictor->predict(stats->objData[i].wallTime, param);
+#if CMK_LB_CPUTIMER
+       stats->objData[i].cpuTime = predicted_model->predictor->predict(stats->objData[i].cpuTime, param);
+#endif
       }
     }