| ! { dg-do run } |
| |
| ! complex reductions |
| |
| program reduction_4 |
| implicit none |
| |
| integer, parameter :: n = 10, vl = 32 |
| integer :: i |
| complex :: vresult, result |
| complex, dimension (n) :: array |
| |
| do i = 1, n |
| array(i) = i |
| end do |
| |
| result = 0 |
| vresult = 0 |
| |
| ! '+' reductions |
| |
| !$acc parallel vector_length(vl) num_gangs(1) |
| !$acc loop reduction(+:result) |
| do i = 1, n |
| result = result + array(i) |
| end do |
| !$acc end parallel |
| |
| ! Verify the results |
| do i = 1, n |
| vresult = vresult + array(i) |
| end do |
| |
| if (result .ne. vresult) call abort |
| |
| result = 1 |
| vresult = 1 |
| |
| ! ! '*' reductions |
| ! |
| ! !$acc parallel vector_length(vl) |
| ! !$acc loop reduction(*:result) |
| ! do i = 1, n |
| ! result = result * array(i) |
| ! end do |
| ! !$acc end parallel |
| ! |
| ! ! Verify the results |
| ! do i = 1, n |
| ! vresult = vresult * array(i) |
| ! end do |
| ! |
| ! if (result.ne.vresult) call abort |
| end program reduction_4 |