Skip to content

Commit 657ef68

Browse files
authored
#603: fixed incorrect handling of no sub mode; also fixed incorrect printouts (#604)
1 parent 63c79dd commit 657ef68

File tree

1 file changed

+22
-19
lines changed

1 file changed

+22
-19
lines changed

src/lbaf/Execution/lbsClusteringTransferStrategy.py

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -257,16 +257,13 @@ def execute(self, known_peers, phase: Phase, ave_load: float, max_load: float):
257257
rank_targets = self._get_ranks_to_traverse(phase.get_ranks(), known_peers)
258258

259259
# Iterate over ranks
260+
n_ranks = len(phase.get_ranks())
260261
for r_src, targets in rank_targets.items():
261262
# Cluster migratable objects on source rank
262263
clusters_src = self.__build_rank_clusters(r_src, True)
263264
self._logger.debug(
264265
f"Constructed {len(clusters_src)} migratable clusters on source rank {r_src.get_id()}")
265266

266-
# Skip subclustering for this rank when it must be done later
267-
if self.__separate_subclustering:
268-
continue
269-
270267
# Perform feasible cluster swaps from given rank to possible targets
271268
if (n_rank_swaps := self.__swap_clusters(phase, r_src, clusters_src, targets)):
272269
# Report on swaps when some occurred
@@ -280,30 +277,36 @@ def execute(self, known_peers, phase: Phase, ave_load: float, max_load: float):
280277
continue
281278

282279
# Perform feasible subcluster swaps from given rank to possible targets
283-
if self.__max_subclusters > 0:
284-
self.__transfer_subclusters(phase, r_src, targets, ave_load, max_load)
280+
if not self.__separate_subclustering:
281+
if self.__max_subclusters > 0:
282+
self.__transfer_subclusters(phase, r_src, targets, ave_load, max_load)
283+
else:
284+
self.__n_sub_skipped += 1
285285

286286
# Report on new load and exit from rank
287287
self._logger.debug(
288288
f"Rank {r_src.get_id()} load: {r_src.get_load()} after {self._n_transfers} object transfers")
289289

290290
# Perform subclustering when it was not previously done
291-
if self.__max_subclusters > 0 and self.__separate_subclustering:
292-
# In non-deterministic case skip subclustering when swaps passed
293-
if self.__n_swaps and not self._deterministic_transfer:
294-
self.__n_sub_skipped = len(rank_targets)
291+
if self.__separate_subclustering:
292+
if self.__max_subclusters > 0:
293+
# In non-deterministic case skip subclustering when swaps passed
294+
if self.__n_swaps and not self._deterministic_transfer:
295+
self.__n_sub_skipped = n_ranks
296+
else:
297+
# Iterate over ranks
298+
for r_src, targets in rank_targets.items():
299+
# Perform feasible subcluster swaps from given rank to possible targets
300+
self.__transfer_subclusters(phase, r_src, targets, ave_load, max_load)
301+
302+
# Report on new load and exit from rank
303+
self._logger.debug(
304+
f"Rank {r_src.get_id()} load: {r_src.get_load()} after {self._n_transfers} object transfers")
295305
else:
296-
# Iterate over ranks
297-
for r_src, targets in rank_targets.items():
298-
# Perform feasible subcluster swaps from given rank to possible targets
299-
self.__transfer_subclusters(phase, r_src, targets, ave_load, max_load)
300-
301-
# Report on new load and exit from rank
302-
self._logger.debug(
303-
f"Rank {r_src.get_id()} load: {r_src.get_load()} after {self._n_transfers} object transfers")
306+
# Subclustering is skipped altogether for all ranks
307+
self.__n_sub_skipped = n_ranks
304308

305309
# Report on global transfer statistics
306-
n_ranks = len(phase.get_ranks())
307310
self._logger.info(
308311
f"Swapped {self.__n_swaps} cluster pairs amongst {self.__n_swap_tries} tries "
309312
f"({100 * self.__n_swaps / self.__n_swap_tries:.2f}%)")

0 commit comments

Comments
 (0)