[Mlir-commits] [mlir] [MLIR][SCFToOpenMP] Add automatic-num-threads option (PR #85771)
Kiran Chandramohan
llvmlistbot at llvm.org
Sun Mar 24 15:06:47 PDT 2024
================
@@ -437,7 +440,37 @@ struct ParallelOpLowering : public OpRewritePattern<scf::ParallelOp> {
rewriter.eraseOp(reduce);
Value numThreadsVar;
- if (numThreads > 0) {
+ if (automaticNumThreads) {
+ unsigned inferredNumThreads = 1;
+ for (auto [lb, ub, step] :
+ llvm::zip_equal(parallelOp.getLowerBound(),
+ parallelOp.getUpperBound(), parallelOp.getStep())) {
+ std::optional<int64_t> cstLb = getConstantIntValue(lb);
+ std::optional<int64_t> cstUb = getConstantIntValue(ub);
+ std::optional<int64_t> cstStep = getConstantIntValue(step);
+
+ if (!cstLb.has_value())
+ return emitError(loc)
+ << "Expected a parallel loop with constant lower bounds when "
+ "trying to automatically infer number of threads";
+
+ if (!cstUb.has_value())
+ return emitError(loc)
+ << "Expected a parallel loop with constant upper bounds when "
+ "trying to automatically infer number of threads\n";
+
+ if (!cstStep.has_value())
+ return emitError(loc)
+ << "Expected a forall with constant steps when trying to "
+ "automatically infer number of threads\n";
+
+ inferredNumThreads =
+ inferredNumThreads *
+ ((cstUb.value() - cstLb.value()) / cstStep.value());
----------------
kiranchandramohan wrote:
Wouldn't this lead to too many threads, i.e equal to 1 thread per iteration?
https://github.com/llvm/llvm-project/pull/85771
More information about the Mlir-commits
mailing list