Bug fixes - forgot to initialize communications matrix.
authorGreg Koenig <koenig@uiuc.edu>
Tue, 24 Jul 2007 03:59:59 +0000 (03:59 +0000)
committerGreg Koenig <koenig@uiuc.edu>
Tue, 24 Jul 2007 03:59:59 +0000 (03:59 +0000)
src/ck-ldb/GridHybridSeedLB.C
src/ck-ldb/GridHybridSeedLB.h

index f986c4186de765294dc898e4b65b2619b880c241..cc140a23f6b2920635cee0a9bef18616b16d71c5 100644 (file)
@@ -279,10 +279,22 @@ void GridHybridSeedLB::Initialize_Communication_Matrix (CentralLB::LDStats *stat
   int recv_index;
   int num_objects;
   LDObjKey *recv_objects;
+  int index;
   int i;
   int j;
 
 
+  Migratable_Objects = new int[Num_Migratable_Objects];
+
+  index = 0;
+  for (i = 0; i < Num_Objects; i++) {
+    if ((&Object_Data[i])->migratable) {
+      (&Object_Data[i])->secondary_index = index;
+      Migratable_Objects[index] = i;
+      index += 1;
+    }
+  }
+
   // Create Communication_Matrix[] to hold all object-to-object message counts.
   Communication_Matrix = new int *[Num_Migratable_Objects];
   for (i = 0; i < Num_Migratable_Objects; i++) {
@@ -356,7 +368,6 @@ void GridHybridSeedLB::Initialize_Communication_Matrix (CentralLB::LDStats *stat
 */
 void GridHybridSeedLB::Partition_Objects_Into_Clusters (CentralLB::LDStats *stats)
 {
-  int *migratable_objects;
   int index;
   int num_partitions;
   int *partition_to_cluster_map;
@@ -387,17 +398,6 @@ void GridHybridSeedLB::Partition_Objects_Into_Clusters (CentralLB::LDStats *stat
     return;
   }
 
-  migratable_objects = new int[Num_Migratable_Objects];
-
-  index = 0;
-  for (i = 0; i < Num_Objects; i++) {
-    if ((&Object_Data[i])->migratable) {
-      (&Object_Data[i])->secondary_index = index;
-      migratable_objects[index] = i;
-      index += 1;
-    }
-  }
-
   // Compute the number of partitions for Metis, based on the scaled CPU power for each cluster.
   // Also create a partition-to-cluster mapping so the output of Metis can be mapped back to clusters.
   num_partitions = 0;
@@ -483,7 +483,7 @@ void GridHybridSeedLB::Partition_Objects_Into_Clusters (CentralLB::LDStats *stat
     partition = newmap[i];
     cluster = partition_to_cluster_map[partition];
 
-    index = migratable_objects[i];
+    index = Migratable_Objects[i];
 
     (&Object_Data[index])->cluster = cluster;
   }
@@ -497,7 +497,6 @@ void GridHybridSeedLB::Partition_Objects_Into_Clusters (CentralLB::LDStats *stat
     delete [] vertex_weights;
   }
   delete [] partition_to_cluster_map;
-  delete [] migratable_objects;
 }
 
 
@@ -591,28 +590,6 @@ void GridHybridSeedLB::Map_NonMigratable_Objects_To_PEs ()
 
 
 
-/**************************************************************************
-**
-*/
-int GridHybridSeedLB::Compute_Cluster_PE_Count (int cluster)
-{
-  int i;
-  int count;
-
-
-  count = 0;
-
-  for (i = 0; i < Num_PEs; i++) {
-    if ((&PE_Data[i])->cluster == cluster) {
-      count += 1;
-    }
-  }
-
-  return (count);
-}
-
-
-
 /**************************************************************************
 **
 */
@@ -1200,6 +1177,9 @@ void GridHybridSeedLB::work (CentralLB::LDStats *stats, int count)
   // Initialize the Cluster_Data[] data structure.
   Initialize_Cluster_Data ();
 
+  // Initialize the Communication_Matrix[] data structure.
+  Initialize_Communication_Matrix (stats);
+
   // Partition objects into clusters.
   Partition_Objects_Into_Clusters (stats);
 
@@ -1211,7 +1191,7 @@ void GridHybridSeedLB::work (CentralLB::LDStats *stats, int count)
 
   // Map migratable objects to PEs in each cluster.
   for (i = 0; i < Num_Clusters; i++) {
-    num_cluster_pes = Compute_Cluster_PE_Count (i);
+    num_cluster_pes = (&Cluster_Data[i])->num_pes;
 
     num_cluster_border_objects = Compute_Cluster_Border_Object_Count (i);
     num_cluster_localonly_objects = Compute_Cluster_LocalOnly_Object_Count (i);
@@ -1291,6 +1271,7 @@ void GridHybridSeedLB::work (CentralLB::LDStats *stats, int count)
   }
 
   // Free memory.
+  delete [] Migratable_Objects;
   for (i = 0; i < Num_Migratable_Objects; i++) {
     delete [] Communication_Matrix[i];
   }
index 12f6a15decc02cb33a194963c89480a44575f696..816ac3295a71953895b710368d3b2f49a697661a 100644 (file)
@@ -106,7 +106,6 @@ class GridHybridSeedLB : public CentralLB
     void Partition_Objects_Into_Clusters (CentralLB::LDStats *stats);
     void Examine_InterObject_Messages (CentralLB::LDStats *stats);
     void Map_NonMigratable_Objects_To_PEs ();
-    int Compute_Cluster_PE_Count (int cluster);
     int Compute_Cluster_Border_Object_Count (int cluster);
     int Compute_Cluster_LocalOnly_Object_Count (int cluster);
     int Compute_PE_NonMigratable_Object_Count (int pe);
@@ -130,6 +129,7 @@ class GridHybridSeedLB : public CentralLB
     PE_Data_T *PE_Data;
     Object_Data_T *Object_Data;
     Cluster_Data_T *Cluster_Data;
+    int *Migratable_Objects;
     int **Communication_Matrix;
 };