1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
! REQUIRES: shell
! Check OpenACC clause validity for the following construct and directive:
! 2.5.1 Parallel
program openacc_parallel_validity
implicit none
integer :: i, j, b, gang_size, vector_size, worker_size
integer, parameter :: N = 256
integer, dimension(N) :: c
logical, dimension(N) :: d, e
integer :: async1
integer :: wait1, wait2
real :: reduction_r
logical :: reduction_l
real(8), dimension(N, N) :: aa, bb, cc
real(8), dimension(:), allocatable :: dd
real(8), pointer :: p
logical :: ifCondition = .TRUE.
real(8), dimension(N) :: a, f, g, h
!$acc parallel device_type(*) num_gangs(2)
!$acc loop
do i = 1, N
a(i) = 3.14
end do
!$acc end parallel
!$acc parallel async
!$acc end parallel
!$acc parallel async(1)
!$acc end parallel
!$acc parallel async(async1)
!$acc end parallel
!$acc parallel wait
!$acc end parallel
!$acc parallel wait(1)
!$acc end parallel
!$acc parallel wait(wait1)
!$acc end parallel
!$acc parallel wait(1,2)
!$acc end parallel
!$acc parallel wait(wait1, wait2)
!$acc end parallel
!$acc parallel num_gangs(8)
!$acc end parallel
!$acc parallel num_workers(8)
!$acc end parallel
!$acc parallel vector_length(128)
!$acc end parallel
!$acc parallel if(.true.)
!$acc end parallel
!$acc parallel if(ifCondition)
!$acc end parallel
!$acc parallel self
!$acc end parallel
!$acc parallel self(.true.)
!$acc end parallel
!$acc parallel self(ifCondition)
!$acc end parallel
!$acc parallel copy(aa) copyin(bb) copyout(cc)
!$acc end parallel
!$acc parallel copy(aa, bb) copyout(zero: cc)
!$acc end parallel
!$acc parallel present(aa, bb) create(cc)
!$acc end parallel
!$acc parallel copyin(readonly: aa, bb) create(zero: cc)
!$acc end parallel
!$acc parallel deviceptr(aa, bb) no_create(cc)
!$acc end parallel
!ERROR: Argument `cc` on the ATTACH clause must be a variable or array with the POINTER or ALLOCATABLE attribute
!$acc parallel attach(dd, p, cc)
!$acc end parallel
!$acc parallel private(aa) firstprivate(bb, cc)
!$acc end parallel
!$acc parallel default(none)
!$acc end parallel
!$acc parallel default(present)
!$acc end parallel
!$acc parallel device_type(*)
!$acc end parallel
!$acc parallel device_type(1)
!$acc end parallel
!$acc parallel device_type(1, 3)
!$acc end parallel
!ERROR: Clause PRIVATE is not allowed after clause DEVICE_TYPE on the PARALLEL directive
!ERROR: Clause FIRSTPRIVATE is not allowed after clause DEVICE_TYPE on the PARALLEL directive
!$acc parallel device_type(*) private(aa) firstprivate(bb)
!$acc end parallel
!$acc parallel device_type(*) async
!$acc end parallel
!$acc parallel device_type(*) wait
!$acc end parallel
!$acc parallel device_type(*) num_gangs(8)
!$acc end parallel
!$acc parallel device_type(1) async device_type(2) wait
!$acc end parallel
!ERROR: Clause IF is not allowed after clause DEVICE_TYPE on the PARALLEL directive
!$acc parallel device_type(*) if(.TRUE.)
!$acc loop
do i = 1, N
a(i) = 3.14
end do
!$acc end parallel
end program openacc_parallel_validity
|