1! { dg-do run } 2! 3MODULE reduction_test 4 5CONTAINS 6 7SUBROUTINE reduction_kernel(x_min,x_max,y_min,y_max,arr,sum) 8 9 IMPLICIT NONE 10 11 INTEGER :: x_min,x_max,y_min,y_max 12 REAL(KIND=8), DIMENSION(x_min-2:x_max+2,y_min-2:y_max+2) :: arr 13 REAL(KIND=8) :: sum 14 15 INTEGER :: j,k 16 17!$ACC DATA PRESENT(arr) COPY(sum) 18!$ACC PARALLEL LOOP REDUCTION(+ : sum) 19 DO k=y_min,y_max 20 DO j=x_min,x_max 21 sum=sum+arr(j,k) 22 ENDDO 23 ENDDO 24!$ACC END PARALLEL LOOP 25!$ACC END DATA 26END SUBROUTINE reduction_kernel 27 28END MODULE reduction_test 29 30program main 31 use reduction_test 32 33 integer :: x_min,x_max,y_min,y_max 34 real(kind=8), dimension(1:10,1:10) :: arr 35 real(kind=8) :: sum 36 37 x_min = 1 38 x_max = 2 39 y_min = 1 40 y_max = 2 41 42 arr(:,:) = 1.0 43 44 sum = 0.0 45 46 !$acc data copy(arr) 47 48 call reduction_kernel(x_min,x_max,y_min,y_max,arr,sum) 49 50 !$acc end data 51 52 if (sum .ne. 4.0) STOP 1 53end program 54