From: Andrew Stubbs Date: Wed, 19 Apr 2023 16:33:41 +0000 (+0100) Subject: amdgcn, openmp: Fix concurrency in low-latency allocator X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c4116975a5d396f3503b86c0c8cbfe6fffcb146b;p=thirdparty%2Fgcc.git amdgcn, openmp: Fix concurrency in low-latency allocator The previous code works fine on Fiji and Vega 10 devices, but bogs down in The spin locks on Vega 20 or newer. Adding the sleep instructions fixes the problem. libgomp/ChangeLog: * basic-allocator.c (basic_alloc_free): Use BASIC_ALLOC_YIELD. (basic_alloc_realloc): Use BASIC_ALLOC_YIELD. --- diff --git a/libgomp/ChangeLog.omp b/libgomp/ChangeLog.omp index 09cf9c6f3c14..32bc3b0c82ce 100644 --- a/libgomp/ChangeLog.omp +++ b/libgomp/ChangeLog.omp @@ -1,3 +1,8 @@ +2023-04-20 Andrew Stubbs + + * basic-allocator.c (basic_alloc_free): Use BASIC_ALLOC_YIELD. + (basic_alloc_realloc): Use BASIC_ALLOC_YIELD. + 2023-04-03 Thomas Schwinge * target.c (gomp_map_vars_internal) diff --git a/libgomp/basic-allocator.c b/libgomp/basic-allocator.c index b4b9e4ba13a7..a61828e48a0d 100644 --- a/libgomp/basic-allocator.c +++ b/libgomp/basic-allocator.c @@ -188,6 +188,7 @@ basic_alloc_free (char *heap, void *addr, size_t size) break; } /* Spin. */ + BASIC_ALLOC_YIELD; } while (1); @@ -267,6 +268,7 @@ basic_alloc_realloc (char *heap, void *addr, size_t oldsize, break; } /* Spin. */ + BASIC_ALLOC_YIELD; } while (1);