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 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
|
! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! 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
!ERROR: NUM_GANGS clause accepts a maximum of 3 arguments
!$acc parallel num_gangs(1, 1, 1, 1)
!$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(default)
!$acc end parallel
!$acc parallel device_type(default, host)
!$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(*) async device_type(host) 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
do i = 1, 100
!$acc parallel
!ERROR: CYCLE to construct outside of PARALLEL construct is not allowed
if (i == 10) cycle
!$acc end parallel
end do
!$acc parallel
do i = 1, 100
if (i == 10) cycle
end do
!$acc end parallel
!ERROR: At most one NUM_GANGS clause can appear on the PARALLEL directive or in group separated by the DEVICE_TYPE clause
!$acc parallel num_gangs(400) num_gangs(400)
!$acc end parallel
!ERROR: At most one NUM_GANGS clause can appear on the PARALLEL directive or in group separated by the DEVICE_TYPE clause
!$acc parallel device_type(nvidia) num_gangs(400) num_gangs(200)
!$acc end parallel
!$acc parallel device_type(nvidia) num_gangs(400) device_type(radeon) num_gangs(200)
!$acc end parallel
!ERROR: At most one NUM_WORKERS clause can appear on the PARALLEL directive or in group separated by the DEVICE_TYPE clause
!$acc parallel num_workers(8) num_workers(4)
!$acc end parallel
!ERROR: At most one NUM_WORKERS clause can appear on the PARALLEL directive or in group separated by the DEVICE_TYPE clause
!$acc parallel device_type(nvidia) num_workers(8) num_workers(4)
!$acc end parallel
!$acc parallel device_type(nvidia) num_workers(8) device_type(radeon) num_workers(4)
!$acc end parallel
!ERROR: At most one VECTOR_LENGTH clause can appear on the PARALLEL directive or in group separated by the DEVICE_TYPE clause
!$acc parallel vector_length(128) vector_length(124)
!$acc end parallel
!ERROR: At most one VECTOR_LENGTH clause can appear on the PARALLEL directive or in group separated by the DEVICE_TYPE clause
!$acc parallel device_type(nvidia) vector_length(256) vector_length(128)
!$acc end parallel
!$acc parallel device_type(nvidia) vector_length(256) device_type(radeon) vector_length(128)
!$acc end parallel
end program openacc_parallel_validity
|