Now oacc_vect compiles cleanly

oacc_loloum
sfilippone 3 months ago
parent 3bb05fab54
commit a81d1d9b68

@ -20,7 +20,7 @@ CINCLUDES=
# Source files # Source files
FOBJS= psb_i_oacc_vect_mod.o psb_d_oacc_vect_mod.o \ FOBJS= psb_i_oacc_vect_mod.o psb_d_oacc_vect_mod.o \
psb_oacc_mod.o psb_d_oacc_csr_mat_mod.o psb_oacc_mod.o psb_d_oacc_csr_mat_mod.o \
psb_oacc_env_mod.o psb_oacc_env_mod.o
# Library name # Library name
@ -43,7 +43,7 @@ ilib: $(OBJS)
$(MAKE) -C impl lib $(MAKE) -C impl lib
psb_oacc_mod.o : psb_i_oacc_vect_mod.o psb_d_oacc_vect_mod.o \ psb_oacc_mod.o : psb_i_oacc_vect_mod.o psb_d_oacc_vect_mod.o \
psb_d_oacc_csr_mat_mod.o psb_d_oacc_csr_mat_mod.o psb_oacc_env_mod.o
clean: cclean iclean clean: cclean iclean
/bin/rm -f $(FOBJS) *$(.mod) *.a /bin/rm -f $(FOBJS) *$(.mod) *.a

@ -10,22 +10,22 @@ subroutine d_oacc_mlt_v(x, y, info)
integer(psb_ipk_) :: i, n integer(psb_ipk_) :: i, n
info = 0 info = 0
!!$ n = min(x%get_nrows(), y%get_nrows()) n = min(x%get_nrows(), y%get_nrows())
!!$ select type(xx => x) select type(xx => x)
!!$ type is (psb_d_base_vect_type) class is (psb_d_vect_oacc)
!!$ if (y%is_dev()) call y%sync() if (y%is_host()) call y%sync()
!!$ !$acc parallel loop if (xx%is_host()) call xx%sync()
!!$ do i = 1, n !$acc parallel loop
!!$ y%v(i) = y%v(i) * xx%v(i) do i = 1, n
!!$ end do y%v(i) = y%v(i) * xx%v(i)
!!$ call y%set_host() end do
!!$ class default call y%set_dev()
!!$ if (xx%is_dev()) call xx%sync() class default
!!$ if (y%is_dev()) call y%sync() if (xx%is_dev()) call xx%sync()
!!$ !$acc parallel loop if (y%is_dev()) call y%sync()
!!$ do i = 1, n do i = 1, n
!!$ y%v(i) = y%v(i) * xx%v(i) y%v(i) = y%v(i) * xx%v(i)
!!$ end do end do
!!$ call y%set_host() call y%set_host()
!!$ end select end select
end subroutine d_oacc_mlt_v end subroutine d_oacc_mlt_v

@ -19,37 +19,35 @@ subroutine d_oacc_mlt_v_2(alpha, x, y, beta, z, info, conjgx, conjgy)
n = min(x%get_nrows(), y%get_nrows(), z%get_nrows()) n = min(x%get_nrows(), y%get_nrows(), z%get_nrows())
info = 0 info = 0
!!$ select type(xx => x) select type(xx => x)
!!$ class is (psb_d_vect_oacc) class is (psb_d_vect_oacc)
!!$ select type (yy => y) select type (yy => y)
!!$ class is (psb_d_vect_oacc) class is (psb_d_vect_oacc)
!!$ if (xx%is_host()) call xx%sync_space() if (xx%is_host()) call xx%sync()
!!$ if (yy%is_host()) call yy%sync_space() if (yy%is_host()) call yy%sync()
!!$ if ((beta /= dzero) .and. (z%is_host())) call z%sync_space() if ((beta /= dzero) .and. (z%is_host())) call z%sync()
!!$ !$acc parallel loop !$acc parallel loop
!!$ do i = 1, n do i = 1, n
!!$ z%v(i) = alpha * xx%v(i) * yy%v(i) + beta * z%v(i) z%v(i) = alpha * xx%v(i) * yy%v(i) + beta * z%v(i)
!!$ end do end do
!!$ call z%set_dev() call z%set_dev()
!!$ class default class default
!!$ if (xx%is_dev()) call xx%sync_space() if (xx%is_dev()) call xx%sync()
!!$ if (yy%is_dev()) call yy%sync() if (yy%is_dev()) call yy%sync()
!!$ if ((beta /= dzero) .and. (z%is_dev())) call z%sync_space() if ((beta /= dzero) .and. (z%is_dev())) call z%sync()
!!$ !$acc parallel loop do i = 1, n
!!$ do i = 1, n z%v(i) = alpha * xx%v(i) * yy%v(i) + beta * z%v(i)
!!$ z%v(i) = alpha * xx%v(i) * yy%v(i) + beta * z%v(i) end do
!!$ end do call z%set_host()
!!$ call z%set_host() end select
!!$ end select class default
!!$ class default if (x%is_dev()) call x%sync()
!!$ if (x%is_dev()) call x%sync() if (y%is_dev()) call y%sync()
!!$ if (y%is_dev()) call y%sync() if ((beta /= dzero) .and. (z%is_dev())) call z%sync()
!!$ if ((beta /= dzero) .and. (z%is_dev())) call z%sync_space() do i = 1, n
!!$ !$acc parallel loop z%v(i) = alpha * x%v(i) * y%v(i) + beta * z%v(i)
!!$ do i = 1, n end do
!!$ z%v(i) = alpha * x%v(i) * y%v(i) + beta * z%v(i) call z%set_host()
!!$ end do end select
!!$ call z%set_host()
!!$ end select
end subroutine d_oacc_mlt_v_2 end subroutine d_oacc_mlt_v_2

Loading…
Cancel
Save