mirror of git://gcc.gnu.org/git/gcc.git
[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
This commit is contained in:
parent
17720e84bf
commit
7892ec670c
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue