Refactoring, printfs
authorTarun Agarwal <tagarwal@uiuc.edu>
Mon, 16 May 2005 23:14:31 +0000 (23:14 +0000)
committerTarun Agarwal <tagarwal@uiuc.edu>
Mon, 16 May 2005 23:14:31 +0000 (23:14 +0000)
src/ck-ldb/RefineTopoLB.C
src/ck-ldb/RefineTopoLB.h
src/ck-ldb/TopoLB.C
src/ck-ldb/TopoLB.h

index 3d6ae294f2842714e5f89fe8c36fdad51fe36d88..55f979599441133ba920cd32e8399cb9389e35fd 100644 (file)
@@ -20,8 +20,9 @@ Date: 04/27/2005
 #define EPSILON  -0.001
 
 #define _lb_debug_on 0
-#define _lb_debug2_on 1
-#define _make_new_grouping_ 1
+#define _lb_debug2_on 0
+#define _make_new_grouping_ 0
+#define _USE_MAX_HOPBYTES_ 1
 
 CreateLBFunc_Def(RefineTopoLB,"TopoLB: Balance objects based on the network topology");
 
@@ -103,8 +104,12 @@ void RefineTopoLB :: work(CentralLB::LDStats *stats,int count)
   initDataStructures(stats,count,newmap);
   if(_lb_debug_on)
     CkPrintf("After initizlizing dataStructures...\n");
+
   for(i=0;i<count;i++)
     assign[i]=i;
+  
+
+
   if(_lb_debug_on)
     printDataStructures(count, stats->n_objs,newmap);
   /***************** Perform RefineMent *************************/
@@ -114,13 +119,17 @@ void RefineTopoLB :: work(CentralLB::LDStats *stats,int count)
 
     
   //double hbval=getHopBytes(stats,count,stats->from_proc);
-  double hbval=getInterMedHopBytes(stats,count,newmap);
+  //double hbval=getHopBytesNew(NULL,count);
  // CkPrintf(" Before Mapping Original   hopBytes : %lf  Avg comm hops: %lf\n", hbval,hbval/total_comm);
   //Perform ith swap
   double totalGain=0;
   for(i=0;i<count;i++)
   {
     //select the cpart which is most communicating and hasn't been moved yet
+    if(_USE_MAX_HOPBYTES_)
+    {
+      updateCommUA(count);
+    }
     int cpart=-1;
     double maxComm=-1;
     for(j=0;j<count;j++)
@@ -138,7 +147,7 @@ void RefineTopoLB :: work(CentralLB::LDStats *stats,int count)
     int swapcpart=-1;
     double gainMax=-1;
     double gain=-1;;
-    double orig_value=getInterMedHopBytes(stats,count,newmap);
+    //double orig_value=getHopBytesNew(assign,count);
     for(j=0;j<count;j++)
     {
       if(j==cpart)
@@ -167,8 +176,8 @@ void RefineTopoLB :: work(CentralLB::LDStats *stats,int count)
     assign[swapcpart]=temp;
     swapdone[cpart]=true;
   
-    //CkPrintf("Gain: %lf  Total_Gain: %lf HopBytes: %lf\n ",gainMax,totalGain,getInterMedHopBytes(stats,count,newmap));
-    //CkPrintf(" %lf  getInterMedHopBytes(stats,count,newmap);
+    //CkPrintf("Gain: %lf  Total_Gain: %lf HopBytes: %lf\n ",gainMax,totalGain,getHopBytesNew(stats,count,newmap));
+    //CkPrintf(" %lf  getHopBytesNew(stats,count,newmap);
     //CkPrintf("Swap# %d:  %d and %d\n",i+1,cpart,swapcpart);
   }
   /******************* Assign mapping and print Stats*********/
@@ -176,19 +185,16 @@ void RefineTopoLB :: work(CentralLB::LDStats *stats,int count)
   {
     stats->to_proc[i]= assign[newmap[i]];
   }
-  /*
   if(_lb_debug2_on)
   {
     //double hbval=getHopBytes(stats,count,stats->from_proc);
-    double hbval=getHopBytesNew(NULL,count);
-    CkPrintf(" Original   hopBytes : %lf  Avg comm hops: %lf\n", hbval,hbval/total_comm);
-  
-    //  hbval=getHopBytes(stats,count,stats->to_proc);
-    //CkPrintf(" Resulting  hopBytes : %lf  Avg comm hops: %lf\n", hbval,hbval/total_comm);
-    hbval=getInterMedHopBytes(stats,count,newmap);
-    CkPrintf("Other Resulting  hopBytes : %lf  Avg comm hops: %lf\n", hbval,hbval/total_comm);
+    double hbval1=getHopBytesNew(NULL,count);
+    CkPrintf(" Original   hopBytes : %lf  Avg comm hops: %lf\n", hbval1,hbval1/total_comm);
+    double hbval2=getHopBytesNew(assign,count);
+    CkPrintf(" Resulting  hopBytes : %lf  Avg comm hops: %lf\n", hbval2,hbval2/total_comm);
+    CkPrintf(" Percentage gain %.2lf\n",(hbval1-hbval2)*100/hbval1);
+    CkPrintf("\n");
   }
-  */
   freeDataStructures(count);
   delete[] newmap;
   delete[] swapdone;
@@ -232,26 +238,37 @@ double RefineTopoLB::getCpartHopBytes(int cpart, int proc, int count)
   return totalHB;
 }
 
-double RefineTopoLB::getInterMedHopBytes(CentralLB::LDStats *stats,int count, int *newmap)
+/*
+double RefineTopoLB::getInterMedHopBytes(int *assign_map,int count)
 {
   double totalHB=0;
+  int i,j;
 
-  for(int i=0;i<count;i++)
+  if(assign_map)
   {
-    for(int j=0;j<count;j++)
-    {
-      totalHB+=comm[i][j]*dist[assign[i]][assign[j]];
-    }
+    for(i=0;i<count;i++)
+      for(j=0;j<count;j++)
+        totalHB+=comm[i][j]*dist[assign_map[i]][assign_map[j]];
+  }
+  else
+  {
+    for(i=0;i<count;i++)
+      for(j=0;j<count;j++)
+        totalHB+=comm[i][j]*dist[i][j];
   }
   return totalHB;
-  /*
-  CkVec<int> obj_to_proc;
-  for(int i=0;i<stats->n_objs;i++)
+}
+*/
+
+void RefineTopoLB::updateCommUA(int count)
+{
+  int i,j;
+  for(i=0;i<count;i++)
   {
-    obj_to_proc.push_back(assign[newmap[i]]);
+    commUA[i]=0;
+    for(j=0;j<count;j++)
+      commUA[i]+=comm[i][j]*dist[assign[i]][assign[j]];
   }
-  return getHopBytes(stats,count,obj_to_proc);
-  */
 }
 
 #include "RefineTopoLB.def.h"
index 4bc7e98b3d2bf6cec3ca6e1792e3166e3d79b141..25c4d8b0ef50e71304ad500737b2089db0ae3bd4 100644 (file)
@@ -20,13 +20,14 @@ class RefineTopoLB : public TopoLB
     void work (CentralLB::LDStats *stats, int count);
     void pup (PUP::er &p) { TopoLB::pup(p); }
        
-    //LBTopology                       *topo;
+    //LBTopolog *topo;
   
   protected:
     double getCpartHopBytes(int cpart,int proc, int count);
     double findSwapGain(int cpart1, int cpart2,int count);
-    double getInterMedHopBytes(CentralLB::LDStats *stats,int count, int *newmap);
+    //double getInterMedHopBytes(CentralLB::LDStats *stats,int count, int *newmap);
     CmiBool QueryBalanceNow (int step);
+    void updateCommUA(int count);
 }; 
 
 
index a1967b14196b778389a1810b62a4fba23e8a58b2..8523b4e2304129ce1c960db9312ca471cb6cf78d 100644 (file)
@@ -27,6 +27,9 @@ Date: 04/19/2005
 #define _lb_debug2_on 1
 #define _make_new_grouping_ 0
 #define _FASTER_
+#define _DIJKSTRA_LIKE_ 0
+#define _INIT_FROM_FILE  
+
 
 CreateLBFunc_Def(TopoLB,"TopoLB: Balance objects based on the network topology");
 
@@ -377,6 +380,22 @@ void TopoLB::initDataStructures(CentralLB::LDStats *stats,int count,int *newmap)
     }
   }
 
+  /***************************/
+  //Just a test
+  /*
+  for(int i=0;i<count;i++)
+    commUA[0];
+  for(int i=0;i<count;i++)
+  {
+    for(int j=0;j<i;j++)
+    {
+      comm[j][i]=comm[i][j]= rand()%100;
+      commUA[i]+=comm[i][j];
+      commUA[j]+=comm[i][j];
+    }
+  }
+  */
+
   /******Avg degree test *******/
   total_comm=0;
   if(_lb_debug2_on)
@@ -392,7 +411,7 @@ void TopoLB::initDataStructures(CentralLB::LDStats *stats,int count,int *newmap)
         comm_i_total+=comm[i][j];
       }
     }
-      //CkPrintf("Avg degree (%d nodes) : %d\n",count,avg_degree/count);
+     // CkPrintf("Avg degree (%d nodes) : %d\n",count,avg_degree/count);
   }
   /***************************/
 
@@ -407,9 +426,11 @@ void TopoLB::initDataStructures(CentralLB::LDStats *stats,int count,int *newmap)
     for(int j=0;j<count;j++)
     {
       //Initialize by (total comm of i)*(avg dist from j);
-      hopBytes[i][j]=commUA[i]*dist[j][count];
-      //Just a test
-      //hopBytes[i][j]=0;
+      if(_DIJKSTRA_LIKE_)
+        hopBytes[i][j]=0;
+      else
+        hopBytes[i][j]=commUA[i]*dist[j][count];
+
       hbtotal+=hopBytes[i][j];
       if(hopBytes[i][hbminIndex]>hopBytes[i][j])
         hbminIndex=j;
@@ -427,6 +448,7 @@ void TopoLB::initDataStructures(CentralLB::LDStats *stats,int count,int *newmap)
     cfree[i]=true;
     assign[i]=-1;
   }
+
 }
 
 void randomAssign(int count, int *perm)
@@ -442,75 +464,9 @@ void randomAssign(int count, int *perm)
   }
 }
 
-void TopoLB :: work(CentralLB::LDStats *stats,int count)
+void TopoLB::performMapping(int *newmap, int count)
 {
-  int i, j;
-  if (_lb_args.debug() >= 2) 
-  {
-    CkPrintf("In TopoLB Strategy...\n");
-  }
-  
-  /****Make sure that there is at least one available processor.***/
-  int proc;
-  for (proc = 0; proc < count; proc++) 
-  {
-    if (stats->procs[proc].available)  
-      break;
-  }
-       
-  if (proc == count) 
-  {
-    CmiAbort ("TopoLB: no available processors!");
-  }
-  removeNonMigratable(stats,count);
-
-  if(_lb_debug_on)
-  {
-    CkPrintf("Num of procs: %d\n",count);
-    CkPrintf("Num of objs:  %d\n",stats->n_objs);
-  }
-
-  /**************Initialize Topology ****************************/
-  LBtopoFn topofn;
-  topofn = LBTopoLookup(_lbtopo);
-  if (topofn == NULL) 
-  {
-       char str[1024];
-    CmiPrintf("TopoLB> Fatal error: Unknown topology: %s. Choose from:\n", _lbtopo);
-    printoutTopo();
-    sprintf(str, "TopoLB> Fatal error: Unknown topology: %s", _lbtopo);
-    CmiAbort(str);
-  }
-  topo = topofn(count);
-
-  /*********** Compute Partitions *********************************/
-  if(_lb_debug_on)
-    CkPrintf("before computing partitions...\n");
-  
-  int *newmap = new int[stats->n_objs];
-  if(_make_new_grouping_)
-    computePartitions(stats,count,newmap);
-  else
-  {
-    for(i=0;i<stats->n_objs;i++)
-    {
-      newmap[i]=stats->from_proc[i];
-    }
-  }
-  /***************** Fill Data Structures *************************/
-  if(_lb_debug_on)
-    CkPrintf("before allocating dataStructures...\n");
-  allocateDataStructures(count);
-  if(_lb_debug_on)
-    CkPrintf("before initizlizing dataStructures...\n");
-  initDataStructures(stats,count,newmap);
-
-  if(_lb_debug_on)
-    printDataStructures(count, stats->n_objs,newmap);
-  
-  /****************** Perform Mapping *****************************/
-
+  int i,j;
   if(_lb_debug_on)
     CkPrintf("before performing mapping...\n");
 
@@ -691,7 +647,7 @@ void TopoLB :: work(CentralLB::LDStats *stats,int count)
         continue;
       }
 
