aboutsummaryrefslogtreecommitdiff
path: root/libgomp
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2015-09-03 11:24:34 +0000
committerSebastian Huber <sh@gcc.gnu.org>2015-09-03 11:24:34 +0000
commit7892ec670c1c5d1e4d911ab41903a6af72bc85d2 (patch)
treeadcb0cc39a050326a9ae718cb38bbdbf969a0785 /libgomp
parent17720e84bfd8df2224886b087cccf236e237d5bc (diff)
downloadgcc-7892ec670c1c5d1e4d911ab41903a6af72bc85d2.zip
gcc-7892ec670c1c5d1e4d911ab41903a6af72bc85d2.tar.gz
gcc-7892ec670c1c5d1e4d911ab41903a6af72bc85d2.tar.bz2
[gomp] Simplify thread pool initialization
libgomp/ChangeLog * team.c (gomp_new_thread_pool): Delete and move content to ... (gomp_get_thread_pool): ... new function. Allocate and initialize thread pool on demand. (get_last_team): Use gomp_get_thread_pool(). (gomp_team_start): Delete thread pool initialization. From-SVN: r227439
Diffstat (limited to 'libgomp')
-rw-r--r--libgomp/ChangeLog8
-rw-r--r--libgomp/team.c56
2 files changed, 35 insertions, 29 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index d5aaa48..319795c 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,11 @@
+2015-09-03 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ * team.c (gomp_new_thread_pool): Delete and move content to ...
+ (gomp_get_thread_pool): ... new function. Allocate and
+ initialize thread pool on demand.
+ (get_last_team): Use gomp_get_thread_pool().
+ (gomp_team_start): Delete thread pool initialization.
+
2015-09-03 Tom de Vries <tom@codesourcery.com>
PR tree-optimization/65637
diff --git a/libgomp/team.c b/libgomp/team.c
index 7671b05..e1c4d60 100644
--- a/libgomp/team.c
+++ b/libgomp/team.c
@@ -134,22 +134,39 @@ gomp_thread_start (void *xdata)
return NULL;
}
+/* Get the thread pool, allocate and initialize it on demand. */
+
+static inline struct gomp_thread_pool *
+gomp_get_thread_pool (struct gomp_thread *thr, unsigned nthreads)
+{
+ struct gomp_thread_pool *pool = thr->thread_pool;
+ if (__builtin_expect (pool == NULL, 0))
+ {
+ pool = gomp_malloc (sizeof (*pool));
+ pool->threads = NULL;
+ pool->threads_size = 0;
+ pool->threads_used = 0;
+ pool->last_team = NULL;
+ pool->threads_busy = nthreads;
+ thr->thread_pool = pool;
+ pthread_setspecific (gomp_thread_destructor, thr);
+ }
+ return pool;
+}
+
static inline struct gomp_team *
get_last_team (unsigned nthreads)
{
struct gomp_thread *thr = gomp_thread ();
if (thr->ts.team == NULL)
{
- struct gomp_thread_pool *pool = thr->thread_pool;
- if (pool != NULL)
- {
- struct gomp_team *last_team = pool->last_team;
- if (last_team != NULL && last_team->nthreads == nthreads)
- {
- pool->last_team = NULL;
- return last_team;
- }
- }
+ struct gomp_thread_pool *pool = gomp_get_thread_pool (thr, nthreads);
+ struct gomp_team *last_team = pool->last_team;
+ if (last_team != NULL && last_team->nthreads == nthreads)
+ {
+ pool->last_team = NULL;
+ return last_team;
+ }
}
return NULL;
}
@@ -219,19 +236,6 @@ free_team (struct gomp_team *team)
free (team);
}
-/* Allocate and initialize a thread pool. */
-
-static struct gomp_thread_pool *gomp_new_thread_pool (void)
-{
- struct gomp_thread_pool *pool
- = gomp_malloc (sizeof(struct gomp_thread_pool));
- pool->threads = NULL;
- pool->threads_size = 0;
- pool->threads_used = 0;
- pool->last_team = NULL;
- return pool;
-}
-
static void
gomp_free_pool_helper (void *thread_pool)
{
@@ -316,12 +320,6 @@ gomp_team_start (void (*fn) (void *), void *data, unsigned nthreads,
thr = gomp_thread ();
nested = thr->ts.team != NULL;
- if (__builtin_expect (thr->thread_pool == NULL, 0))
- {
- thr->thread_pool = gomp_new_thread_pool ();
- thr->thread_pool->threads_busy = nthreads;
- pthread_setspecific (gomp_thread_destructor, thr);
- }
pool = thr->thread_pool;
task = thr->task;
icv = task ? &task->icv : &gomp_global_icv;