in gala/graph_manager.py [0:0]
def _make_graph(self):
phone_book = [[] for _ in range(self.world_size)]
for rank in range(self.world_size):
group = phone_book[rank]
for i in range(0, int(mlog(self.world_size - 1, 2)) + 1):
if i == 0:
f_peer = self._rotate_forward(rank, 1)
b_peer = self._rotate_backward(rank, 1)
else:
f_peer = self._rotate_forward(rank, 1 + 2 ** i)
b_peer = self._rotate_backward(rank, 1 + 2 ** i)
# create directory for non-passive peers
if not self.is_passive(rank) and (
self.is_passive(f_peer) and self.is_passive(b_peer)):
if f_peer not in group:
group.append(f_peer) # forward peer...
if b_peer not in group:
group.append(b_peer) # then backward peer
# create directory for passive peers
elif self.is_passive(rank) and (
not (self.is_passive(f_peer) or self.is_passive(b_peer))):
if b_peer not in group:
group.append(b_peer) # backward peer...
if f_peer not in group:
group.append(f_peer) # then forward peer
return phone_book