[Mlir-commits] [mlir] [mlir][TilingInterface] Update documentation for `TilingInterface.td`. (PR #95178)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed Jun 12 23:35:41 PDT 2024
================
@@ -98,51 +155,66 @@ def TilingInterface : OpInterface<"TilingInterface"> {
>,
InterfaceMethod<
/*desc=*/[{
- Method to return the tile of the iteration domain where
- values from the given tile of the operand are used.
+ Method to generate the code that produces a tile of the result.
+
+ This method is required to allow operations to be "tiled and fused"
+ with an (already tiled) consumer. Typically, for two operations with
+ producer -> consumer relation ship, to compute a tile of the
+ consumer a `slice` of the producer is needed. This method allows
+ computing that slice of the produce in-place, there-by "fusing"
+ the operations at tile-granularity. This method is different from
+ `getTiledImplementation`, which produces a tiled implementation
+ for a tile of the iteration space. This method produces a tiled
+ implementation based on the tile of producer required.
+ - `resultNumber` is the result of the producer used by the consumer.
+ - `offsets` is the offset of the slice of the producer result used by
+ the tiled implementation of the consumer.
+ - `sizes` is the size of the slice of the producer result used by the
+ consumer.
+ If fusion of the producer with the consumer is not legal for the
+ operation/result, this method should return failure.
+
+ Note: This method only deals with the mechanism of implementing the
+ fusion. In general the fusion might result in recomputation (based on
+ the way the result is produced by the producer and the access pattern
+ used in the consumer to access). This is upto the caller to handle
+ appropriately.
}],
- /*retType=*/"::mlir::LogicalResult",
- /*methodName=*/"getIterationDomainTileFromOperandTile",
+ /*retType=*/"FailureOr<::mlir::TilingResult>",
+ /*methodName=*/"generateResultTileValue",
/*args=*/(ins
"OpBuilder &":$b,
- "unsigned":$operandNumber,
- "ArrayRef<OpFoldResult> ":$offsets,
- "ArrayRef<OpFoldResult> ":$sizes,
- "SmallVectorImpl<OpFoldResult> &":$iterDomainOffsets,
- "SmallVectorImpl<OpFoldResult> &":$iterDomainSizes),
+ "unsigned":$resultNumber,
+ "ArrayRef<OpFoldResult>":$offsets,
+ "ArrayRef<OpFoldResult>":$sizes),
/*methodBody=*/"",
/*defaultImplementation=*/[{
return failure();
}]
>,
InterfaceMethod<
/*desc=*/[{
- Method to generate the code that produces a tile of the result.
+ Method to generate the tiled implementation of an operation that uses
+ exactly a tile of the given operand.
- Generates the IR that computes the tile of a result of the
- operation. The `offsets` and `sizes` describe the tile of
- the output required. This is different from
- `getTiledImplementation` which generates the tiled
- implementation of the operation given a tile of the
- iteration space. This method generates a tiled
- implementation of the operation based on the tile of the
- result required. This method enables fusion by using tile
- and fuse. The method returns failure if the operation can't be
- tiled to generate the result tile. In practical terms this
- implies it cannot be tiled and fused with its consumers.
-
- - `offsets` provides the offset of the tile in the coordinate system
- of the original iteration space, i.e., if an iteration space
- dimension had non-zero offset, it must be included in the offset
- provided here (as opposed to zero-based offset "relative" to the
- iteration space).
- - `sizes` provides the size of the tile.
+ This method is required to allow operations to be "tiled and fused"
+ with an (already tiled) producer. Given a tile of the producer, this
+ method generates the tile of the consumer that uses exactly this
+ produced tile. In some sense it is the "reverse" of
+ `generateResultTileValue`.
+ - `operandNumber` is the result of the producer used by the consumer.
+ - `offsets` is the offset of the slice of the producer result used by
+ the tiled implementation of the consumer.
+ - `sizes` is the size of the slice of the producer result used by the
+ consumer.
+ If it is illegal to fuse with a producer along the given operand for
+ an operation, the implementation should return a failure.
----------------
MaheshRavishankar wrote:
Added it to `getIterationDomainTileFromOperandTile`.
https://github.com/llvm/llvm-project/pull/95178
More information about the Mlir-commits
mailing list