Skip to content

Commit 702b090

Browse files
committed
Revert "[OpenMP][clang] 6.0: num_threads strict (part 2: device runtime) (llvm#146404)"
breaks: smoke/nested_par3 smoke/nest_call_par2/ This reverts commit 732c07a.
1 parent 5fd399c commit 702b090

File tree

2 files changed

+18
-65
lines changed

2 files changed

+18
-65
lines changed

offload/DeviceRTL/include/DeviceTypes.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,6 @@ struct omp_lock_t {
137137
void *Lock;
138138
};
139139

140-
// see definition in openmp/runtime kmp.h
141-
typedef enum omp_severity_t {
142-
severity_warning = 1,
143-
severity_fatal = 2
144-
} omp_severity_t;
145-
146140
using InterWarpCopyFnTy = void (*)(void *src, int32_t warp_num);
147141
using ShuffleReductFnTy = void (*)(void *rhsData, int16_t lane_id,
148142
int16_t lane_offset, int16_t shortCircuit);

offload/DeviceRTL/src/Parallelism.cpp

Lines changed: 18 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -45,24 +45,7 @@ using namespace ompx;
4545

4646
namespace {
4747

48-
void numThreadsStrictError(int32_t nt_strict, int32_t nt_severity,
49-
const char *nt_message, int32_t requested,
50-
int32_t actual) {
51-
if (nt_message)
52-
printf("%s\n", nt_message);
53-
else
54-
printf("The computed number of threads (%u) does not match the requested "
55-
"number of threads (%d). Consider that it might not be supported "
56-
"to select exactly %d threads on this target device.\n",
57-
actual, requested, requested);
58-
if (nt_severity == severity_fatal)
59-
__builtin_trap();
60-
}
61-
62-
uint32_t determineNumberOfThreads(int32_t NumThreadsClause,
63-
int32_t nt_strict = false,
64-
int32_t nt_severity = severity_fatal,
65-
const char *nt_message = nullptr) {
48+
uint32_t determineNumberOfThreads(int32_t NumThreadsClause) {
6649
uint32_t NThreadsICV =
6750
NumThreadsClause != -1 ? NumThreadsClause : icv::NThreads;
6851
uint32_t NumThreads = mapping::getMaxTeamThreads();
@@ -72,17 +55,13 @@ uint32_t determineNumberOfThreads(int32_t NumThreadsClause,
7255

7356
// SPMD mode allows any number of threads, for generic mode we round down to a
7457
// multiple of WARPSIZE since it is legal to do so in OpenMP.
75-
if (!mapping::isSPMDMode()) {
76-
if (NumThreads < mapping::getWarpSize())
77-
NumThreads = 1;
78-
else
79-
NumThreads = (NumThreads & ~((uint32_t)mapping::getWarpSize() - 1));
80-
}
58+
if (mapping::isSPMDMode())
59+
return NumThreads;
8160

82-
if (NumThreadsClause != -1 && nt_strict &&
83-
NumThreads != static_cast<uint32_t>(NumThreadsClause))
84-
numThreadsStrictError(nt_strict, nt_severity, nt_message, NumThreadsClause,
85-
NumThreads);
61+
if (NumThreads < mapping::getWarpSize())
62+
NumThreads = 1;
63+
else
64+
NumThreads = (NumThreads & ~((uint32_t)mapping::getWarpSize() - 1));
8665

8766
return NumThreads;
8867
}
@@ -103,14 +82,12 @@ uint32_t determineNumberOfThreads(int32_t NumThreadsClause,
10382

10483
extern "C" {
10584

106-
[[clang::always_inline]] void
107-
__kmpc_parallel_spmd(IdentTy *ident, int32_t num_threads, void *fn, void **args,
108-
const int64_t nargs, int32_t nt_strict = false,
109-
int32_t nt_severity = severity_fatal,
110-
const char *nt_message = nullptr) {
85+
[[clang::always_inline]] void __kmpc_parallel_spmd(IdentTy *ident,
86+
int32_t num_threads,
87+
void *fn, void **args,
88+
const int64_t nargs) {
11189
uint32_t TId = mapping::getThreadIdInBlock();
112-
uint32_t NumThreads =
113-
determineNumberOfThreads(num_threads, nt_strict, nt_severity, nt_message);
90+
uint32_t NumThreads = determineNumberOfThreads(num_threads);
11491
uint32_t PTeamSize =
11592
NumThreads == mapping::getMaxTeamThreads() ? 0 : NumThreads;
11693
// Avoid the race between the read of the `icv::Level` above and the write
@@ -163,11 +140,10 @@ __kmpc_parallel_spmd(IdentTy *ident, int32_t num_threads, void *fn, void **args,
163140
return;
164141
}
165142

166-
[[clang::always_inline]] void __kmpc_parallel_51(
167-
IdentTy *ident, int32_t, int32_t if_expr, int32_t num_threads,
168-
int proc_bind, void *fn, void *wrapper_fn, void **args, int64_t nargs,
169-
int32_t nt_strict = false, int32_t nt_severity = severity_fatal,
170-
const char *nt_message = nullptr) {
143+
[[clang::always_inline]] void
144+
__kmpc_parallel_51(IdentTy *ident, int32_t, int32_t if_expr,
145+
int32_t num_threads, int proc_bind, void *fn,
146+
void *wrapper_fn, void **args, int64_t nargs) {
171147
uint32_t TId = mapping::getThreadIdInBlock();
172148

173149
// Assert the parallelism level is zero if disabled by the user.
@@ -180,11 +156,6 @@ __kmpc_parallel_spmd(IdentTy *ident, int32_t num_threads, void *fn, void **args,
180156
// 3) nested parallel regions
181157
if (OMP_UNLIKELY(!if_expr || state::HasThreadState ||
182158
(config::mayUseNestedParallelism() && icv::Level))) {
183-
// OpenMP 6.0 12.1.2 requires the num_threads 'strict' modifier to also have
184-
// effect when parallel execution is disabled by a corresponding if clause
185-
// attached to the parallel directive.
186-
if (nt_strict && num_threads > 1)
187-
numThreadsStrictError(nt_strict, nt_severity, nt_message, num_threads, 1);
188159
state::DateEnvironmentRAII DERAII(ident);
189160
++icv::Level;
190161
invokeMicrotask(TId, 0, fn, args, nargs);
@@ -198,14 +169,12 @@ __kmpc_parallel_spmd(IdentTy *ident, int32_t num_threads, void *fn, void **args,
198169
// This was moved to its own routine so it could be called directly
199170
// in certain situations to avoid resource consumption of unused
200171
// logic in parallel_51.
201-
__kmpc_parallel_spmd(ident, num_threads, fn, args, nargs, nt_strict,
202-
nt_severity, nt_message);
172+
__kmpc_parallel_spmd(ident, num_threads, fn, args, nargs);
203173

204174
return;
205175
}
206176

207-
uint32_t NumThreads =
208-
determineNumberOfThreads(num_threads, nt_strict, nt_severity, nt_message);
177+
uint32_t NumThreads = determineNumberOfThreads(num_threads);
209178
uint32_t MaxTeamThreads = mapping::getMaxTeamThreads();
210179
uint32_t PTeamSize = NumThreads == MaxTeamThreads ? 0 : NumThreads;
211180

@@ -308,16 +277,6 @@ __kmpc_parallel_spmd(IdentTy *ident, int32_t num_threads, void *fn, void **args,
308277
__kmpc_end_sharing_variables();
309278
}
310279

311-
[[clang::always_inline]] void __kmpc_parallel_60(
312-
IdentTy *ident, int32_t id, int32_t if_expr, int32_t num_threads,
313-
int proc_bind, void *fn, void *wrapper_fn, void **args, int64_t nargs,
314-
int32_t nt_strict = false, int32_t nt_severity = severity_fatal,
315-
const char *nt_message = nullptr) {
316-
return __kmpc_parallel_51(ident, id, if_expr, num_threads, proc_bind, fn,
317-
wrapper_fn, args, nargs, nt_strict, nt_severity,
318-
nt_message);
319-
}
320-
321280
[[clang::noinline]] bool __kmpc_kernel_parallel(ParallelRegionFnTy *WorkFn) {
322281
// Work function and arguments for L1 parallel region.
323282
*WorkFn = state::ParallelRegionFn;

0 commit comments

Comments
 (0)