Skip to content

DispatchCreation

-iree-dispatch-creation-bubble-up-expand-shapeslink

Propagate expand_shapes up the program (and collapse_shapes down).

Optionslink

-enable-bubble-up-expand-shapes-across-reduction-ops : Enables propagation of 'expand_shape's through 'linalg.generic's with reductions

-iree-dispatch-creation-bubble-up-extract-sliceslink

Bubble up extract_slice ops through Linalg-like ops

-iree-dispatch-creation-clone-producers-into-dispatch-regionslink

Clone producers into dispatch regions to be isolated above.

Pass to clone into dispatch regions producers of values used in the dispatch regions but defined in the above. This prepares the dispatch regions for converting to dispatch workgroups with explicit captures.

Optionslink

-aggressive : Include operations that are cloned only under aggressive fusion mode

-iree-dispatch-creation-collapse-dimensionslink

Collapse dimensions of Linalg Ops on tensor ops.

Collapse dimensions of Linalg Ops on tensor ops inside dispatch.region ops and hoist the reshaping operations out of the dispatch.

Optionslink

-max-iterations : Maximum number of iterations to wait for collapse dimensions to converge

-iree-dispatch-creation-collapse-reduction-dimensionslink

Collapse reduction dimensions when possible.

-iree-dispatch-creation-convert-dispatch-regions-to-workgroupslink

Convert dispatch regions to dispatch workgroups.

Pass to convert dispatch regions to dispatch workgroups. This pass is intended to be used after dispatch regions have been formed.

Statisticslink

num-dispatches : Number of dispatches created

-iree-dispatch-creation-convert-encoding-to-flowlink

Convert top-level Encoding ops to Flow ops.

Pass to convert top-level Encoding ops to Flow ops, which only converts the Encoding ops outside flow.dispatch.region to Flow.

-iree-dispatch-creation-convert-tensor-to-flowlink

Convert tensor operations to flow

Pass to convert tensor operations to flow.tensor.* operations.

Statisticslink

num-slow-copy-dispatches : Number of slow copy dispatches (for handling slices) created

-iree-dispatch-creation-elementwise-op-fusionlink

Fuse elementwise operations.

Optionslink

-fuse-multi-reduction : Fuse ops that have multiple reduction iterators

-iree-dispatch-creation-fold-unit-extent-dimslink

Fold unit extent dimension of operations.

Imports upstream patterns to fold unit extent dims but with IREE control.

-iree-dispatch-creation-fold-unit-extent-dims-for-funclink

Fold unit extent dimension of operations on a function.

Imports upstream patterns to fold unit extent dims but with IREE control.

-iree-dispatch-creation-form-dispatch-regionslink

Form Dispatch Region Ops from Linalg operations on tensors to form dispatch.regions.

Pass to form dispatch.region ops from Linalg on tensor ops. A dispatch region is created for each tiled loop nest. This pass only moves the root compute op into the dispatch region, allowing producers to be outside.

Optionslink

-aggressive-fusion       : Aggressive mode enabling fusions not ready for all backends
-fuse-pad-with-consumers : Enable fusing pad with consumer
-fuse-pad-with-producers : Enable fusion of pad with producers

-iree-dispatch-creation-form-scalar-dispatcheslink

Form Dispatch Regions for scalar computations.

-iree-dispatch-creation-fuse-encoding-ops-into-dispatch-regions-passlink

Fuses set_encoding ops into producer dispatch regions, or forms new dispatches around them.

-iree-dispatch-creation-fuse-horizontal-contractionslink

Fuses horizontal contraction ops

For cases where multiple contractions - that dont have a direct dependence - that have the same LHS operand - all the N dimensions of the RHS operands used are the same Such contractions can be executed as a single contraction, i.e.

A = matmul(lhs, rhs0); B = matmul(lhs, rhs1); C = matmul(lhs, rhs2);

can be combined into result = matmul(lhs, concat_along_N(rhs0, rhs1, rhs2)); A = slice0(result) B = slice1(result) C = slice2(result)

Instead of doing an actual concat of the RHS operands, and extracting slices of the result, the pass generates a single operation with - the lhs operands - all the rhs operands - multiple results representing the individual matmuls

Optionslink

-fusion-limit : Maximum number of contractions fused into one

Statisticslink

num-fusion-groups : Number of fusion groups found
num-size-2-groups : Number of fusion groups of size 2
num-size-3-groups : Number of fusion groups of size 3

-iree-dispatch-creation-fuse-multi-use-elementwise-producerlink

Fuse elementwise linalg operations on tensors when producers have multiple uses.

Optionslink

-num-iterations : Number of iterations to fuse multiuse ops

-iree-dispatch-creation-fusion-preprocessinglink

Run useful preprocessing patterns that help with fusion.

-iree-dispatch-creation-hoist-encoding-opslink

Hoists tensor encoding ops out of flow dispatch regions.

Optionslink

-hoist-encodings-for-constexpr : Enable the hoisting when the source is a ConstExpr.

-iree-dispatch-creation-materialize-default-workgroup-count-regionlink

Canonicalize dispatch workgroups ops.

Apply dispatch workgroups canonicalization patterns.

-iree-dispatch-creation-propagate-encodingslink

Propagate encodings across other operations.

-iree-dispatch-creation-set-encodinglink

Introduces tensor encoding for flow dispatch regions.

Optionslink

-encoding-option : Select the type of encoding options to add.

-iree-dispatch-creation-sink-reshapeslink

Sink reshapes to allow for compute op -> consumer fusion.

-iree-dispatch-creation-split-reduction-opslink

Split reduction dimension to increase parallelism.

-iree-dispatch-creation-tensor-pad-to-tensor-insert-slicelink

Convert tensor.pad into linalg.fill + tensor.insert_slice.

Optionslink

-skip-one-linalg-use-case : Skip the op that has only one use which is usedby a Linalg op

-iree-dispatch-creation-transpose-generic-opslink

Transpose generic op loops.