| ! { dg-do run } |
| |
| ! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting |
| ! aspects of that functionality. |
| |
| program reduction |
| implicit none |
| integer, parameter :: n = 10 |
| integer s1, s2 |
| include "openacc_lib.h" |
| |
| s1 = 0 |
| s2 = 0 |
| |
| !$acc parallel reduction(+:s1,s2) num_gangs (n) copy(s1) |
| ! { dg-bogus "\[Ww\]arning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-1 } |
| s1 = s1 + 1 |
| s2 = s2 + 1 |
| !$acc end parallel |
| |
| if (acc_get_device_type () .ne. acc_device_host) then |
| if (s1 .ne. n) STOP 1 |
| if (s2 .ne. n) STOP 2 |
| else |
| if (s1 .ne. 1) STOP 3 |
| if (s2 .ne. 1) STOP 4 |
| end if |
| |
| ! Test reductions inside subroutines |
| |
| s1 = 0 |
| s2 = 0 |
| call redsub (s1, s2, n) |
| |
| if (acc_get_device_type () .ne. acc_device_host) then |
| if (s1 .ne. n) STOP 5 |
| else |
| if (s2 .ne. 1) STOP 6 |
| end if |
| end program reduction |
| |
| subroutine redsub(s1, s2, n) |
| implicit none |
| integer :: s1, s2, n |
| |
| !$acc parallel reduction(+:s1,s2) num_gangs (10) copy(s1) |
| ! { dg-bogus "\[Ww\]arning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-1 } |
| s1 = s1 + 1 |
| s2 = s2 + 1 |
| !$acc end parallel |
| end subroutine redsub |