@@ -1434,7 +1434,7 @@ void TemperedLB::originalTransfer() {
1434
1434
// Initialize transfer and rejection counters
1435
1435
int n_transfers = 0 , n_rejected = 0 ;
1436
1436
1437
- // Try to migrate objects only from overloaded objects
1437
+ // Try to migrate objects only from overloaded ranks
1438
1438
if (is_overloaded_) {
1439
1439
std::vector<NodeType> under = makeUnderloaded ();
1440
1440
std::unordered_map<NodeType, ObjsType> migrate_objs;
@@ -1473,7 +1473,7 @@ void TemperedLB::originalTransfer() {
1473
1473
1474
1474
vt_debug_print (
1475
1475
verbose, temperedlb,
1476
- " TemperedLB::decide : selected_node={}, load_info_.size()={}\n " ,
1476
+ " TemperedLB::originalTransfer : selected_node={}, load_info_.size()={}\n " ,
1477
1477
selected_node, load_info_.size ()
1478
1478
);
1479
1479
@@ -1488,7 +1488,7 @@ void TemperedLB::originalTransfer() {
1488
1488
);
1489
1489
vt_debug_print (
1490
1490
verbose, temperedlb,
1491
- " TemperedLB::decide : trial={}, iter={}, under.size()={}, "
1491
+ " TemperedLB::originalTransfer : trial={}, iter={}, under.size()={}, "
1492
1492
" selected_node={}, selected_load={:e}, obj_id={:x}, home={}, "
1493
1493
" obj_load={}, target_max_load={}, this_new_load_={}, "
1494
1494
" criterion={}\n " ,
@@ -1544,14 +1544,63 @@ void TemperedLB::originalTransfer() {
1544
1544
1545
1545
if (theConfig ()->vt_debug_temperedlb ) {
1546
1546
// compute rejection rate because it will be printed
1547
- runInEpochCollective (" TemperedLB::decide -> compute rejection" , [=] {
1547
+ runInEpochCollective (" TemperedLB::originalTransfer -> compute rejection" , [=] {
1548
1548
proxy_.allreduce <&TemperedLB::rejectionStatsHandler, collective::PlusOp>(
1549
1549
n_rejected, n_transfers
1550
1550
);
1551
1551
});
1552
1552
}
1553
1553
}
1554
1554
1555
+ void TemperedLB::swapClusters () {
1556
+ auto lazy_epoch = theTerm ()->makeEpochCollective (" TemperedLB: swapClusters" );
1557
+
1558
+ // Initialize transfer and rejection counters
1559
+ int n_transfers = 0 , n_rejected = 0 ;
1560
+
1561
+ // Try to migrate objects only from overloaded ranks
1562
+ if (is_overloaded_) {
1563
+ // Compute collection of potential targets
1564
+ std::vector<NodeType> under = makeUnderloaded ();
1565
+ std::unordered_map<NodeType, ObjsType> migrate_objs;
1566
+ if (under.size () > 0 ) {
1567
+ std::vector<ObjIDType> ordered_obj_ids = orderObjects (
1568
+ obj_ordering_, cur_objs_, this_new_load_, target_max_load_
1569
+ );
1570
+
1571
+ // Cluster migratable objects on source rank
1572
+
1573
+ // Iterage over potential targets to try to swap clusters
1574
+
1575
+ // // Iteratr over target clusters
1576
+
1577
+ // //// Decide whether swap is beneficial
1578
+
1579
+
1580
+ // ////// If swap is beneficial compute source cluster size
1581
+ // ////// Test whether criterion is creater than swap RTOL times source size
1582
+
1583
+ // //////// Only in this case perform swap
1584
+ // //////// Else reject swap
1585
+
1586
+ } // if (under.size() > 0)
1587
+ } // if (is_overloaded_)
1588
+
1589
+ // Finalize epoch
1590
+ theTerm ()->finishedEpoch (lazy_epoch);
1591
+ vt::runSchedulerThrough (lazy_epoch);
1592
+
1593
+ // Report on rejection rate in debug mode
1594
+ if (theConfig ()->vt_debug_temperedlb ) {
1595
+ runInEpochCollective (" TemperedLB::swapClusters -> compute rejection" , [=] {
1596
+ proxy_.allreduce <&TemperedLB::rejectionStatsHandler, collective::PlusOp>(
1597
+ n_rejected, n_transfers
1598
+ );
1599
+ });
1600
+ }
1601
+
1602
+ } // void TemperedLB::originalTransfer()
1603
+
1555
1604
void TemperedLB::thunkMigrations () {
1556
1605
vt_debug_print (
1557
1606
normal , temperedlb,
0 commit comments