union pthread_attr_t { }; typedef union pthread_attr_t pthread_attr_t; struct gomp_team_state { unsigned level; unsigned place_partition_len; }; struct gomp_task_icv { char bind_var; }; extern unsigned long *gomp_nthreads_var_list, gomp_nthreads_var_list_len; extern char *gomp_bind_var_list; extern unsigned long gomp_bind_var_list_len; extern void **gomp_places_list; struct gomp_task { struct gomp_task_icv icv; }; struct gomp_team { struct gomp_team_state prev_ts; struct gomp_task implicit_task[]; }; struct gomp_thread { void (*fn) (void *data); struct gomp_team_state ts; }; struct gomp_thread_pool { struct gomp_thread **threads; unsigned threads_used; }; typedef enum omp_sched_t { omp_proc_bind_true = 1, } omp_proc_bind_t; gomp_team_start (void (*fn) (void *), void *data, unsigned nthreads, unsigned flags, struct gomp_team *team) { struct gomp_thread *thr, *nthr; struct gomp_thread_pool *pool; unsigned i, n, old_threads_used = 0; pthread_attr_t thread_attr, *attr; char bind, bind_var; unsigned int s = 0, rest = 0, p = 0, k = 0; struct gomp_thread **affinity_thr = ((void *) 0); if (__builtin_expect (gomp_nthreads_var_list != ((void *) 0), 0) && thr->ts.level < gomp_bind_var_list_len) bind_var = gomp_bind_var_list[thr->ts.level]; old_threads_used = pool->threads_used; pool->threads = gomp_realloc (pool->threads, sizeof (struct gomp_thread_data *)); if (__builtin_expect (gomp_places_list != ((void *) 0), 0)) { if (affinity_thr != ((void *) 0) || (bind != omp_proc_bind_true)) { affinity_thr = gomp_malloc (team->prev_ts.place_partition_len * ((nthreads - old_threads_used) * sizeof (struct gomp_thread *))); } } team->implicit_task[i].icv.bind_var = bind_var; nthr->fn = fn; if (__builtin_expect (gomp_places_list != ((void *) 0), 0)) { if (affinity_thr != ((void *) 0) && pool->threads[i] != ((void *) 0)) gomp_init_thread_affinity (attr, p); } }