Example #1
0
void GridCommRefineLB::Place_Objects_On_PEs ()
{
  int i;


  for (i = 0; i < Num_Objects; i++) {
    Assign_Object_To_PE (i, (&Object_Data[i])->from_pe);
  }
}
Example #2
0
void GridCommLB::Map_NonMigratable_Objects_To_PEs ()
{
    int i;


    for (i = 0; i < Num_Objects; i++) {
        if (!((&Object_Data[i])->migratable)) {
            if (_lb_args.debug() > 1) {
                CkPrintf ("[%d] GridCommLB identifies object %d as non-migratable.\n", CkMyPe(), i);
            }

            Assign_Object_To_PE (i, (&Object_Data[i])->from_pe);
        }
    }
}
Example #3
0
void GridCommLB::Map_Migratable_Objects_To_PEs (int cluster)
{
    int target_object;
    int target_pe;


    while (1) {
        target_object = Find_Maximum_Object (cluster);
        target_pe = Find_Minimum_PE (cluster);

        if ((target_object == -1) || (target_pe == -1)) {
            break;
        }

        Assign_Object_To_PE (target_object, target_pe);
    }
}
Example #4
0
void GridCommRefineLB::Remap_Objects_To_PEs (int cluster)
{
  int num_cluster_pes;
  int num_wan_msgs;
  int avg_wan_msgs;
  int target_object;
  int target_pe;
  int i;


  // Compute average number of objects per PE for this cluster.
  num_cluster_pes = 0;
  num_wan_msgs = 0;
  for (i = 0; i < Num_PEs; i++) {
    if (cluster == (&PE_Data[i])->cluster) {
      num_cluster_pes += 1;
      num_wan_msgs += (&PE_Data[i])->num_wan_msgs;
    }
  }
  avg_wan_msgs = num_wan_msgs / num_cluster_pes;

  // Move objects away from PEs that exceed the average.
  for (i = 0; i < Num_PEs; i++) {
    if (cluster == (&PE_Data[i])->cluster) {
      while ((&PE_Data[i])->num_wan_msgs > (avg_wan_msgs * CK_LDB_GridCommRefineLB_Tolerance)) {
	target_object = Find_Maximum_WAN_Object (i);
	target_pe = Find_Minimum_WAN_PE (cluster);

	if ((target_object == -1) || (target_pe == -1)) {
	  break;
	}

	Remove_Object_From_PE (target_object, i);
	Assign_Object_To_PE (target_object, target_pe);
      }
    }
  }

/*
  // Compute average number of objects per PE for this cluster.
  num_cluster_pes = 0;
  num_wan_objs = 0;
  for (j = 0; j < Num_PEs; j++) {
    if (cluster == (&PE_Data[j])->cluster) {
      num_cluster_pes += 1;
      num_wan_objs += (&PE_Data[j])->num_wan_objs;
    }
  }
  avg_wan_objs = num_wan_objs / num_cluster_pes;

  // Move objects away from PEs that exceed the average.
  for (j = 0; j < Num_PEs; j++) {
    if (cluster == (&PE_Data[j])->cluster) {
      while ((&PE_Data[j])->num_wan_objs > (avg_wan_objs * CK_LDB_GridCommRefineLB_Tolerance)) {
	target_object = Find_Maximum_WAN_Object (j);
	target_pe = Find_Minimum_WAN_PE (i);

	if ((target_object == -1) || (target_pe == -1)) {
	  break;
	}

	Remove_Object_From_PE (target_object, j);
	Assign_Object_To_PE (target_object, target_pe);
      }
    }
  }
*/
}