OpenACC 2.6 deep copy: Fortran execution tests
libgomp/ * testsuite/libgomp.oacc-fortran/deep-copy-1.f90: New test. * testsuite/libgomp.oacc-fortran/deep-copy-2.f90: New test. * testsuite/libgomp.oacc-fortran/deep-copy-3.f90: New test. * testsuite/libgomp.oacc-fortran/deep-copy-4.f90: New test. * testsuite/libgomp.oacc-fortran/deep-copy-5.f90: New test. * testsuite/libgomp.oacc-fortran/deep-copy-6.f90: New test. * testsuite/libgomp.oacc-fortran/deep-copy-7.f90: New test. * testsuite/libgomp.oacc-fortran/deep-copy-8.f90: New test. * testsuite/libgomp.oacc-fortran/derived-type-1.f90: New test. * testsuite/libgomp.oacc-fortran/derivedtype-1.f95: New test. * testsuite/libgomp.oacc-fortran/derivedtype-2.f95: New test. * testsuite/libgomp.oacc-fortran/multidim-slice.f95: New test. * testsuite/libgomp.oacc-fortran/update-2.f90: New test. Co-Authored-By: Cesar Philippidis <cesar@codesourcery.com> From-SVN: r279630
This commit is contained in:
parent
c2eb021fd2
commit
02817027ca
@ -1,3 +1,20 @@
|
||||
2019-12-19 Julian Brown <julian@codesourcery.com>
|
||||
Cesar Philippidis <cesar@codesourcery.com>
|
||||
|
||||
* testsuite/libgomp.oacc-fortran/deep-copy-1.f90: New test.
|
||||
* testsuite/libgomp.oacc-fortran/deep-copy-2.f90: New test.
|
||||
* testsuite/libgomp.oacc-fortran/deep-copy-3.f90: New test.
|
||||
* testsuite/libgomp.oacc-fortran/deep-copy-4.f90: New test.
|
||||
* testsuite/libgomp.oacc-fortran/deep-copy-5.f90: New test.
|
||||
* testsuite/libgomp.oacc-fortran/deep-copy-6.f90: New test.
|
||||
* testsuite/libgomp.oacc-fortran/deep-copy-7.f90: New test.
|
||||
* testsuite/libgomp.oacc-fortran/deep-copy-8.f90: New test.
|
||||
* testsuite/libgomp.oacc-fortran/derived-type-1.f90: New test.
|
||||
* testsuite/libgomp.oacc-fortran/derivedtype-1.f95: New test.
|
||||
* testsuite/libgomp.oacc-fortran/derivedtype-2.f95: New test.
|
||||
* testsuite/libgomp.oacc-fortran/multidim-slice.f95: New test.
|
||||
* testsuite/libgomp.oacc-fortran/update-2.f90: New test.
|
||||
|
||||
2019-12-19 Julian Brown <julian@codesourcery.com>
|
||||
|
||||
* testsuite/libgomp.oacc-c-c++-common/deep-copy-1.c: New test.
|
||||
|
35
libgomp/testsuite/libgomp.oacc-fortran/deep-copy-1.f90
Normal file
35
libgomp/testsuite/libgomp.oacc-fortran/deep-copy-1.f90
Normal file
@ -0,0 +1,35 @@
|
||||
! { dg-do run }
|
||||
|
||||
! Test of attach/detach with "acc data".
|
||||
|
||||
program dtype
|
||||
implicit none
|
||||
integer, parameter :: n = 512
|
||||
type mytype
|
||||
integer, allocatable :: a(:)
|
||||
end type mytype
|
||||
integer i
|
||||
|
||||
type(mytype) :: var
|
||||
|
||||
allocate(var%a(1:n))
|
||||
|
||||
!$acc data copy(var)
|
||||
!$acc data copy(var%a)
|
||||
|
||||
!$acc parallel loop
|
||||
do i = 1,n
|
||||
var%a(i) = i
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc end data
|
||||
!$acc end data
|
||||
|
||||
do i = 1,n
|
||||
if (i .ne. var%a(i)) stop 1
|
||||
end do
|
||||
|
||||
deallocate(var%a)
|
||||
|
||||
end program dtype
|
33
libgomp/testsuite/libgomp.oacc-fortran/deep-copy-2.f90
Normal file
33
libgomp/testsuite/libgomp.oacc-fortran/deep-copy-2.f90
Normal file
@ -0,0 +1,33 @@
|
||||
! { dg-do run }
|
||||
|
||||
! Test of attach/detach with "acc data", two clauses at once.
|
||||
|
||||
program dtype
|
||||
implicit none
|
||||
integer, parameter :: n = 512
|
||||
type mytype
|
||||
integer, allocatable :: a(:)
|
||||
end type mytype
|
||||
integer i
|
||||
|
||||
type(mytype) :: var
|
||||
|
||||
allocate(var%a(1:n))
|
||||
|
||||
!$acc data copy(var) copy(var%a)
|
||||
|
||||
!$acc parallel loop
|
||||
do i = 1,n
|
||||
var%a(i) = i
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc end data
|
||||
|
||||
do i = 1,n
|
||||
if (i .ne. var%a(i)) stop 1
|
||||
end do
|
||||
|
||||
deallocate(var%a)
|
||||
|
||||
end program dtype
|
34
libgomp/testsuite/libgomp.oacc-fortran/deep-copy-3.f90
Normal file
34
libgomp/testsuite/libgomp.oacc-fortran/deep-copy-3.f90
Normal file
@ -0,0 +1,34 @@
|
||||
! { dg-do run }
|
||||
|
||||
! Test of attach/detach with "acc parallel".
|
||||
|
||||
program dtype
|
||||
implicit none
|
||||
integer, parameter :: n = 512
|
||||
type mytype
|
||||
integer, allocatable :: a(:)
|
||||
integer, allocatable :: b(:)
|
||||
end type mytype
|
||||
integer i
|
||||
|
||||
type(mytype) :: var
|
||||
|
||||
allocate(var%a(1:n))
|
||||
allocate(var%b(1:n))
|
||||
|
||||
!$acc parallel loop copy(var) copy(var%a(1:n)) copy(var%b(1:n))
|
||||
do i = 1,n
|
||||
var%a(i) = i
|
||||
var%b(i) = i
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
do i = 1,n
|
||||
if (i .ne. var%a(i)) stop 1
|
||||
if (i .ne. var%b(i)) stop 2
|
||||
end do
|
||||
|
||||
deallocate(var%a)
|
||||
deallocate(var%b)
|
||||
|
||||
end program dtype
|
49
libgomp/testsuite/libgomp.oacc-fortran/deep-copy-4.f90
Normal file
49
libgomp/testsuite/libgomp.oacc-fortran/deep-copy-4.f90
Normal file
@ -0,0 +1,49 @@
|
||||
! { dg-do run }
|
||||
|
||||
! Test of attach/detach with "acc enter/exit data".
|
||||
|
||||
program dtype
|
||||
implicit none
|
||||
integer, parameter :: n = 512
|
||||
type mytype
|
||||
integer, allocatable :: a(:)
|
||||
integer, allocatable :: b(:)
|
||||
end type mytype
|
||||
integer, allocatable :: r(:)
|
||||
integer i
|
||||
|
||||
type(mytype) :: var
|
||||
|
||||
allocate(var%a(1:n))
|
||||
allocate(var%b(1:n))
|
||||
allocate(r(1:n))
|
||||
|
||||
!$acc enter data copyin(var)
|
||||
|
||||
!$acc enter data copyin(var%a, var%b, r)
|
||||
|
||||
!$acc parallel loop
|
||||
do i = 1,n
|
||||
var%a(i) = i
|
||||
var%b(i) = i * 2
|
||||
r(i) = i * 3
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc exit data copyout(var%a)
|
||||
!$acc exit data copyout(var%b)
|
||||
!$acc exit data copyout(r)
|
||||
|
||||
do i = 1,n
|
||||
if (i .ne. var%a(i)) stop 1
|
||||
if (i * 2 .ne. var%b(i)) stop 2
|
||||
if (i * 3 .ne. r(i)) stop 3
|
||||
end do
|
||||
|
||||
!$acc exit data delete(var)
|
||||
|
||||
deallocate(var%a)
|
||||
deallocate(var%b)
|
||||
deallocate(r)
|
||||
|
||||
end program dtype
|
57
libgomp/testsuite/libgomp.oacc-fortran/deep-copy-5.f90
Normal file
57
libgomp/testsuite/libgomp.oacc-fortran/deep-copy-5.f90
Normal file
@ -0,0 +1,57 @@
|
||||
! { dg-do run }
|
||||
|
||||
! Test of attach/detach, "enter data" inside "data", and subarray.
|
||||
|
||||
program dtype
|
||||
implicit none
|
||||
integer, parameter :: n = 512
|
||||
type mytype
|
||||
integer, allocatable :: a(:)
|
||||
integer, allocatable :: b(:)
|
||||
end type mytype
|
||||
integer i
|
||||
|
||||
type(mytype) :: var
|
||||
|
||||
allocate(var%a(1:n))
|
||||
allocate(var%b(1:n))
|
||||
|
||||
!$acc data copy(var)
|
||||
|
||||
do i = 1, n
|
||||
var%a(i) = 0
|
||||
var%b(i) = 0
|
||||
end do
|
||||
|
||||
!$acc enter data copyin(var%a(5:n - 5), var%b(5:n - 5))
|
||||
|
||||
!$acc parallel loop
|
||||
do i = 5,n - 5
|
||||
var%a(i) = i
|
||||
var%b(i) = i * 2
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc exit data copyout(var%a(5:n - 5), var%b(5:n - 5))
|
||||
|
||||
!$acc end data
|
||||
|
||||
do i = 1,4
|
||||
if (var%a(i) .ne. 0) stop 1
|
||||
if (var%b(i) .ne. 0) stop 2
|
||||
end do
|
||||
|
||||
do i = 5,n - 5
|
||||
if (i .ne. var%a(i)) stop 3
|
||||
if (i * 2 .ne. var%b(i)) stop 4
|
||||
end do
|
||||
|
||||
do i = n - 4,n
|
||||
if (var%a(i) .ne. 0) stop 5
|
||||
if (var%b(i) .ne. 0) stop 6
|
||||
end do
|
||||
|
||||
deallocate(var%a)
|
||||
deallocate(var%b)
|
||||
|
||||
end program dtype
|
61
libgomp/testsuite/libgomp.oacc-fortran/deep-copy-6.f90
Normal file
61
libgomp/testsuite/libgomp.oacc-fortran/deep-copy-6.f90
Normal file
@ -0,0 +1,61 @@
|
||||
! { dg-do run }
|
||||
|
||||
! Test of attachment counters and finalize.
|
||||
|
||||
program dtype
|
||||
implicit none
|
||||
integer, parameter :: n = 512
|
||||
type mytype
|
||||
integer, allocatable :: a(:)
|
||||
integer, allocatable :: b(:)
|
||||
end type mytype
|
||||
integer i
|
||||
|
||||
type(mytype) :: var
|
||||
|
||||
allocate(var%a(1:n))
|
||||
allocate(var%b(1:n))
|
||||
|
||||
!$acc data copy(var)
|
||||
|
||||
do i = 1, n
|
||||
var%a(i) = 0
|
||||
var%b(i) = 0
|
||||
end do
|
||||
|
||||
!$acc enter data copyin(var%a(5:n - 5), var%b(5:n - 5))
|
||||
|
||||
do i = 1,20
|
||||
!$acc enter data attach(var%a)
|
||||
end do
|
||||
|
||||
!$acc parallel loop
|
||||
do i = 5,n - 5
|
||||
var%a(i) = i
|
||||
var%b(i) = i * 2
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc exit data copyout(var%a(5:n - 5), var%b(5:n - 5)) finalize
|
||||
|
||||
!$acc end data
|
||||
|
||||
do i = 1,4
|
||||
if (var%a(i) .ne. 0) stop 1
|
||||
if (var%b(i) .ne. 0) stop 2
|
||||
end do
|
||||
|
||||
do i = 5,n - 5
|
||||
if (i .ne. var%a(i)) stop 3
|
||||
if (i * 2 .ne. var%b(i)) stop 4
|
||||
end do
|
||||
|
||||
do i = n - 4,n
|
||||
if (var%a(i) .ne. 0) stop 5
|
||||
if (var%b(i) .ne. 0) stop 6
|
||||
end do
|
||||
|
||||
deallocate(var%a)
|
||||
deallocate(var%b)
|
||||
|
||||
end program dtype
|
89
libgomp/testsuite/libgomp.oacc-fortran/deep-copy-7.f90
Normal file
89
libgomp/testsuite/libgomp.oacc-fortran/deep-copy-7.f90
Normal file
@ -0,0 +1,89 @@
|
||||
! { dg-do run }
|
||||
|
||||
! Test of attach/detach with scalar elements and nested derived types.
|
||||
|
||||
program dtype
|
||||
implicit none
|
||||
integer, parameter :: n = 512
|
||||
type subtype
|
||||
integer :: g, h
|
||||
integer, allocatable :: q(:)
|
||||
end type subtype
|
||||
type mytype
|
||||
integer, allocatable :: a(:)
|
||||
integer, allocatable :: c, d
|
||||
integer, allocatable :: b(:)
|
||||
integer :: f
|
||||
type(subtype) :: s
|
||||
end type mytype
|
||||
integer i
|
||||
|
||||
type(mytype) :: var
|
||||
|
||||
allocate(var%a(1:n))
|
||||
allocate(var%b(1:n))
|
||||
allocate(var%c)
|
||||
allocate(var%d)
|
||||
allocate(var%s%q(1:n))
|
||||
|
||||
var%c = 16
|
||||
var%d = 20
|
||||
var%f = 7
|
||||
var%s%g = 21
|
||||
var%s%h = 38
|
||||
|
||||
!$acc enter data copyin(var)
|
||||
|
||||
do i = 1, n
|
||||
var%a(i) = 0
|
||||
var%b(i) = 0
|
||||
var%s%q(i) = 0
|
||||
end do
|
||||
|
||||
!$acc data copy(var%a(5:n - 5), var%b(5:n - 5), var%c, var%d) &
|
||||
!$acc & copy(var%s%q)
|
||||
|
||||
!$acc parallel loop default(none) present(var)
|
||||
do i = 5,n - 5
|
||||
var%a(i) = i
|
||||
var%b(i) = i * 2
|
||||
var%s%q(i) = i * 3
|
||||
var%s%g = 100
|
||||
var%s%h = 101
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc end data
|
||||
|
||||
!$acc exit data copyout(var)
|
||||
|
||||
do i = 1,4
|
||||
if (var%a(i) .ne. 0) stop 1
|
||||
if (var%b(i) .ne. 0) stop 2
|
||||
if (var%s%q(i) .ne. 0) stop 3
|
||||
end do
|
||||
|
||||
do i = 5,n - 5
|
||||
if (i .ne. var%a(i)) stop 4
|
||||
if (i * 2 .ne. var%b(i)) stop 5
|
||||
if (i * 3 .ne. var%s%q(i)) stop 6
|
||||
end do
|
||||
|
||||
do i = n - 4,n
|
||||
if (var%a(i) .ne. 0) stop 7
|
||||
if (var%b(i) .ne. 0) stop 8
|
||||
if (var%s%q(i) .ne. 0) stop 9
|
||||
end do
|
||||
|
||||
if (var%c .ne. 16) stop 10
|
||||
if (var%d .ne. 20) stop 11
|
||||
if (var%s%g .ne. 100 .or. var%s%h .ne. 101) stop 12
|
||||
if (var%f .ne. 7) stop 13
|
||||
|
||||
deallocate(var%a)
|
||||
deallocate(var%b)
|
||||
deallocate(var%c)
|
||||
deallocate(var%d)
|
||||
deallocate(var%s%q)
|
||||
|
||||
end program dtype
|
41
libgomp/testsuite/libgomp.oacc-fortran/deep-copy-8.f90
Normal file
41
libgomp/testsuite/libgomp.oacc-fortran/deep-copy-8.f90
Normal file
@ -0,0 +1,41 @@
|
||||
! { dg-do run }
|
||||
|
||||
! Test of explicit attach/detach clauses and attachment counters. There are no
|
||||
! acc_attach/acc_detach API routines in Fortran.
|
||||
|
||||
program dtype
|
||||
use openacc
|
||||
implicit none
|
||||
integer, parameter :: n = 512
|
||||
type mytype
|
||||
integer, allocatable :: a(:)
|
||||
end type mytype
|
||||
integer i
|
||||
|
||||
type(mytype) :: var
|
||||
|
||||
allocate(var%a(1:n))
|
||||
|
||||
call acc_copyin(var)
|
||||
call acc_copyin(var%a)
|
||||
|
||||
!$acc enter data attach(var%a)
|
||||
|
||||
!$acc parallel loop attach(var%a)
|
||||
do i = 1,n
|
||||
var%a(i) = i
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc exit data detach(var%a)
|
||||
|
||||
call acc_copyout(var%a)
|
||||
call acc_copyout(var)
|
||||
|
||||
do i = 1,n
|
||||
if (i .ne. var%a(i)) stop 1
|
||||
end do
|
||||
|
||||
deallocate(var%a)
|
||||
|
||||
end program dtype
|
28
libgomp/testsuite/libgomp.oacc-fortran/derived-type-1.f90
Normal file
28
libgomp/testsuite/libgomp.oacc-fortran/derived-type-1.f90
Normal file
@ -0,0 +1,28 @@
|
||||
! Test derived types with subarrays
|
||||
|
||||
! { dg-do run }
|
||||
|
||||
implicit none
|
||||
type dtype
|
||||
integer :: a, b, c
|
||||
end type dtype
|
||||
integer, parameter :: n = 100
|
||||
integer i
|
||||
type (dtype), dimension(n) :: d
|
||||
|
||||
!$acc data copy(d(1:n))
|
||||
!$acc parallel loop
|
||||
do i = 1, n
|
||||
d(i)%a = i
|
||||
d(i)%b = i-1
|
||||
d(i)%c = i+1
|
||||
end do
|
||||
!$acc end data
|
||||
|
||||
do i = 1, n
|
||||
if (d(i)%a /= i) stop 1
|
||||
if (d(i)%b /= i-1) stop 2
|
||||
if (d(i)%c /= i+1) stop 3
|
||||
end do
|
||||
end program
|
||||
|
30
libgomp/testsuite/libgomp.oacc-fortran/derivedtype-1.f95
Normal file
30
libgomp/testsuite/libgomp.oacc-fortran/derivedtype-1.f95
Normal file
@ -0,0 +1,30 @@
|
||||
! { dg-do run }
|
||||
|
||||
program main
|
||||
implicit none
|
||||
|
||||
type mytype
|
||||
integer :: a, b, c
|
||||
end type mytype
|
||||
|
||||
type(mytype) :: myvar
|
||||
integer :: i
|
||||
|
||||
myvar%a = 0
|
||||
myvar%b = 0
|
||||
myvar%c = 0
|
||||
|
||||
!$acc enter data copyin(myvar)
|
||||
|
||||
!$acc parallel present(myvar)
|
||||
myvar%a = 1
|
||||
myvar%b = 2
|
||||
myvar%c = 3
|
||||
!$acc end parallel
|
||||
|
||||
!$acc exit data copyout(myvar)
|
||||
|
||||
if (myvar%a .ne. 1) stop 1
|
||||
if (myvar%b .ne. 2) stop 2
|
||||
if (myvar%c .ne. 3) stop 3
|
||||
end program main
|
41
libgomp/testsuite/libgomp.oacc-fortran/derivedtype-2.f95
Normal file
41
libgomp/testsuite/libgomp.oacc-fortran/derivedtype-2.f95
Normal file
@ -0,0 +1,41 @@
|
||||
! { dg-do run }
|
||||
|
||||
program main
|
||||
implicit none
|
||||
|
||||
type tnest
|
||||
integer :: ia, ib, ic
|
||||
end type tnest
|
||||
|
||||
type mytype
|
||||
type(tnest) :: nest
|
||||
integer :: a, b, c
|
||||
end type mytype
|
||||
|
||||
type(mytype) :: myvar
|
||||
integer :: i
|
||||
|
||||
myvar%a = 0
|
||||
myvar%b = 0
|
||||
myvar%c = 0
|
||||
myvar%nest%ia = 0
|
||||
myvar%nest%ib = 0
|
||||
myvar%nest%ic = 0
|
||||
|
||||
!$acc enter data copyin(myvar%nest)
|
||||
|
||||
!$acc parallel present(myvar%nest)
|
||||
myvar%nest%ia = 4
|
||||
myvar%nest%ib = 5
|
||||
myvar%nest%ic = 6
|
||||
!$acc end parallel
|
||||
|
||||
!$acc exit data copyout(myvar%nest)
|
||||
|
||||
if (myvar%a .ne. 0) stop 1
|
||||
if (myvar%b .ne. 0) stop 2
|
||||
if (myvar%c .ne. 0) stop 3
|
||||
if (myvar%nest%ia .ne. 4) stop 4
|
||||
if (myvar%nest%ib .ne. 5) stop 5
|
||||
if (myvar%nest%ic .ne. 6) stop 6
|
||||
end program main
|
50
libgomp/testsuite/libgomp.oacc-fortran/multidim-slice.f95
Normal file
50
libgomp/testsuite/libgomp.oacc-fortran/multidim-slice.f95
Normal file
@ -0,0 +1,50 @@
|
||||
! { dg-do run }
|
||||
|
||||
program main
|
||||
implicit none
|
||||
real, allocatable :: myarr(:,:,:,:,:)
|
||||
integer i, j, k, l, m
|
||||
|
||||
allocate(myarr(1:10,1:10,1:10,1:10,1:10))
|
||||
|
||||
do i=1,10
|
||||
do j=1,10
|
||||
do k=1,10
|
||||
do l=1,10
|
||||
do m=1,10
|
||||
myarr(m,l,k,j,i) = i+j+k+l+m
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
|
||||
do i=1,10
|
||||
!$acc data copy(myarr(:,:,:,:,i))
|
||||
!$acc parallel loop collapse(4) present(myarr(:,:,:,:,i))
|
||||
do j=1,10
|
||||
do k=1,10
|
||||
do l=1,10
|
||||
do m=1,10
|
||||
myarr(m,l,k,j,i) = myarr(m,l,k,j,i) + 1
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
!$acc end data
|
||||
end do
|
||||
|
||||
do i=1,10
|
||||
do j=1,10
|
||||
do k=1,10
|
||||
do l=1,10
|
||||
do m=1,10
|
||||
if (myarr(m,l,k,j,i) .ne. i+j+k+l+m+1) stop 1
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
|
||||
end program main
|
284
libgomp/testsuite/libgomp.oacc-fortran/update-2.f90
Normal file
284
libgomp/testsuite/libgomp.oacc-fortran/update-2.f90
Normal file
@ -0,0 +1,284 @@
|
||||
! Test ACC UPDATE with derived types.
|
||||
|
||||
! { dg-do run }
|
||||
|
||||
module dt
|
||||
integer, parameter :: n = 10
|
||||
type inner
|
||||
integer :: d(n)
|
||||
end type inner
|
||||
type mytype
|
||||
integer(8) :: a, b, c(n)
|
||||
type(inner) :: in
|
||||
end type mytype
|
||||
end module dt
|
||||
|
||||
program derived_acc
|
||||
use dt
|
||||
|
||||
implicit none
|
||||
integer i, res
|
||||
type(mytype) :: var
|
||||
|
||||
var%a = 0
|
||||
var%b = 1
|
||||
var%c(:) = 10
|
||||
var%in%d(:) = 100
|
||||
|
||||
var%c(:) = 10
|
||||
|
||||
!$acc enter data copyin(var)
|
||||
|
||||
!$acc parallel loop present(var)
|
||||
do i = 1, 1
|
||||
var%a = var%b
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc update host(var%a)
|
||||
|
||||
if (var%a /= var%b) stop 1
|
||||
|
||||
var%b = 100
|
||||
|
||||
!$acc update device(var%b)
|
||||
|
||||
!$acc parallel loop present(var)
|
||||
do i = 1, 1
|
||||
var%a = var%b
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc update host(var%a)
|
||||
|
||||
if (var%a /= var%b) stop 2
|
||||
|
||||
!$acc parallel loop present (var)
|
||||
do i = 1, n
|
||||
var%c(i) = i
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc update host(var%c)
|
||||
|
||||
var%a = -1
|
||||
|
||||
do i = 1, n
|
||||
if (var%c(i) /= i) stop 3
|
||||
var%c(i) = var%a
|
||||
end do
|
||||
|
||||
!$acc update device(var%a)
|
||||
!$acc update device(var%c)
|
||||
|
||||
res = 0
|
||||
|
||||
!$acc parallel loop present(var) reduction(+:res)
|
||||
do i = 1, n
|
||||
if (var%c(i) /= var%a) res = res + 1
|
||||
end do
|
||||
|
||||
if (res /= 0) stop 4
|
||||
|
||||
var%c(:) = 0
|
||||
|
||||
!$acc update device(var%c)
|
||||
|
||||
!$acc parallel loop present(var)
|
||||
do i = 5, 5
|
||||
var%c(i) = 1
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc update host(var%c(5))
|
||||
|
||||
do i = 1, n
|
||||
if (i /= 5 .and. var%c(i) /= 0) stop 5
|
||||
if (i == 5 .and. var%c(i) /= 1) stop 6
|
||||
end do
|
||||
|
||||
!$acc parallel loop present(var)
|
||||
do i = 1, n
|
||||
var%in%d = var%a
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc update host(var%in%d)
|
||||
|
||||
do i = 1, n
|
||||
if (var%in%d(i) /= var%a) stop 7
|
||||
end do
|
||||
|
||||
var%c(:) = 0
|
||||
|
||||
!$acc update device(var%c)
|
||||
|
||||
var%c(:) = -1
|
||||
|
||||
!$acc parallel loop present(var)
|
||||
do i = n/2, n
|
||||
var%c(i) = i
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc update host(var%c(n/2:n))
|
||||
|
||||
do i = 1,n
|
||||
if (i < n/2 .and. var%c(i) /= -1) stop 8
|
||||
if (i >= n/2 .and. var%c(i) /= i) stop 9
|
||||
end do
|
||||
|
||||
var%in%d(:) = 0
|
||||
!$acc update device(var%in%d)
|
||||
|
||||
!$acc parallel loop present(var)
|
||||
do i = 5, 5
|
||||
var%in%d(i) = 1
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc update host(var%in%d(5))
|
||||
|
||||
do i = 1, n
|
||||
if (i /= 5 .and. var%in%d(i) /= 0) stop 10
|
||||
if (i == 5 .and. var%in%d(i) /= 1) stop 11
|
||||
end do
|
||||
|
||||
!$acc exit data delete(var)
|
||||
|
||||
call derived_acc_subroutine(var)
|
||||
end program derived_acc
|
||||
|
||||
subroutine derived_acc_subroutine(var)
|
||||
use dt
|
||||
|
||||
implicit none
|
||||
integer i, res
|
||||
type(mytype) :: var
|
||||
|
||||
var%a = 0
|
||||
var%b = 1
|
||||
var%c(:) = 10
|
||||
var%in%d(:) = 100
|
||||
|
||||
var%c(:) = 10
|
||||
|
||||
!$acc enter data copyin(var)
|
||||
|
||||
!$acc parallel loop present(var)
|
||||
do i = 1, 1
|
||||
var%a = var%b
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc update host(var%a)
|
||||
|
||||
if (var%a /= var%b) stop 12
|
||||
|
||||
var%b = 100
|
||||
|
||||
!$acc update device(var%b)
|
||||
|
||||
!$acc parallel loop present(var)
|
||||
do i = 1, 1
|
||||
var%a = var%b
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc update host(var%a)
|
||||
|
||||
if (var%a /= var%b) stop 13
|
||||
|
||||
!$acc parallel loop present (var)
|
||||
do i = 1, n
|
||||
var%c(i) = i
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc update host(var%c)
|
||||
|
||||
var%a = -1
|
||||
|
||||
do i = 1, n
|
||||
if (var%c(i) /= i) stop 14
|
||||
var%c(i) = var%a
|
||||
end do
|
||||
|
||||
!$acc update device(var%a)
|
||||
!$acc update device(var%c)
|
||||
|
||||
res = 0
|
||||
|
||||
!$acc parallel loop present(var) reduction(+:res)
|
||||
do i = 1, n
|
||||
if (var%c(i) /= var%a) res = res + 1
|
||||
end do
|
||||
|
||||
if (res /= 0) stop 15
|
||||
|
||||
var%c(:) = 0
|
||||
|
||||
!$acc update device(var%c)
|
||||
|
||||
!$acc parallel loop present(var)
|
||||
do i = 5, 5
|
||||
var%c(i) = 1
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc update host(var%c(5))
|
||||
|
||||
do i = 1, n
|
||||
if (i /= 5 .and. var%c(i) /= 0) stop 16
|
||||
if (i == 5 .and. var%c(i) /= 1) stop 17
|
||||
end do
|
||||
|
||||
!$acc parallel loop present(var)
|
||||
do i = 1, n
|
||||
var%in%d = var%a
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc update host(var%in%d)
|
||||
|
||||
do i = 1, n
|
||||
if (var%in%d(i) /= var%a) stop 18
|
||||
end do
|
||||
|
||||
var%c(:) = 0
|
||||
|
||||
!$acc update device(var%c)
|
||||
|
||||
var%c(:) = -1
|
||||
|
||||
!$acc parallel loop present(var)
|
||||
do i = n/2, n
|
||||
var%c(i) = i
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc update host(var%c(n/2:n))
|
||||
|
||||
do i = 1,n
|
||||
if (i < n/2 .and. var%c(i) /= -1) stop 19
|
||||
if (i >= n/2 .and. var%c(i) /= i) stop 20
|
||||
end do
|
||||
|
||||
var%in%d(:) = 0
|
||||
!$acc update device(var%in%d)
|
||||
|
||||
!$acc parallel loop present(var)
|
||||
do i = 5, 5
|
||||
var%in%d(i) = 1
|
||||
end do
|
||||
!$acc end parallel loop
|
||||
|
||||
!$acc update host(var%in%d(5))
|
||||
|
||||
do i = 1, n
|
||||
if (i /= 5 .and. var%in%d(i) /= 0) stop 21
|
||||
if (i == 5 .and. var%in%d(i) /= 1) stop 22
|
||||
end do
|
||||
|
||||
!$acc exit data delete(var)
|
||||
end subroutine derived_acc_subroutine
|
Loading…
Reference in New Issue
Block a user