Commit 7892ec67 by Sebastian Huber Committed by Sebastian Huber

[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
parent 17720e84
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> 2015-09-03 Tom de Vries <tom@codesourcery.com>
PR tree-optimization/65637 PR tree-optimization/65637
......
...@@ -134,22 +134,39 @@ gomp_thread_start (void *xdata) ...@@ -134,22 +134,39 @@ gomp_thread_start (void *xdata)
return NULL; 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 * static inline struct gomp_team *
get_last_team (unsigned nthreads) get_last_team (unsigned nthreads)
{ {
struct gomp_thread *thr = gomp_thread (); struct gomp_thread *thr = gomp_thread ();
if (thr->ts.team == NULL) if (thr->ts.team == NULL)
{ {
struct gomp_thread_pool *pool = thr->thread_pool; struct gomp_thread_pool *pool = gomp_get_thread_pool (thr, nthreads);
if (pool != NULL) struct gomp_team *last_team = pool->last_team;
{ if (last_team != NULL && last_team->nthreads == nthreads)
struct gomp_team *last_team = pool->last_team; {
if (last_team != NULL && last_team->nthreads == nthreads) pool->last_team = NULL;
{ return last_team;
pool->last_team = NULL; }
return last_team;
}
}
} }
return NULL; return NULL;
} }
...@@ -219,19 +236,6 @@ free_team (struct gomp_team *team) ...@@ -219,19 +236,6 @@ free_team (struct gomp_team *team)
free (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 static void
gomp_free_pool_helper (void *thread_pool) gomp_free_pool_helper (void *thread_pool)
{ {
...@@ -316,12 +320,6 @@ gomp_team_start (void (*fn) (void *), void *data, unsigned nthreads, ...@@ -316,12 +320,6 @@ gomp_team_start (void (*fn) (void *), void *data, unsigned nthreads,
thr = gomp_thread (); thr = gomp_thread ();
nested = thr->ts.team != NULL; 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; pool = thr->thread_pool;
task = thr->task; task = thr->task;
icv = task ? &task->icv : &gomp_global_icv; icv = task ? &task->icv : &gomp_global_icv;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment