1 ! { dg-set-target-env-var OMP_NUM_TEAMS_ALL "3" }
2 ! { dg-set-target-env-var OMP_NUM_TEAMS_DEV "4" }
3 ! { dg-set-target-env-var OMP_TEAMS_THREAD_LIMIT_ALL "2" }
4 ! { dg-set-target-env-var OMP_TEAMS_THREAD_LIMIT_DEV "3" }
6 ! This test considers the hierarchical usage of ICVs on the device, i.e. if
7 ! e.g. OMP_NUM_TEAMS_DEV_<device_num> is not configured, then the value of
8 ! OMP_NUM_TEAMS_DEV should be used for the targets.
11 implicit none (type, external)
12 integer :: num_devices
, i
, stat
, tmp
14 character(len
=40) :: val
16 ! The following environment variables should not be set.
17 call get_environment_variable ("OMP_NUM_TEAMS_DEV_0", val
, status
=stat
)
19 call get_environment_variable ("OMP_NUM_TEAMS_DEV_1", val
, status
=stat
)
21 call get_environment_variable ("OMP_NUM_TEAMS_DEV_2", val
, status
=stat
)
23 call get_environment_variable ("OMP_TEAMS_THREAD_LIMIT_DEV_0", val
, status
=stat
)
25 call get_environment_variable ("OMP_TEAMS_THREAD_LIMIT_DEV_1", val
, status
=stat
)
27 call get_environment_variable ("OMP_TEAMS_THREAD_LIMIT_DEV_2", val
, status
=stat
)
30 if (omp_get_num_devices () > 3) then
33 num_devices
= omp_get_num_devices ()
39 if (env_is_set ("OMP_NUM_TEAMS_DEV", "4")) then
41 !$omp target device(i) map(tofrom: err)
42 if (omp_get_max_teams () /= 4) err
= .true
.
47 !$omp target device(i) map(tofrom: err)
49 if (omp_get_num_teams () > 4 .or
. omp_get_team_num () >= 4) &
56 !$omp target device(i) map(tofrom: err)
57 call omp_set_num_teams (3 + i
)
58 if (omp_get_max_teams () /= 3 + i
) err
= .true
.
63 !$omp target device(i) map(tofrom: err)
64 if (omp_get_max_teams () /= 3 + i
) err
= .true
.
69 !$omp target device(i) map(tofrom: err)
71 if (omp_get_num_teams () > 3 + i
.or
. omp_get_team_num () >= 3 + i
) &
78 ! Testing TEAMS-THREAD-LIMIT
79 if (env_is_set ("OMP_TEAMS_THREAD_LIMIT_DEV", "3")) then
81 !$omp target device(i) map(tofrom: err)
82 if (omp_get_teams_thread_limit () /= 3) err
= .true
.
87 !$omp target device(i) map(tofrom: err)
90 if (omp_get_thread_limit () > 3 .or
. omp_get_thread_num () >= 3) &
98 !$omp target device(i) map(tofrom: err)
99 call omp_set_teams_thread_limit (2 + i
)
100 if (omp_get_teams_thread_limit () /= 2 + i
) err
= .true
.
105 !$omp target device(i) map(tofrom: err)
106 if (omp_get_teams_thread_limit () /= 2 + i
) err
= .true
.
111 !$omp target device(i) map(tofrom: err)
114 if (omp_get_thread_limit () > 2 + i
.or
. omp_get_thread_num () >= 2 + i
) &
125 logical function env_is_set (name
, val
)
126 character(len
=*) :: name
, val
127 character(len
=40) :: val2
129 call get_environment_variable (name
, val2
, status
=stat
)
131 if (val
== val2
) then
135 else if (stat
/= 1) then