1! Exercise the data movement runtime library functions on non-shared memory 2! targets. 3 4! { dg-do run { target openacc_nvidia_accel_selected } } 5 6program main 7 use openacc 8 implicit none 9 10 integer, parameter :: N = 256 11 integer, allocatable :: h(:) 12 integer :: i 13 14 allocate (h(N)) 15 16 do i = 1, N 17 h(i) = i 18 end do 19 20 call acc_present_or_copyin (h) 21 22 if (acc_is_present (h) .neqv. .TRUE.) stop 1 23 24 call acc_copyout (h) 25 26 if (acc_is_present (h) .neqv. .FALSE.) stop 1 27 28 do i = 1, N 29 if (h(i) /= i) stop 1 30 end do 31 32 do i = 1, N 33 h(i) = i + i 34 end do 35 36 call acc_pcopyin (h, sizeof (h)) 37 38 if (acc_is_present (h) .neqv. .TRUE.) stop 1 39 40 call acc_copyout (h) 41 42 if (acc_is_present (h) .neqv. .FALSE.) stop 1 43 44 do i = 1, N 45 if (h(i) /= i + i) stop 1 46 end do 47 48 call acc_create (h) 49 50 if (acc_is_present (h) .neqv. .TRUE.) stop 1 51 52 !$acc parallel loop 53 do i = 1, N 54 h(i) = i 55 end do 56 !$end acc parallel 57 58 call acc_copyout (h) 59 60 if (acc_is_present (h) .neqv. .FALSE.) stop 1 61 62 do i = 1, N 63 if (h(i) /= i) stop 1 64 end do 65 66 call acc_present_or_create (h, sizeof (h)) 67 68 if (acc_is_present (h) .neqv. .TRUE.) stop 1 69 70 call acc_delete (h) 71 72 if (acc_is_present (h) .neqv. .FALSE.) stop 1 73 74 call acc_pcreate (h) 75 76 if (acc_is_present (h) .neqv. .TRUE.) stop 1 77 78 call acc_delete (h) 79 80 if (acc_is_present (h) .neqv. .FALSE.) stop 1 81 82end program 83