"get_level",
"get_max_active_levels",
"get_max_task_priority",
+ "get_max_teams",
"get_max_threads",
"get_nested",
"get_num_devices",
"get_proc_bind",
"get_supported_active_levels",
"get_team_num",
+ "get_teams_thread_limit",
"get_thread_limit",
"get_thread_num",
"get_wtick",
"set_dynamic",
"set_max_active_levels",
"set_nested",
+ "set_num_teams",
"set_num_threads",
- "set_schedule"
+ "set_schedule",
+ "set_teams_thread_limit"
};
int mode = 0;
uintptr_t gomp_def_allocator = omp_default_mem_alloc;
int gomp_debug_var;
unsigned int gomp_num_teams_var;
+int gomp_nteams_var;
+int gomp_teams_thread_limit_var;
bool gomp_display_affinity_var;
char *gomp_affinity_format_var = "level %L thread %i affinity %A";
size_t gomp_affinity_format_len;
gomp_global_icv.thread_limit_var);
fprintf (stderr, " OMP_MAX_ACTIVE_LEVELS = '%u'\n",
gomp_global_icv.max_active_levels_var);
+ fprintf (stderr, " OMP_NUM_TEAMS = '%u'\n", gomp_nteams_var);
+ fprintf (stderr, " OMP_TEAMS_THREAD_LIMIT = '%u'\n",
+ gomp_teams_thread_limit_var);
fprintf (stderr, " OMP_CANCELLATION = '%s'\n",
gomp_cancel_var ? "TRUE" : "FALSE");
&gomp_nthreads_var_list,
&gomp_nthreads_var_list_len))
gomp_global_icv.nthreads_var = gomp_available_cpus;
+ parse_int ("OMP_NUM_TEAMS", &gomp_nteams_var, false);
+ parse_int ("OMP_TEAMS_THREAD_LIMIT", &gomp_teams_thread_limit_var, false);
bool ignore = false;
if (parse_bind_var ("OMP_PROC_BIND",
&gomp_global_icv.bind_var,
ialias_redirect (omp_set_max_active_levels)
ialias_redirect (omp_get_max_active_levels)
ialias_redirect (omp_get_supported_active_levels)
+ialias_redirect (omp_set_num_teams)
+ialias_redirect (omp_get_max_teams)
+ialias_redirect (omp_set_teams_thread_limit)
+ialias_redirect (omp_get_teams_thread_limit)
ialias_redirect (omp_get_level)
ialias_redirect (omp_get_ancestor_thread_num)
ialias_redirect (omp_get_team_size)
return omp_in_final ();
}
+void
+omp_set_num_teams_ (const int32_t *num_teams)
+{
+ omp_set_num_teams (*num_teams);
+}
+
+void
+omp_set_num_teams_8_ (const int64_t *num_teams)
+{
+ omp_set_max_active_levels (TO_INT (*num_teams));
+}
+
+int32_t
+omp_get_max_teams_ (void)
+{
+ return omp_get_max_teams ();
+}
+
+void
+omp_set_teams_thread_limit_ (const int32_t *thread_limit)
+{
+ omp_set_teams_thread_limit (*thread_limit);
+}
+
+void
+omp_set_teams_thread_limit_8_ (const int64_t *thread_limit)
+{
+ omp_set_teams_thread_limit (TO_INT (*thread_limit));
+}
+
+int32_t
+omp_get_teams_thread_limit_ (void)
+{
+ return omp_get_teams_thread_limit ();
+}
+
int32_t
omp_get_cancellation_ (void)
{
return gomp_supported_active_levels;
}
+void
+omp_set_num_teams (int num_teams)
+{
+ if (num_teams >= 0)
+ gomp_nteams_var = num_teams;
+}
+
+int
+omp_get_max_teams (void)
+{
+ return gomp_nteams_var;
+}
+
+void
+omp_set_teams_thread_limit (int thread_limit)
+{
+ if (thread_limit >= 0)
+ gomp_teams_thread_limit_var = thread_limit;
+}
+
+int
+omp_get_teams_thread_limit (void)
+{
+ return gomp_teams_thread_limit_var;
+}
+
int
omp_get_cancellation (void)
{
ialias (omp_set_max_active_levels)
ialias (omp_get_max_active_levels)
ialias (omp_get_supported_active_levels)
+ialias (omp_set_num_teams)
+ialias (omp_get_max_teams)
+ialias (omp_set_teams_thread_limit)
+ialias (omp_get_teams_thread_limit)
ialias (omp_get_cancellation)
ialias (omp_get_proc_bind)
ialias (omp_get_max_task_priority)
extern void **gomp_places_list;
extern unsigned long gomp_places_list_len;
extern unsigned int gomp_num_teams_var;
+extern int gomp_nteams_var;
+extern int gomp_teams_thread_limit_var;
extern int gomp_debug_var;
extern bool gomp_display_affinity_var;
extern char *gomp_affinity_format_var;
omp_display_env;
omp_display_env_;
omp_display_env_8_;
+ omp_set_num_teams;
+ omp_set_num_teams_;
+ omp_set_num_teams_8_;
+ omp_get_max_teams;
+ omp_get_max_teams_;
+ omp_set_teams_thread_limit;
+ omp_set_teams_thread_limit_;
+ omp_set_teams_thread_limit_8_;
+ omp_get_teams_thread_limit;
+ omp_get_teams_thread_limit_;
} OMP_5.0.2;
GOMP_1.0 {
extern void omp_fulfill_event (omp_event_handle_t) __GOMP_NOTHROW;
+extern void omp_set_num_teams (int) __GOMP_NOTHROW;
+extern int omp_get_max_teams (void) __GOMP_NOTHROW;
+extern void omp_set_teams_thread_limit (int) __GOMP_NOTHROW;
+extern int omp_get_teams_thread_limit (void) __GOMP_NOTHROW;
+
extern void *omp_target_alloc (__SIZE_TYPE__, int) __GOMP_NOTHROW;
extern void omp_target_free (void *, int) __GOMP_NOTHROW;
extern int omp_target_is_present (const void *, int) __GOMP_NOTHROW;
end function omp_get_max_task_priority
end interface
+ interface omp_set_num_teams
+ subroutine omp_set_num_teams (num_teams)
+ integer (4), intent (in) :: num_teams
+ end subroutine omp_set_num_teams
+ subroutine omp_set_num_teams_8 (num_teams)
+ integer (8), intent (in) :: num_teams
+ end subroutine omp_set_num_teams_8
+ end interface
+
+ interface
+ function omp_get_max_teams ()
+ integer (4) :: omp_get_max_teams
+ end function omp_get_max_teams
+ end interface
+
+ interface omp_set_teams_thread_limit
+ subroutine omp_set_teams_thread_limit (thread_limit)
+ integer (4), intent (in) :: thread_limit
+ end subroutine omp_set_teams_thread_limit
+ subroutine omp_set_teams_thread_limit_8 (thread_limit)
+ integer (8), intent (in) :: thread_limit
+ end subroutine omp_set_teams_thread_limit_8
+ end interface
+
+ interface
+ function omp_get_teams_thread_limit ()
+ integer (4) :: omp_get_teams_thread_limit
+ end function omp_get_teams_thread_limit
+ end interface
+
interface
subroutine omp_fulfill_event (event)
use omp_lib_kinds
external omp_get_max_task_priority
integer(4) omp_get_max_task_priority
+ external omp_set_num_teams, omp_set_teams_thread_limit
+ external omp_get_max_teams, omp_get_teams_thread_limit
+ integer(4) omp_get_max_teams, omp_get_teams_thread_limit
+
external omp_fulfill_event
external omp_set_affinity_format, omp_get_affinity_format
(void) flags;
(void) num_teams;
unsigned old_thread_limit_var = 0;
+ if (thread_limit == 0)
+ thread_limit = gomp_teams_thread_limit_var;
if (thread_limit)
{
struct gomp_task_icv *icv = gomp_icv (true);
= thread_limit > INT_MAX ? UINT_MAX : thread_limit;
}
if (num_teams == 0)
- num_teams = 3;
+ num_teams = gomp_nteams_var ? gomp_nteams_var : 3;
gomp_num_teams = num_teams;
for (gomp_team_num = 0; gomp_team_num < num_teams; gomp_team_num++)
fn (data);