| ! { dg-set-target-env-var OMP_NUM_TEAMS_ALL "3" } |
| ! { dg-set-target-env-var OMP_NUM_TEAMS_DEV "4" } |
| ! { dg-set-target-env-var OMP_NUM_TEAMS "5" } |
| ! { dg-set-target-env-var OMP_NUM_TEAMS_DEV_0 "6" } |
| ! { dg-set-target-env-var OMP_NUM_TEAMS_DEV_1 "7" } |
| ! { dg-set-target-env-var OMP_NUM_TEAMS_DEV_2 "8" } |
| ! { dg-set-target-env-var OMP_TEAMS_THREAD_LIMIT_ALL "2" } |
| ! { dg-set-target-env-var OMP_TEAMS_THREAD_LIMIT_DEV "3" } |
| ! { dg-set-target-env-var OMP_TEAMS_THREAD_LIMIT "4" } |
| ! { dg-set-target-env-var OMP_TEAMS_THREAD_LIMIT_DEV_0 "5" } |
| ! { dg-set-target-env-var OMP_TEAMS_THREAD_LIMIT_DEV_1 "6" } |
| ! { dg-set-target-env-var OMP_TEAMS_THREAD_LIMIT_DEV_2 "7" } |
| |
| use omp_lib |
| implicit none (type, external) |
| integer :: num_devices, i, large_num_teams, large_threads_limit |
| logical :: err |
| |
| if (omp_get_num_devices () > 3) then |
| num_devices = 3 |
| else |
| num_devices = omp_get_num_devices () |
| end if |
| |
| do i=0,num_devices-1 |
| |
| ! Testing NUM_TEAMS. |
| if (env_is_set_dev ("OMP_NUM_TEAMS_DEV_", i, 6 + i)) then |
| err = .false. |
| !$omp target device(i) map(tofrom: err) |
| if (omp_get_max_teams () /= 6 + i) err = .true. |
| !$omp end target |
| if (err) stop 1 |
| |
| err = .false. |
| !$omp target device(i) map(tofrom: err) |
| !$omp teams |
| if (omp_get_num_teams () > 6 + i .or. omp_get_team_num () >= 6 + i) & |
| err = .true. |
| !$omp end teams |
| !$omp end target |
| if (err) stop 2 |
| |
| err = .false. |
| !$omp target device(i) map(tofrom: err) |
| call omp_set_num_teams (5 + i) |
| if (omp_get_max_teams () /= 5 + i) err = .true. |
| !$omp end target |
| if (err) stop 3 |
| |
| err = .false. |
| !$omp target device(i) map(tofrom: err) |
| if (omp_get_max_teams () /= 5 + i) err = .true. |
| !$omp end target |
| if (err) stop 4 |
| |
| err = .false. |
| !$omp target device(i) map(tofrom: err) |
| !$omp teams |
| if (omp_get_num_teams () > 5 + i .or. omp_get_team_num () >= 5 + i) & |
| err = .true. |
| !$omp end teams |
| !$omp end target |
| if (err) stop 5 |
| |
| err = .false. |
| !$omp target device(i) map(tofrom: err) |
| !$omp teams num_teams(6 + i) |
| if (omp_get_num_teams () > 6 + i .or. omp_get_team_num () >= 6 + i) & |
| err = .true. |
| !$omp end teams |
| !$omp end target |
| if (err) stop 6 |
| |
| err = .false. |
| !$omp target device(i) map(tofrom: err) |
| !$omp teams num_teams(4 + i) |
| if (omp_get_num_teams () > 4 + i .or. omp_get_team_num () >= 4 + i) & |
| err = .true. |
| !$omp end teams |
| !$omp end target |
| if (err) stop 7 |
| |
| large_num_teams = 66000 |
| err = .false. |
| !$omp target device(i) map(tofrom: err) |
| call omp_set_num_teams (large_num_teams + i) |
| if (omp_get_max_teams () /= large_num_teams + i) err = .true. |
| !$omp end target |
| if (err) stop 8 |
| |
| err = .false. |
| !$omp target device(i) map(tofrom: err) |
| if (omp_get_max_teams () /= large_num_teams + i) err = .true. |
| !$omp end target |
| if (err) stop 9 |
| |
| err = .false. |
| !$omp target device(i) map(tofrom: err) |
| !$omp teams |
| if (omp_get_num_teams () > large_num_teams + i & |
| .or. omp_get_team_num () >= large_num_teams + i) err = .true. |
| !$omp end teams |
| !$omp end target |
| if (err) stop 10 |
| end if |
| |
| ! Testing TEAMS-THREAD-LIMIT |
| if (env_is_set_dev ("OMP_TEAMS_THREAD_LIMIT_DEV_", i, 5 + i)) then |
| err = .false. |
| !$omp target device(i) map(tofrom: err) |
| if (omp_get_teams_thread_limit () /= 5 + i) err = .true. |
| !$omp end target |
| if (err) stop 11 |
| |
| err = .false. |
| !$omp target device(i) map(tofrom: err) |
| !$omp teams |
| !$omp parallel |
| if (omp_get_thread_limit () > 5 + i .or. omp_get_thread_num () >= 5 + i) & |
| err = .true. |
| !$omp end parallel |
| !$omp end teams |
| !$omp end target |
| if (err) stop 12 |
| |
| err = .false. |
| !$omp target device(i) map(tofrom: err) |
| call omp_set_teams_thread_limit (4 + i) |
| if (omp_get_teams_thread_limit () /= 4 + i) err = .true. |
| !$omp end target |
| if (err) stop 13 |
| |
| err = .false. |
| !$omp target device(i) map(tofrom: err) |
| if (omp_get_teams_thread_limit () /= 4 + i) err = .true. |
| !$omp end target |
| if (err) stop 14 |
| |
| err = .false. |
| !$omp target device(i) map(tofrom: err) |
| !$omp teams |
| !$omp parallel |
| if (omp_get_thread_limit () > 4 + i .or. omp_get_thread_num () >= 4 + i) & |
| err = .true. |
| !$omp end parallel |
| !$omp end teams |
| !$omp end target |
| if (err) stop 15 |
| |
| err = .false. |
| !$omp target device(i) map(tofrom: err) |
| !$omp teams thread_limit(5 + i) |
| !$omp parallel |
| if (omp_get_thread_limit () > 5 + i .or. omp_get_thread_num () >= 5 + i) & |
| err = .true. |
| !$omp end parallel |
| !$omp end teams |
| !$omp end target |
| if (err) stop 16 |
| |
| err = .false. |
| !$omp target device(i) map(tofrom: err) |
| !$omp teams thread_limit(3 + i) |
| !$omp parallel |
| if (omp_get_thread_limit () > 3 + i .or. omp_get_thread_num () >= 3 + i) & |
| err = .true. |
| !$omp end parallel |
| !$omp end teams |
| !$omp end target |
| if (err) stop 17 |
| |
| large_threads_limit = 67000 |
| err = .false. |
| !$omp target device(i) map(tofrom: err) |
| call omp_set_teams_thread_limit (large_threads_limit + i) |
| if (omp_get_teams_thread_limit () /= large_threads_limit + i) err = .true. |
| !$omp end target |
| if (err) stop 18 |
| |
| err = .false. |
| !$omp target device(i) map(tofrom: err) |
| if (omp_get_teams_thread_limit () /= large_threads_limit + i) err = .true. |
| !$omp end target |
| if (err) stop 19 |
| |
| err = .false. |
| !$omp target device(i) map(tofrom: err) |
| !$omp teams |
| !$omp parallel |
| if (omp_get_thread_limit () > large_threads_limit + i & |
| .or. omp_get_thread_num () >= large_threads_limit + i) err = .true. |
| !$omp end parallel |
| !$omp end teams |
| !$omp end target |
| if (err) stop 20 |
| end if |
| |
| end do |
| |
| contains |
| logical function env_is_set (name, val) |
| character(len=*) :: name, val |
| character(len=40) :: val2 |
| integer :: stat |
| call get_environment_variable (name, val2, status=stat) |
| if (stat == 0) then |
| if (val == val2) then |
| env_is_set = .true. |
| return |
| end if |
| else if (stat /= 1) then |
| error stop 30 |
| endif |
| env_is_set = .false. |
| end |
| logical function env_is_set_dev (name, dev_num, val) |
| character(len=*) :: name |
| integer :: dev_num, val |
| character(len=64) :: dev_num_str, env_var, val_str |
| dev_num_str = ADJUSTL(dev_num_str) |
| env_var = name // dev_num_str |
| val_str = ADJUSTL(val_str) |
| env_is_set_dev = env_is_set (TRIM(env_var), TRIM(val_str)) |
| end |
| end |