2014-09-21 17:33:12 +00:00
|
|
|
! { dg-do run }
|
|
|
|
|
|
|
|
interface
|
|
|
|
real function foo (x)
|
|
|
|
!$omp declare target
|
|
|
|
real, intent(in) :: x
|
|
|
|
end function foo
|
|
|
|
end interface
|
|
|
|
integer, parameter :: n = 1000
|
|
|
|
integer, parameter :: c = 100
|
|
|
|
integer :: i, j
|
|
|
|
real :: a(n)
|
|
|
|
do i = 1, n
|
|
|
|
a(i) = i
|
|
|
|
end do
|
|
|
|
!$omp parallel
|
|
|
|
!$omp single
|
|
|
|
do i = 1, n, c
|
|
|
|
!$omp task shared(a)
|
|
|
|
!$omp target map(a(i:i+c-1))
|
|
|
|
!$omp parallel do
|
|
|
|
do j = i, i + c - 1
|
|
|
|
a(j) = foo (a(j))
|
|
|
|
end do
|
|
|
|
!$omp end target
|
|
|
|
!$omp end task
|
|
|
|
end do
|
|
|
|
!$omp end single
|
|
|
|
!$omp end parallel
|
|
|
|
do i = 1, n
|
2018-12-28 15:30:48 +00:00
|
|
|
if (a(i) /= i + 1) STOP 1
|
2014-09-21 17:33:12 +00:00
|
|
|
end do
|
|
|
|
end
|
|
|
|
real function foo (x)
|
|
|
|
!$omp declare target
|
|
|
|
real, intent(in) :: x
|
|
|
|
foo = x + 1
|
|
|
|
end function foo
|