| ! { dg-do run } |
| ! { dg-additional-options -cpp } |
| |
| |
| !TODO OpenACC 'serial' vs. GCC/nvptx: |
| !TODO { dg-prune-output {using 'vector_length \(32\)', ignoring 1} } |
| |
| |
| module m_macron |
| |
| implicit none |
| |
| real(kind(0d0)), allocatable, dimension(:) :: valls |
| !$acc declare create(valls) |
| |
| contains |
| |
| subroutine s_macron_compute(size) |
| |
| integer :: size |
| |
| !$acc routine seq |
| |
| #if ACC_MEM_SHARED |
| if (valls(size) /= 1) error stop |
| #else |
| if (valls(size) /= size - 2) error stop |
| #endif |
| |
| valls(size) = size + 2 |
| |
| end subroutine s_macron_compute |
| |
| subroutine s_macron_init(size) |
| |
| integer :: size |
| |
| print*, "size=", size |
| |
| print*, "allocate(valls(1:size))" |
| allocate(valls(1:size)) |
| |
| print*, "acc enter data create(valls(1:size))" |
| !$acc enter data create(valls(1:size)) |
| |
| print*, "!$acc update device(valls(1:size))" |
| valls(size) = size - 2 |
| !$acc update device(valls(1:size)) |
| |
| valls(size) = 1 |
| |
| !$acc serial |
| call s_macron_compute(size) |
| !$acc end serial |
| |
| valls(size) = -1 |
| |
| !$acc update host(valls(1:size)) |
| #if ACC_MEM_SHARED |
| if (valls(size) /= -1) error stop |
| #else |
| if (valls(size) /= size + 2) error stop |
| #endif |
| |
| print*, valls(1:size) |
| |
| print*, "acc exit data delete(valls)" |
| !$acc exit data delete(valls) |
| |
| end subroutine s_macron_init |
| |
| end module m_macron |
| |
| |
| program p_main |
| |
| use m_macron |
| |
| implicit none |
| |
| call s_macron_init(10) |
| |
| end program p_main |