Skip to content

Commit

Permalink
Adjusting BFS to seek circular dependencies in the msccl-tools DAG (#459
Browse files Browse the repository at this point in the history
)

Co-authored-by: Binyang Li <[email protected]>
  • Loading branch information
caiomcbr and Binyang2014 authored Feb 7, 2025
1 parent 7f3b088 commit e7cff89
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 2 deletions.
4 changes: 3 additions & 1 deletion python/mscclpp/language/ir.py
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,9 @@ class _NopConverter(_OpConverter):
def to_json(self, op: Op, tb_channel_dict: dict) -> _JsonInstruction:
return _JsonInstruction(
name=op.inst.value,
deps=list(map(lambda dep: {"tb": dep.tb, "step": dep.step}, op.depends)),
deps=sorted(
list(map(lambda dep: {"tb": dep.tb, "step": dep.step}, op.depends)), key=lambda x: (x["tb"], x["step"])
),
)


Expand Down
5 changes: 4 additions & 1 deletion python/mscclpp/language/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ def merge_op(op: Op, other_op: Op):
def circular_dep_after_merge(op: Op, other_op: Op):
root = set([op, other_op])
frontier = set(op.next)
visited = set()
if other_op in frontier:
frontier.remove(other_op)
frontier = list(frontier.union(other_op.next))
Expand All @@ -46,7 +47,9 @@ def circular_dep_after_merge(op: Op, other_op: Op):
# The root node will be visited again if there is a circular dependency
if n in root:
return True
frontier.append(n)
if n not in visited:
frontier.append(n)
visited.add(n)
frontier = frontier[1:]


Expand Down

0 comments on commit e7cff89

Please sign in to comment.