Skip to content

feat(iree): fuse elementwise generic ops into iree_linalg_ext.scan ops#39

Draft
AGindinson wants to merge 1 commit into
artem/cpu-stack/scan-op-semanticsfrom
artem/cpu-stack/fuse-scan
Draft

feat(iree): fuse elementwise generic ops into iree_linalg_ext.scan ops#39
AGindinson wants to merge 1 commit into
artem/cpu-stack/scan-op-semanticsfrom
artem/cpu-stack/fuse-scan

Conversation

@AGindinson

@AGindinson AGindinson commented Mar 13, 2025

Copy link
Copy Markdown
Contributor

Enhance iree_linalg_ext.scan support in the pipeline by introducing a basic fusion pattern for generic ops that are determined as unary elementwise operations. Provided that the full shapes match between the GenericOp producer and the ScanOp consumer, we can simply repeat the unary operation directly during the input data indexation of a ScanOp reduction routine.

This is essentially serving as a workaround for LLVMCPU pipeline, where stack-bound allocations tend to exceed the size limit in the presence of a ScanOp that just receives the pipeline's default tiling configuration.
Further enhancements should include tiling config fine-tuning for LinalgExt operations, conscious restrictions of work-group level tiling depending on the predicted size of stack-bound allocas within a dispatch. However, the fusion itself is beneficial, and we should look to support more producer cases, expanding the logic onto other pre-defined LinalgExt ops.

AGindinson commented Mar 13, 2025

Copy link
Copy Markdown
Contributor Author

Warning

This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

This stack of pull requests is managed by Graphite. Learn more about stacking.

@AGindinson AGindinson force-pushed the artem/cpu-stack/fuse-scan branch from 92dccd2 to 7dd47ee Compare March 14, 2025 18:01
@AGindinson AGindinson force-pushed the artem/cpu-stack/scan-op-semantics branch from 81c38ad to 03fbc4f Compare March 14, 2025 18:01
Enhance `iree_linalg_ext.scan` support in the pipeline by introducing a basic
fusion pattern for generic ops that are determined as unary elementwise
operations. Provided that the full shapes match between the GenericOp
producer and the ScanOp consumer, we can simply repeat the unary operation
directly during the input data indexation of a ScanOp reduction routine.

This is essentially serving as a workaround for LLVMCPU pipeline, where
stack-bound allocations tend to exceed the size limit in the presence of a
ScanOp that just receives the pipeline's default tiling configuration.
Further enhancements should include tiling config fine-tuning for LinalgExt
operations, concious restrictions of work-group level tiling depending
on the predicted size of stack-bound allocas within a dispatch. However,
the fusion itself is beneficial, and we should look to support more producer
cases, expanding the logic onto other pre-defined LinalgExt ops.
@AGindinson AGindinson force-pushed the artem/cpu-stack/fuse-scan branch from 7dd47ee to fb955a8 Compare March 17, 2025 09:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant