Skip to content

Commit c1b8d76

Browse files
pifon2atensorflower-gardener
authored andcommitted
[XLA:GPU][NFC] Pad the tile sizes before the tiling propagation.
PiperOrigin-RevId: 891661338
1 parent 980b99c commit c1b8d76

3 files changed

Lines changed: 16 additions & 4 deletions

File tree

third_party/xla/xla/backends/gpu/codegen/triton/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ cc_library(
226226
"//xla/codegen/tiling:tiling_specification",
227227
"//xla/codegen/tiling/experimental:tile",
228228
"//xla/codegen/tiling/experimental:tiled_hlo",
229+
"//xla/codegen/xtile/codegen:emitter_helpers",
229230
"//xla/codegen/xtile/codegen:fusion_emitter",
230231
"//xla/codegen/xtile/ir:xtile",
231232
"//xla/codegen/xtile/ir/transforms:passes",

third_party/xla/xla/backends/gpu/codegen/triton/xtile_compiler.cc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ limitations under the License.
9292
#include "xla/codegen/tiling/experimental/tiling_space.h"
9393
#include "xla/codegen/tiling/symbolic_tile_analysis.h"
9494
#include "xla/codegen/tiling/tiling_specification.h"
95+
#include "xla/codegen/xtile/codegen/emitter_helpers.h"
9596
#include "xla/codegen/xtile/codegen/experimental_fusion_emitter.h"
9697
#include "xla/codegen/xtile/codegen/fusion_emitter.h"
9798
#include "xla/codegen/xtile/ir/transforms/passes.h"
@@ -216,8 +217,9 @@ absl::StatusOr<mlir::OwningOpRef<mlir::ModuleOp>> TileAndEmitXTileModule(
216217
"roots.",
217218
block_level_parameters.output_tile_sizes.size());
218219
}
219-
tiling_space->AssignTileSizes(
220-
block_level_parameters.output_tile_sizes.front());
220+
// Triton requires that all block dimensions are a power of 2.
221+
tiling_space->AssignTileSizes(xtile::GetPaddedTileSizes(
222+
block_level_parameters.output_tile_sizes.front()));
221223

222224
TileAnalysisOrError tiled_computation_or =
223225
TiledHloComputation::Tile(*fusion_adaptor, std::move(tiling_space));

third_party/xla/xla/codegen/xtile/codegen/emitter_helpers.cc

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,14 @@ limitations under the License.
3030
#include "absl/types/span.h"
3131
#include "llvm/ADT/STLExtras.h"
3232
#include "llvm/ADT/SmallVector.h"
33+
#include "llvm/ADT/bit.h"
3334
#include "llvm/Support/Casting.h"
3435
#include "llvm/Support/MathExtras.h"
3536
#include "mlir/Dialect/Arith/IR/Arith.h"
3637
#include "mlir/Dialect/Arith/Utils/Utils.h"
3738
#include "mlir/Dialect/Math/IR/Math.h"
3839
#include "mlir/Dialect/Tensor/IR/Tensor.h"
40+
#include "mlir/IR/AffineExpr.h"
3941
#include "mlir/IR/Builders.h"
4042
#include "mlir/IR/BuiltinAttributes.h"
4143
#include "mlir/IR/BuiltinOps.h"
@@ -93,6 +95,12 @@ namespace mm = ::mlir::math;
9395
namespace {
9496
using TensorValue = mlir::TypedValue<mlir::RankedTensorType>;
9597

98+
bool ArePowersOfTwo(ArrayRef<int64_t> values) {
99+
return llvm::all_of(values, [](int64_t size) {
100+
return size > 0 && llvm::has_single_bit(static_cast<uint64_t>(size));
101+
});
102+
}
103+
96104
// Emit a value as Index clamped to [lower, upper].
97105
Value EmitClampedIndex(mlir::ImplicitLocOpBuilder& b, Value value,
98106
int64_t lower, int64_t upper) {
@@ -543,7 +551,8 @@ Value Bitcast(mlir::ImplicitLocOpBuilder& b, Value value, Type type) {
543551
tiled_hlo.tile().GetStaticTileSizes());
544552
ASSIGN_OR_RETURN(SmallVector<int64_t> tile_strides,
545553
tiled_hlo.tile().GetStaticTileStrides());
546-
auto padded_tile_sizes = GetPaddedTileSizes(tile_sizes);
554+
DCHECK(ArePowersOfTwo(tile_sizes)) << "Tile sizes must be a power of 2.";
555+
547556
const Shape& shape = tiled_hlo.hlo()->shape();
548557
SmallVector<int64_t> original_shape;
549558
original_shape.assign(shape.dimensions().begin(), shape.dimensions().end());
@@ -554,7 +563,7 @@ Value Bitcast(mlir::ImplicitLocOpBuilder& b, Value value, Type type) {
554563

555564
auto minor_to_major_layout = llvm::to_vector(LayoutUtil::MinorToMajor(shape));
556565

557-
return TileInfo(offsets, tile_strides, original_shape, padded_tile_sizes,
566+
return TileInfo(offsets, tile_strides, original_shape, tile_sizes,
558567
minor_to_major_layout, storage_type);
559568
}
560569

0 commit comments

Comments
 (0)