fix(compiler): predicate OpenMP loop parallelization of Linalg on the --parallelize flag.

This commit is contained in:
Antoniu Pop
2022-01-31 09:07:03 +00:00
committed by Antoniu Pop
parent f52965e22f
commit ec633d57f6
3 changed files with 16 additions and 8 deletions

View File

@@ -48,7 +48,8 @@ lowerConcreteToStd(mlir::MLIRContext &context, mlir::ModuleOp &module,
mlir::LogicalResult
lowerStdToLLVMDialect(mlir::MLIRContext &context, mlir::ModuleOp &module,
std::function<bool(mlir::Pass *)> enablePass);
std::function<bool(mlir::Pass *)> enablePass,
bool parallelizeLoops);
mlir::LogicalResult optimizeLLVMModule(llvm::LLVMContext &llvmContext,
llvm::Module &module);

View File

@@ -296,8 +296,9 @@ CompilerEngine::compile(llvm::SourceMgr &sm, Target target, OptionalLib lib) {
}
// MLIR canonical dialects -> LLVM Dialect
if (mlir::concretelang::pipeline::lowerStdToLLVMDialect(mlirContext, module,
enablePass)
if (mlir::concretelang::pipeline::lowerStdToLLVMDialect(
mlirContext, module, enablePass,
/*parallelizeLoops =*/this->autoParallelize)
.failed()) {
return errorDiag("Failed to lower to LLVM dialect");
}

View File

@@ -193,7 +193,8 @@ lowerConcreteToStd(mlir::MLIRContext &context, mlir::ModuleOp &module,
mlir::LogicalResult
lowerStdToLLVMDialect(mlir::MLIRContext &context, mlir::ModuleOp &module,
std::function<bool(mlir::Pass *)> enablePass) {
std::function<bool(mlir::Pass *)> enablePass,
bool parallelizeLoops) {
mlir::PassManager pm(&context);
pipelinePrinting("StdToLLVM", pm, context);
@@ -208,16 +209,21 @@ lowerStdToLLVMDialect(mlir::MLIRContext &context, mlir::ModuleOp &module,
addPotentiallyNestedPass(pm, mlir::createStdBufferizePass(), enablePass);
addPotentiallyNestedPass(pm, mlir::createTensorBufferizePass(), enablePass);
addPotentiallyNestedPass(pm, mlir::createLinalgBufferizePass(), enablePass);
addPotentiallyNestedPass(pm, mlir::createConvertLinalgToParallelLoopsPass(),
enablePass);
if (parallelizeLoops)
addPotentiallyNestedPass(pm, mlir::createConvertLinalgToParallelLoopsPass(),
enablePass);
else
addPotentiallyNestedPass(pm, mlir::createConvertLinalgToLoopsPass(),
enablePass);
addPotentiallyNestedPass(pm, mlir::createSCFBufferizePass(), enablePass);
addPotentiallyNestedPass(pm, mlir::createFuncBufferizePass(), enablePass);
addPotentiallyNestedPass(
pm, mlir::concretelang::createBufferizeDataflowTaskOpsPass(), enablePass);
addPotentiallyNestedPass(pm, mlir::createFinalizingBufferizePass(),
enablePass);
addPotentiallyNestedPass(pm, mlir::createConvertSCFToOpenMPPass(),
enablePass);
if (parallelizeLoops)
addPotentiallyNestedPass(pm, mlir::createConvertSCFToOpenMPPass(),
enablePass);
// Lower Dataflow tasks to DRF
addPotentiallyNestedPass(