You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
835 B
Fortran
32 lines
835 B
Fortran
6 months ago
|
|
||
|
subroutine d_oacc_mlt_v(x, y, info)
|
||
|
use psb_d_oacc_vect_mod, psb_protect_name => d_oacc_mlt_v
|
||
|
|
||
|
implicit none
|
||
|
class(psb_d_base_vect_type), intent(inout) :: x
|
||
|
class(psb_d_vect_oacc), intent(inout) :: y
|
||
|
integer(psb_ipk_), intent(out) :: info
|
||
|
|
||
|
integer(psb_ipk_) :: i, n
|
||
|
|
||
|
info = 0
|
||
|
!!$ n = min(x%get_nrows(), y%get_nrows())
|
||
|
!!$ select type(xx => x)
|
||
|
!!$ type is (psb_d_base_vect_type)
|
||
|
!!$ if (y%is_dev()) call y%sync()
|
||
|
!!$ !$acc parallel loop
|
||
|
!!$ do i = 1, n
|
||
|
!!$ y%v(i) = y%v(i) * xx%v(i)
|
||
|
!!$ end do
|
||
|
!!$ call y%set_host()
|
||
|
!!$ class default
|
||
|
!!$ if (xx%is_dev()) call xx%sync()
|
||
|
!!$ if (y%is_dev()) call y%sync()
|
||
|
!!$ !$acc parallel loop
|
||
|
!!$ do i = 1, n
|
||
|
!!$ y%v(i) = y%v(i) * xx%v(i)
|
||
|
!!$ end do
|
||
|
!!$ call y%set_host()
|
||
|
!!$ end select
|
||
|
end subroutine d_oacc_mlt_v
|