Fix exponential complexity in MapFusionVertical #2233
Draft
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The
_is_data_accessed_downstream()function was missing visited node tracking in its graph traversal. Even though the dataflow graph is acyclic, the same node can be reached via multiple paths, causing it to be processed exponentially many times. For example, in a diamond-shaped graphA → B,C → D, node D gets visited twice (once via B, once via C). When multiple diamonds are chained together, the visits compound multiplicatively: if D feeds into another diamondD → E,F → G, then G is visited 4 times (2 paths to D × 2 paths from D). With n such diamonds in sequence, the final node gets visited2^ntimes. I added avisitedset to make sure each node is only processed once. This reduces map fusion time from 26+ minutes to seconds on a large test SDFGs.