diff options
author | Jakub Jelinek <jakub@redhat.com> | 2021-11-15 13:20:53 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2021-11-15 13:20:53 +0100 |
commit | aea72386831c0c5672f55983034cc709b968daea (patch) | |
tree | ab7e82602a7dc1f8e6fefcc5ef16520eea238392 /libgomp/testsuite/libgomp.c-c++-common/thread-limit-1.c | |
parent | fcdf49a0ad3282761c7ac72103407ca4ec4d6968 (diff) | |
download | gcc-aea72386831c0c5672f55983034cc709b968daea.zip gcc-aea72386831c0c5672f55983034cc709b968daea.tar.gz gcc-aea72386831c0c5672f55983034cc709b968daea.tar.bz2 |
openmp: Add support for thread_limit clause on target
OpenMP 5.1 says that thread_limit clause can also appear on target,
and similarly to teams should affect the thread-limit-var ICV.
On combined target teams, the clause goes to both.
We actually passed thread_limit internally on target already before,
but only used it for gcn/ptx offloading to hint how many threads should be
created and for ptx didn't set thread_limit_var in that case.
Similarly for host fallback.
Also, I found that we weren't copying the args array that contains encoded
thread_limit and num_teams clause for target (etc.) for async target.
2021-11-15 Jakub Jelinek <jakub@redhat.com>
gcc/
* gimplify.c (optimize_target_teams): Only add OMP_CLAUSE_THREAD_LIMIT
to OMP_TARGET_CLAUSES if it isn't there already.
gcc/c-family/
* c-omp.c (c_omp_split_clauses) <case OMP_CLAUSE_THREAD_LIMIT>:
Duplicate to both OMP_TARGET and OMP_TEAMS.
gcc/c/
* c-parser.c (OMP_TARGET_CLAUSE_MASK): Add
PRAGMA_OMP_CLAUSE_THREAD_LIMIT.
gcc/cp/
* parser.c (OMP_TARGET_CLAUSE_MASK): Add
PRAGMA_OMP_CLAUSE_THREAD_LIMIT.
libgomp/
* task.c (gomp_create_target_task): Copy args array as well.
* target.c (gomp_target_fallback): Add args argument.
Set gomp_icv (true)->thread_limit_var if thread_limit is present.
(GOMP_target): Adjust gomp_target_fallback caller.
(GOMP_target_ext): Likewise.
(gomp_target_task_fn): Likewise.
* config/nvptx/team.c (gomp_nvptx_main): Set
gomp_global_icv.thread_limit_var.
* testsuite/libgomp.c-c++-common/thread-limit-1.c: New test.
Diffstat (limited to 'libgomp/testsuite/libgomp.c-c++-common/thread-limit-1.c')
-rw-r--r-- | libgomp/testsuite/libgomp.c-c++-common/thread-limit-1.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/libgomp/testsuite/libgomp.c-c++-common/thread-limit-1.c b/libgomp/testsuite/libgomp.c-c++-common/thread-limit-1.c new file mode 100644 index 0000000..cac2202 --- /dev/null +++ b/libgomp/testsuite/libgomp.c-c++-common/thread-limit-1.c @@ -0,0 +1,23 @@ +#include <omp.h> +#include <stdlib.h> + +void +foo () +{ + { + #pragma omp target parallel nowait thread_limit (4) num_threads (1) + if (omp_get_thread_limit () > 4) + abort (); + } + #pragma omp taskwait +} + +int +main () +{ + #pragma omp target thread_limit (6) + if (omp_get_thread_limit () > 6) + abort (); + foo (); + return 0; +} |