blob: 28e3496d54707b6c51ebe540acd9ad2eeaff2269 [file] [log] [blame]
program main
use omp_lib
implicit none (type, external)
integer :: dev, def_dev
if (omp_default_device >= -1 .or. omp_default_device == omp_invalid_device) &
error stop 1
dev = -99
def_dev = omp_get_default_device ()
!$omp target map(from: dev) device(omp_default_device)
dev = omp_get_device_num ()
!$omp end target
if (.not.is_same_dev (def_dev, dev)) &
error stop 2
do def_dev = omp_initial_device, omp_get_num_devices ()
block
character(:), pointer :: uid
uid => omp_get_uid_from_device(def_dev)
call omp_set_default_device (def_dev)
dev = -99
!$omp target map(from: dev) device(omp_default_device)
dev = omp_get_device_num ()
!$omp end target
if (.not.is_same_dev (def_dev, dev)) &
error stop 3
! Shall not modify the ICV. */
call omp_set_default_device (omp_default_device)
if (def_dev /= omp_get_default_device ()) &
error stop 4
! Assume the ptr and no only the string is the same. */
if (.not.associated(uid, omp_get_uid_from_device (omp_default_device))) &
error stop 5
end block
end do
call omp_set_default_device (omp_invalid_device)
! Shall not modify the ICV.
call omp_set_default_device (omp_default_device)
if (omp_invalid_device /= omp_get_default_device ()) &
error stop 6
contains
logical function is_same_dev (d1, d2)
integer, value :: d1, d2
integer :: num_dev
num_dev = omp_get_num_devices ()
if (d1 == omp_initial_device) &
d1 = num_dev
if (d2 == omp_initial_device) &
d2 = num_dev
is_same_dev = d1 == d2
end function is_same_dev
end program