mirror of
https://github.com/OpenMP/Examples.git
synced 2025-04-07 23:22:11 +01:00
38 lines
916 B
Fortran
38 lines
916 B
Fortran
! @@name: target_reverse_offload.1f
|
|
! @@type: F-free
|
|
! @@compilable: yes
|
|
! @@linkable: yes
|
|
! @@expect: success
|
|
|
|
!$omp requires reverse_offload
|
|
|
|
subroutine error_handler(wrong_value, index)
|
|
integer :: error_value,index
|
|
!$omp declare target device_type(host)
|
|
|
|
write( *,'("Error in offload: A(",i3,")=",i3)' ) index,wrong_value
|
|
write( *,'(" Expecting: A( i)= i")' )
|
|
stop
|
|
!!output: Error in offload: A( 99)= -1
|
|
!! Expecting: A( i)= i
|
|
end subroutine
|
|
|
|
program rev_off
|
|
use omp_lib
|
|
integer, parameter :: N=100
|
|
integer :: A(N) = (/ (i, i=1,100) /)
|
|
|
|
A(N-1)=-1
|
|
|
|
!$omp target map(A)
|
|
do i=1,N
|
|
if (A(i) /= i) then
|
|
!$omp omp target device(ancestor: 1) map(always,to :A(i))
|
|
call error_handler(A(i), i)
|
|
!$omp omp end target
|
|
endif
|
|
end do
|
|
!$omp end target
|
|
|
|
end program
|