Skip to content

Commit

Permalink
Fixed pass pipeline and some minor edits
Browse files Browse the repository at this point in the history
  • Loading branch information
KavithaTipturMadhu committed Mar 1, 2024
1 parent eb7360b commit a6134d6
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 18 deletions.
13 changes: 11 additions & 2 deletions include/TPP/Passes.td
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,10 @@ def DefaultTppPasses : Pass<"default-tpp-passes", "ModuleOp"> {
let options= [
Option<"linalgToLoops", "linalg-to-loops",
"bool", /*default=*/"false",
"Skip all TPP transformations. Lower linalg directly to loops.">
"Skip all TPP transformations. Lower linalg directly to loops.">,
ListOption<"parallelTaskGrid", "parallel-task-grid",
"unsigned", "Grid-sizes for parallel tasks.">

];
}

Expand Down Expand Up @@ -289,6 +292,12 @@ def LocalDialectsLowering : Pass<"lower-local-dialects", "ModuleOp"> {
"tensor::TensorDialect",
"xsmm::XsmmDialect",
"LLVM::LLVMDialect"];
let options = [
ListOption<"parallelTaskGrid", "parallel-task-grid",
"unsigned", "Grid-sizes for parallel tasks.">

];

}

def Postprocessing : Pass<"postprocess", "func::FuncOp"> {
Expand Down Expand Up @@ -474,7 +483,7 @@ def FoldXsmmFlags : Pass<"fold-xsmm-flags", "func::FuncOp"> {
def SCFParallelLoopTiling : Pass<"scf-parallel-loop-tiling-pass"> {
let summary = "Tile parallel loops";
let options = [
ListOption<"tileSizes", "parallel-loop-tile-sizes", "int64_t",
ListOption<"tileSizes", "parallel-loop-tile-sizes", "unsigned",
"Factors to tile parallel loops by">,
Option<"noMinMaxBounds", "no-min-max-bounds", "bool",
/*default=*/"false",
Expand Down
16 changes: 5 additions & 11 deletions lib/TPP/DefaultPipeline.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,10 @@ llvm::cl::opt<bool>
llvm::cl::init(false));

// Control grid parallelism sizes.
llvm::cl::list<int64_t>
llvm::cl::list<unsigned>
parallelTaskGrid("parallel-task-grid",
llvm::cl::desc("Grid-sizes for parallel tasks"),
llvm::cl::list_init<int64_t>(SmallVector<int64_t>{2, 8}),
llvm::cl::list_init<unsigned>(SmallVector<unsigned>{2, 8}),
llvm::cl::CommaSeparated);

namespace mlir {
Expand Down Expand Up @@ -127,7 +127,8 @@ struct DefaultPipeline : public tpp::impl::DefaultPipelineBase<DefaultPipeline>,
pm.addPass(createGpuPipeline(GpuPipelineOptions{gpuBackend}));
} else {
// Apply the default preprocessing pass
DefaultTppPassesOptions tppDefaultOptions{linalgToLoops};
DefaultTppPassesOptions tppDefaultOptions{linalgToLoops,
parallelTaskGrid};
pm.addPass(createDefaultTppPasses(tppDefaultOptions));
}

Expand All @@ -140,15 +141,8 @@ struct DefaultPipeline : public tpp::impl::DefaultPipelineBase<DefaultPipeline>,
pm.addPass(tpp::createConvertPerfToFunc());
pm.addPass(createConvertTensorToLinalgPass());
pm.addNestedPass<func::FuncOp>(createConvertLinalgToLoopsPass());
if (defParallel) {
mlir::tpp::SCFParallelLoopTilingOptions tilingOptions;
tilingOptions.tileSizes = parallelTaskGrid;
pm.addPass(createSCFParallelLoopTiling(tilingOptions));
pm.addNestedPass<func::FuncOp>(createIntelAMXTileConfigInsertionPass());
pm.addNestedPass<func::FuncOp>(createCanonicalizerPass());
pm.addNestedPass<func::FuncOp>(createIntelAMXTileConfigHoistingPass());
if (defParallel)
pm.addPass(createConvertSCFToOpenMPPass());
}
pm.addPass(createConvertVectorToSCFPass());
pm.addPass(arith::createArithExpandOpsPass());
pm.addPass(createLowerAffinePass());
Expand Down
17 changes: 16 additions & 1 deletion lib/TPP/DefaultTppPasses.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,10 @@ struct LocalDialectsLowering
: public tpp::impl::LocalDialectsLoweringBase<LocalDialectsLowering>,
UtilityPassBase<ModuleOp> {

LocalDialectsLowering() {}
LocalDialectsLowering(const LocalDialectsLoweringOptions &options) {
parallelTaskGrid = options.parallelTaskGrid;
}
void runOnOperation() override {
auto module = getOperation();

Expand Down Expand Up @@ -106,6 +110,16 @@ struct LocalDialectsLowering
// that they are hoisted out of loops.
pm.addNestedPass<func::FuncOp>(createCleanup());

mlir::tpp::SCFParallelLoopTilingOptions tilingOptions;
tilingOptions.tileSizes = parallelTaskGrid;
pm.addPass(createSCFParallelLoopTiling(tilingOptions));

pm.addNestedPass<func::FuncOp>(createIntelAMXTileConfigInsertionPass());
pm.addNestedPass<func::FuncOp>(createCanonicalizerPass());
pm.addNestedPass<func::FuncOp>(createLoopInvariantCodeMotionPass());
pm.addNestedPass<func::FuncOp>(createCanonicalizerPass());
pm.addNestedPass<func::FuncOp>(createIntelAMXTileConfigHoistingPass());

pm.addPass(createConvertXsmmToFunc());
pm.addPass(createConvertPerfToFunc());
}
Expand Down Expand Up @@ -310,7 +324,8 @@ struct DefaultTppPasses
pm.addPass(createConvertForAllToParallelOp());

// Covert all local TPP-related dialects.
pm.addPass(createLocalDialectsLowering());
LocalDialectsLoweringOptions localDialectsLowering{parallelTaskGrid};
pm.addPass(createLocalDialectsLowering(localDialectsLowering));

// Clean up after the default pipeline.
pm.addNestedPass<func::FuncOp>(createPostprocessing());
Expand Down
2 changes: 1 addition & 1 deletion lib/TPP/Transforms/IntelAMXTileConfig.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//===- IntelAMXTileConfig.cpp ---------------------------------------------===//
//===- IntelAMXTileConfig.cpp ------------------------------------*- C++-*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
Expand Down
2 changes: 1 addition & 1 deletion lib/TPP/Transforms/IntelAMXTileConfigHoisting.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//===- IntelAMXTileConfigHoisting.cpp -------------------------------------===//
//===- IntelAMXTileConfigHoisting.cpp ----------------------------*- C++-*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
Expand Down
4 changes: 2 additions & 2 deletions lib/TPP/Transforms/SCFParallelLoopTiling.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ using namespace mlir::scf;
/// %i0 + j0 and %i1 + %j1.
///
/// The old loop is replaced with the new one.
void tileParallelLoop(ParallelOp op, ArrayRef<int64_t> tileSizes,
void tileParallelLoop(ParallelOp op, ArrayRef<unsigned> tileSizes,
bool noMinMaxBounds) {
bool useParallelOp = false;
/* TODO, need to implement this case */
Expand Down Expand Up @@ -244,7 +244,7 @@ namespace {
struct SCFParallelLoopTiling
: public tpp::impl::SCFParallelLoopTilingBase<SCFParallelLoopTiling> {
SCFParallelLoopTiling(){};
SCFParallelLoopTiling(ArrayRef<int64_t> tileSizes,
SCFParallelLoopTiling(ArrayRef<unsigned> tileSizes,
bool noMinMaxBounds = false) {
this->tileSizes = tileSizes;
this->noMinMaxBounds = noMinMaxBounds;
Expand Down

0 comments on commit a6134d6

Please sign in to comment.