Skip to content

Commit cb4ecfc

Browse files
committed
#584: added option to preserve subclusters
1 parent 7c81184 commit cb4ecfc

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

src/lbaf/Execution/lbsClusteringTransferStrategy.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ def __init__(self, criterion, parameters: dict, lgr: Logger):
7171
self._logger.info(
7272
f"Enter subclustering immediately after cluster swapping: {self.__separate_subclustering}")
7373

74+
# Decide whether clusters can be broken down
75+
self.__preserve_subclusters = parameters.get("preserve_subclusters", False)
76+
self._logger.info(
77+
f"Allow clusters to be split into subclusters: {self.__separate_subclustering}")
78+
7479
# Initialize percentage of maximum load required for subclustering
7580
self.__subclustering_threshold = parameters.get("subclustering_threshold", 0.0)
7681
self._logger.info(
@@ -280,14 +285,15 @@ def execute(self, known_peers, phase: Phase, ave_load: float, max_load: float):
280285
continue
281286

282287
# Perform feasible subcluster swaps from given rank to possible targets
283-
self.__transfer_subclusters(phase, r_src, targets, ave_load, max_load)
288+
if not self.__preserve_subclusters:
289+
self.__transfer_subclusters(phase, r_src, targets, ave_load, max_load)
284290

285291
# Report on new load and exit from rank
286292
self._logger.debug(
287293
f"Rank {r_src.get_id()} load: {r_src.get_load()} after {self._n_transfers} object transfers")
288294

289295
# Perform subclustering when it was not previously done
290-
if self.__separate_subclustering:
296+
if not self.__preserve_subclusters and self.__separate_subclustering:
291297
# In non-deterministic case skip subclustering when swaps passed
292298
if self.__n_swaps and not self._deterministic_transfer:
293299
self.__n_sub_skipped += len(rank_targets)

src/lbaf/IO/lbsConfigurationValidator.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,8 @@ def __init__(self, config_to_validate: dict, logger: Logger):
214214
Optional("max_subclusters"): And(
215215
int,
216216
lambda x: x > 0.0,
217-
error="Should be of type 'int' and > 0"),
217+
error="Should be of type 'boolint' and > 0"),
218+
Optional("preserve_subclusters"): bool,
218219
Optional("separate_subclustering"): bool,
219220
"criterion": And(
220221
str,

0 commit comments

Comments
 (0)