diff options
author | Andrew Stubbs <ams@codesourcery.com> | 2021-08-03 13:45:35 +0100 |
---|---|---|
committer | Sandra Loosemore <sloosemore@baylibre.com> | 2025-05-15 20:25:46 +0000 |
commit | 48db8148b94ab2d93d9d5301f44950adf2a9c786 (patch) | |
tree | f4c32aeecbb95ed095c949b61c3290e99caa23fa | |
parent | adc63e59f99f856ff4cd6b1fdb2331b16f603e41 (diff) | |
download | gcc-48db8148b94ab2d93d9d5301f44950adf2a9c786.zip gcc-48db8148b94ab2d93d9d5301f44950adf2a9c786.tar.gz gcc-48db8148b94ab2d93d9d5301f44950adf2a9c786.tar.bz2 |
libgomp amdgcn: Fix issues with dynamic OpenMP thread scaling
libgomp/ChangeLog:
* config/gcn/bar.h (gomp_barrier_init): Limit thread count to the
actual physical number.
* config/gcn/team.c (gomp_team_start): Don't attempt to set up
threads that do not exist.
-rw-r--r-- | libgomp/config/gcn/bar.h | 3 | ||||
-rw-r--r-- | libgomp/config/gcn/team.c | 4 |
2 files changed, 7 insertions, 0 deletions
diff --git a/libgomp/config/gcn/bar.h b/libgomp/config/gcn/bar.h index b62d3af..4402b10 100644 --- a/libgomp/config/gcn/bar.h +++ b/libgomp/config/gcn/bar.h @@ -55,6 +55,9 @@ typedef unsigned int gomp_barrier_state_t; static inline void gomp_barrier_init (gomp_barrier_t *bar, unsigned count) { + unsigned actual_thread_count = __builtin_gcn_dim_size (1); + if (count > actual_thread_count) + count = actual_thread_count; bar->total = count; bar->awaited = count; bar->awaited_final = count; diff --git a/libgomp/config/gcn/team.c b/libgomp/config/gcn/team.c index 40827ce..939ee87 100644 --- a/libgomp/config/gcn/team.c +++ b/libgomp/config/gcn/team.c @@ -209,6 +209,10 @@ gomp_team_start (void (*fn) (void *), void *data, unsigned nthreads, if (nthreads == 1) return; + unsigned actual_thread_count = __builtin_gcn_dim_size (1); + if (nthreads > actual_thread_count) + nthreads = actual_thread_count; + /* Release existing idle threads. */ for (unsigned i = 1; i < nthreads; ++i) { |