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); } }
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); } } }
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); } }
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); } } } */ }