[Mlir-commits] [mlir] [MLIR][XeGPU] Enhance XeGPU lane layout to support "wrap-around" distribution (PR #186958)
Artem Kroviakov
llvmlistbot at llvm.org
Thu Mar 19 08:11:09 PDT 2026
================
@@ -270,6 +270,54 @@ def DistributeLayoutAttr: AttrInterface<"DistributeLayoutAttr"> {
"FailureOr<SmallVector<SmallVector<Value>>>",
"computeDistributedCoords",
(ins "OpBuilder &": $builder, "Location":$loc, "Value":$linearId, "ArrayRef<int64_t>":$shape)>,
+ InterfaceMethod<[{Statically computes multidimensional coordinates for all dist units
+ assigned to a compute unit identified by `linearId`. This is the
+ compile-time counterpart of `computeDistributedCoords`: it performs
+ the same delinearization and round-robin enumeration but operates
+ entirely on static integer values. Returns a list of coordinate
+ vectors, one per dist unit.}],
+ /*retTy=*/"SmallVector<SmallVector<int64_t>>",
+ /*methodName=*/"computeStaticDistributedCoords",
+ /*args=*/(ins "int64_t":$linearId, "ArrayRef<int64_t>":$shape)>,
+ InterfaceMethod<[{Computes the per-compute-unit shape by dividing each dimension of
+ `shape` by the corresponding layout factor (sg_layout or
+ lane_layout). For wrap-around dimensions where the division is uneven,
+ the tensor tile is broadcasted to all subgroups/lanes.}],
+ /*retTy=*/"FailureOr<SmallVector<int64_t>>",
+ /*methodName=*/"computeDistributedShape",
+ /*args=*/(ins "SmallVector<int64_t>":$shape),
+ /*methodBody=*/[{
+ SmallVector<int64_t> layout;
+ SmallVector<int64_t> subShape;
+ if ($_self.isForWorkgroup()) {
+ layout = $_self.getEffectiveSgLayoutAsInt();
+ subShape = $_self.getEffectiveSgDataAsInt();
+ } else if ($_self.isForSubgroup()) {
+ layout = $_self.getEffectiveLaneLayoutAsInt();
+ subShape = $_self.getEffectiveLaneDataAsInt();
+ } else {
+ return failure();
+ }
+ assert(
+ !subShape.empty() &&
+ "sgdata or lanedata cannot be empty for distributed shape computation");
+ SmallVector<int64_t> distributedShape(shape.size());
+ for (auto [i, dim] : llvm::enumerate(shape)) {
+ int64_t distri_unit = layout[i]*subShape[i];
----------------
akroviakov wrote:
```suggestion
int64_t distUnit = layout[i]*subShape[i];
```
https://github.com/llvm/llvm-project/pull/186958
More information about the Mlir-commits
mailing list