Optimize dynamic_gather operations on transposed tensors #1712
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.
Optimization Passes for
dynamic_gatherSummary
This PR implements the
DynamicGatherTransposeoptimization pattern that addresses one of the key optimizations mentioned in the issue: rewritingdynamic_gather(transpose(x), ...)to operate directly on the original tensorx.What was implemented
DynamicGatherTranspose pattern: Optimizes
dynamic_gather(transpose(x), ...)by:start_index_mapto adjust for the removed transposecollapsed_slice_dimsto adjust dimension indicesslice_sizesaccording to the inverse permutationComprehensive test coverage: Added
test/lit_tests/dynamic_gather_opts.mlirwith:Code review and formatting fixes: Applied all review feedback
Fixed compilation error: Added missing batching dimension parameters to
GatherDimensionNumbersAttr::getcallWhat was deferred
dynamic_gatheroperations into a single larger gather is complex and requires:Implementation notes
slice_sizesare currently supported; dynamic slice sizes would require creating runtime operations to permute the sizes tensorgetInversePermutation()helper functionGatherDimensionNumbersAttr::getsignature with empty batching dimension arraysTesting notes
TransposeDynamicSlice,DynamicGatherOpIsNotDynamic)Original prompt
dynamic_gather#184💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.