50 lines
1.1 KiB
Fortran
50 lines
1.1 KiB
Fortran
program main
|
|
use omp_lib
|
|
use iso_c_binding
|
|
implicit none
|
|
|
|
integer, parameter :: N = 40
|
|
integer :: x, i
|
|
integer :: y (N)
|
|
integer :: u (0)
|
|
|
|
x = 24
|
|
!$omp target data map(x) use_device_addr(x)
|
|
!$omp target has_device_addr(x)
|
|
x = 42;
|
|
!$omp end target
|
|
!$omp end target data
|
|
if (x /= 42) stop 1
|
|
|
|
y = 42
|
|
!$omp target data map(y) use_device_addr(y)
|
|
!$omp target has_device_addr(y)
|
|
y = [(i, i=1, N)]
|
|
!$omp end target
|
|
!$omp end target data
|
|
if (any (y /= [(i, i = 1, N)])) stop 2
|
|
|
|
!$omp target data map(y(:N)) use_device_addr(y)
|
|
!$omp target has_device_addr(y(:N))
|
|
y = [(i+2, i=1, N)]
|
|
!$omp end target
|
|
!$omp end target data
|
|
if (any (y /= [(i+2, i = 1, N)])) stop 3
|
|
|
|
!$omp target data map(y) use_device_addr(y)
|
|
!$omp target has_device_addr(y(24:))
|
|
do i = 24, N
|
|
y(i) = i + 3
|
|
end do
|
|
!$omp end target
|
|
!$omp end target data
|
|
do i = 24, N
|
|
if (y(i) /= i + 3) stop 5
|
|
end do
|
|
|
|
!$omp target data map(u) use_device_addr(u)
|
|
!$omp target has_device_addr(u)
|
|
!$omp end target
|
|
!$omp end target data
|
|
|
|
end program main
|