Skip to content

Commit 8ec07e4

Browse files
authored
Fix bug in load balancing when a rank has exactly as many active simulation as the global average (#200)
* Handle case where ranks have exactly as many active simulation as the global average * Add changelog entry
1 parent 1260d29 commit 8ec07e4

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## latest
44

5+
- Fix bug in load balancing when a rank has exactly as many active simulation as the global average [#200](https://github.com/precice/micro-manager/pull/200)
56
- Use global maximum similarity distance in local adaptivity [#197](https://github.com/precice/micro-manager/pull/197)
67
- Log adaptivity metrics at t=0 [#194](https://github.com/precice/micro-manager/pull/194)
78
- Use `|` delimiter in CSV files of adaptivity metrics data [#193](https://github.com/precice/micro-manager/pull/193)

micro_manager/adaptivity/global_adaptivity_lb.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -115,14 +115,20 @@ def _redistribute_active_sims(self, micro_sims: list) -> None:
115115
f_avg_active_sims = math.floor(avg_active_sims - self._threshold)
116116
c_avg_active_sims = math.ceil(avg_active_sims + self._threshold)
117117

118-
if n_active_sims_local < f_avg_active_sims:
119-
recv_sims = f_avg_active_sims - n_active_sims_local
120-
elif n_active_sims_local == f_avg_active_sims:
121-
recv_sims += 1
122-
elif n_active_sims_local > c_avg_active_sims:
123-
send_sims = n_active_sims_local - c_avg_active_sims
124-
elif n_active_sims_local == c_avg_active_sims:
125-
send_sims += 1
118+
if f_avg_active_sims == c_avg_active_sims:
119+
if n_active_sims_local < avg_active_sims:
120+
recv_sims = int(avg_active_sims) - n_active_sims_local
121+
elif n_active_sims_local > avg_active_sims:
122+
send_sims = int(n_active_sims_local) - avg_active_sims
123+
else:
124+
if n_active_sims_local < f_avg_active_sims:
125+
recv_sims = f_avg_active_sims - n_active_sims_local
126+
elif n_active_sims_local == f_avg_active_sims:
127+
recv_sims += 1
128+
elif n_active_sims_local > c_avg_active_sims:
129+
send_sims = n_active_sims_local - c_avg_active_sims
130+
elif n_active_sims_local == c_avg_active_sims:
131+
send_sims += 1
126132

127133
# Number of active sims that each rank wants to send and receive
128134
global_send_sims = self._comm_world.allgather(send_sims)

0 commit comments

Comments
 (0)