blob: 3992286dc08e9cee41014f5cdef26d7872717626 [file] [log] [blame]
! { dg-do run }
program main
use omp_lib
implicit none
integer, parameter :: N = 100
integer :: a(N)
integer :: on_device_count = 0
integer :: i
do i = 1, N
a(i) = i
end do
do i = 0, omp_get_num_devices ()
on_device_count = on_device_count + f (a, i)
end do
if (on_device_count .ne. omp_get_num_devices ()) stop 1
do i = 1, N
if (a(i) .ne. 2 * i) stop 2;
end do
contains
integer function f (a, num)
integer, intent(inout) :: a(N)
integer, intent(in) :: num
integer :: on_device
integer :: i
on_device = 0
!$omp metadirective &
!$omp& when (target_device={device_num(num), kind("gpu")}: &
!$omp& target parallel do map(to: a(1:N)), map(from: on_device)) &
!$omp& default (parallel do private(on_device))
do i = 1, N
a(i) = a(i) + i
on_device = 1
end do
f = on_device;
end function
end program