-      // If reached here cpart communicates with just assigned partition( part_index)
+      // If reached here cpart communicates with the partition assigned in this step( part_index)
       int h_min_index=-1;
       double h_min=-1;
       double h_total=0;
@@ -706,7 +662,10 @@ void TopoLB :: work(CentralLB::LDStats *stats,int count)
         if(!pfree[proc]) // No need to update for assigned procs
           continue;
 
-        hopBytes[cpart][proc]+=c2*(dist[proc][proc_index]-dist[proc][count]);
+        if(_DIJKSTRA_LIKE_)
+          hopBytes[cpart][proc]+=c2*(dist[proc][proc_index]);
+        else
+          hopBytes[cpart][proc]+=c2*(dist[proc][proc_index]-dist[proc][count]);
         h_updated=hopBytes[cpart][proc];
         
         //CmiAssert(h_updated >= EPSILON);
@@ -730,6 +689,85 @@ void TopoLB :: work(CentralLB::LDStats *stats,int count)
   
   /******************  Fill out final composition Mapping **************************/
 
+}
+
+void TopoLB :: work(CentralLB::LDStats *stats,int count)
+{
+  int i, j;
+  if (_lb_args.debug() >= 2) 
+  {
+    CkPrintf("In TopoLB Strategy...\n");
+  }
+  
+  /****Make sure that there is at least one available processor.***/
+  int proc;
+  for (proc = 0; proc < count; proc++) 
+  {
+    if (stats->procs[proc].available)  
+      break;
+  }
+       
+  if (proc == count) 
+  {
+    CmiAbort ("TopoLB: no available processors!");
+  }
+  removeNonMigratable(stats,count);
+
+  if(_lb_debug_on)
+  {
+    CkPrintf("Num of procs: %d\n",count);
+    CkPrintf("Num of objs:  %d\n",stats->n_objs);
+  }
+
+  /**************Initialize Topology ****************************/
+  LBtopoFn topofn;
+  topofn = LBTopoLookup(_lbtopo);
+  if (topofn == NULL) 
+  {
+       char str[1024];
+    CmiPrintf("TopoLB> Fatal error: Unknown topology: %s. Choose from:\n", _lbtopo);
+    printoutTopo();
+    sprintf(str, "TopoLB> Fatal error: Unknown topology: %s", _lbtopo);
+    CmiAbort(str);
+  }
+  topo = topofn(count);
+
+  /*********** Compute Partitions *********************************/
+  if(_lb_debug_on)
+    CkPrintf("before computing partitions...\n");
+  
+  int *newmap = new int[stats->n_objs];
+  if(_make_new_grouping_)
+    computePartitions(stats,count,newmap);
+  else
+  {
+    for(i=0;i<stats->n_objs;i++)
+    {
+      newmap[i]=stats->from_proc[i];
+    }
+  }
+  /***************** Fill Data Structures *************************/
+  if(_lb_debug_on)
+    CkPrintf("before allocating dataStructures...\n");
+
+  allocateDataStructures(count);
+
+  if(_lb_debug_on)
+    CkPrintf("before initizlizing dataStructures...\n");
+
+  initDataStructures(stats,count,newmap);
+
+  if(_lb_debug_on)
+    printDataStructures(count, stats->n_objs,newmap);
+  
+  /****************** Perform Mapping *****************************/
+
+  if(_lb_debug_on)
+    CkPrintf("before performing mapping...\n");
+  
+  performMapping(newmap,count);
+
   for(i=0;i<stats->n_objs;i++)
   {
     stats->to_proc[i]= assign[newmap[i]];
@@ -739,13 +777,14 @@ void TopoLB :: work(CentralLB::LDStats *stats,int count)
   {
     double hbval1=getHopBytesNew(NULL,count);
     CkPrintf("\n");
-    CkPrintf(" Original   hopBytes : %.1lf  Avg comm hops: %lf\n", hbval1,hbval1/total_comm);
+    CkPrintf(" Original hopBytes : %.1lf \n", hbval1);
+    CkPrintf(" Original Avg hops : %.1lf \n", hbval1/total_comm);
     double hbval2=getHopBytesNew(assign,count);
-    CkPrintf(" Resulting  hopBytes : %.1lf  Avg comm hops: %lf\n", hbval2,hbval2/total_comm);
-    CkPrintf(" Percentage gain %.2lf\n",(hbval1-hbval2)*100/hbval1);
-    CkPrintf("\n");
+    //CkPrintf(" Resulting hopBytes : %.1lf \n", hbval2);
+    //CkPrintf(" Resulting Avg hops : %.1lf \n", hbval2/total_comm);
+    //CkPrintf(" Percentage gain %.2lf\n",(hbval1-hbval2)*100/hbval1);
+    //CkPrintf("\n");
     
-    /*
     double total_hb_rand=0;
     int nTrials=10;
     for(int t=0;t<nTrials;t++)
@@ -753,19 +792,21 @@ void TopoLB :: work(CentralLB::LDStats *stats,int count)
       randomAssign(count, assign);
       double hbval3=getHopBytesNew(assign,count);
       total_hb_rand+=hbval3;
-      //CkPrintf(" Random  hopBytes : %.1lf  Avg comm hops: %lf\n", hbval3,hbval3/total_comm);
+     //CkPrintf(" Random hopBytes : %.1lf \n", hbval3);
+     //CkPrintf(" Random Avg hops : %.1lf \n", hbval3/total_comm);
     }
-    CkPrintf("\n");
-    double hbval3=total_hb_rand/nTrials;
-    CkPrintf(" Average random hopBytes : %.1lf Avg comm hops : %lf\n",total_hb_rand/nTrials,total_hb_rand/(nTrials*total_comm)); 
-    CkPrintf(" Percentage gain(TopoLB vs random) %.2lf\n",(hbval3-hbval2)*100/hbval3);
-    */
+    //CkPrintf("\n");
+    double hbval4=total_hb_rand/nTrials;
+    CkPrintf(" Average Random hopBytes : %.1lf \n", hbval4);
+    CkPrintf(" Average Random Avg hops : %.1lf \n", hbval4/total_comm);
+    CkPrintf(" Resulting hopBytes : %.1lf \n", hbval2);
+    CkPrintf(" Resulting Avg hops : %.1lf \n", hbval2/total_comm);
+    CkPrintf(" Percentage gain(TopoLB vs random) %.2lf\n",(hbval4-hbval2)*100/hbval4);
     CkPrintf("\n");
   }
-
   freeDataStructures(count);
   delete[] newmap;
-
+  return;
 }
 
 
index 57565c2c7e6789a7d519739a007b577219d3178c..3174f24dd1b2eacbf73974341015a5733a55727a 100644 (file)
@@ -17,6 +17,7 @@ class TopoLB : public CentralLB
     TopoLB (CkMigrateMessage *m) : CentralLB (m) { };
   
     void work (CentralLB::LDStats *stats, int count);
+   // void work_fromFile (char *filename);
     void pup (PUP::er &p) { CentralLB::pup(p); }
        
     LBTopology                 *topo;
@@ -39,6 +40,7 @@ class TopoLB : public CentralLB
     virtual void printDataStructures(int num_procs, int num_objs, int *newmap);
     virtual double getHopBytes(CentralLB::LDStats *stats,int count,CkVec<int>obj_to_proc);
     virtual double getHopBytesNew(int *assign_map, int count);
+    void performMapping(int *newmap, int count);
     
     CmiBool QueryBalanceNow (int step);
 };