mirror of
https://github.com/sfilippone/psblas3.git
synced 2026-10-20 04:42:08 +00:00
Fix memory traffic in GTH/SCT
This commit is contained in:
@@ -425,7 +425,6 @@ contains
|
|||||||
class is (psb_i_vect_oacc)
|
class is (psb_i_vect_oacc)
|
||||||
if (ii%is_host()) call ii%sync()
|
if (ii%is_host()) call ii%sync()
|
||||||
if (y%is_host()) call y%sync()
|
if (y%is_host()) call y%sync()
|
||||||
!$acc update device(y%combuf)
|
|
||||||
call inner_sctb(n,y%combuf(i:i+n-1),beta,y%v,ii%v(i:i+n-1))
|
call inner_sctb(n,y%combuf(i:i+n-1),beta,y%v,ii%v(i:i+n-1))
|
||||||
call y%set_dev()
|
call y%set_dev()
|
||||||
acc_done = .true.
|
acc_done = .true.
|
||||||
@@ -444,6 +443,7 @@ contains
|
|||||||
integer(psb_ipk_) :: n, idx(:)
|
integer(psb_ipk_) :: n, idx(:)
|
||||||
complex(psb_spk_) :: beta,x(:), y(:)
|
complex(psb_spk_) :: beta,x(:), y(:)
|
||||||
integer(psb_ipk_) :: k
|
integer(psb_ipk_) :: k
|
||||||
|
!$acc update device(x(1:n)) async
|
||||||
!$acc parallel loop
|
!$acc parallel loop
|
||||||
do k = 1, n
|
do k = 1, n
|
||||||
y(idx(k)) = x(k) + beta *y(idx(k))
|
y(idx(k)) = x(k) + beta *y(idx(k))
|
||||||
@@ -488,6 +488,7 @@ contains
|
|||||||
integer(psb_ipk_) :: n, idx(:)
|
integer(psb_ipk_) :: n, idx(:)
|
||||||
complex(psb_spk_) :: beta, x(:), y(:)
|
complex(psb_spk_) :: beta, x(:), y(:)
|
||||||
integer(psb_ipk_) :: k
|
integer(psb_ipk_) :: k
|
||||||
|
!$acc update device(x(1:n)) async
|
||||||
!$acc parallel loop
|
!$acc parallel loop
|
||||||
do k = 1, n
|
do k = 1, n
|
||||||
y(idx(k)) = x(k) + beta *y(idx(k))
|
y(idx(k)) = x(k) + beta *y(idx(k))
|
||||||
@@ -561,7 +562,7 @@ contains
|
|||||||
y(k) = x(idx(k))
|
y(k) = x(idx(k))
|
||||||
end do
|
end do
|
||||||
!$acc end parallel loop
|
!$acc end parallel loop
|
||||||
!$acc update self(y)
|
!$acc update self(y(1:n)) async
|
||||||
end subroutine inner_gth
|
end subroutine inner_gth
|
||||||
end subroutine c_oacc_gthzbuf
|
end subroutine c_oacc_gthzbuf
|
||||||
|
|
||||||
@@ -605,7 +606,7 @@ contains
|
|||||||
y(k) = x(idx(k))
|
y(k) = x(idx(k))
|
||||||
end do
|
end do
|
||||||
!$acc end parallel loop
|
!$acc end parallel loop
|
||||||
!$acc update self(y)
|
!$acc update self(y(1:n)) async
|
||||||
end subroutine inner_gth
|
end subroutine inner_gth
|
||||||
end subroutine c_oacc_gthzv_x
|
end subroutine c_oacc_gthzv_x
|
||||||
|
|
||||||
|
|||||||
@@ -425,7 +425,6 @@ contains
|
|||||||
class is (psb_i_vect_oacc)
|
class is (psb_i_vect_oacc)
|
||||||
if (ii%is_host()) call ii%sync()
|
if (ii%is_host()) call ii%sync()
|
||||||
if (y%is_host()) call y%sync()
|
if (y%is_host()) call y%sync()
|
||||||
!$acc update device(y%combuf)
|
|
||||||
call inner_sctb(n,y%combuf(i:i+n-1),beta,y%v,ii%v(i:i+n-1))
|
call inner_sctb(n,y%combuf(i:i+n-1),beta,y%v,ii%v(i:i+n-1))
|
||||||
call y%set_dev()
|
call y%set_dev()
|
||||||
acc_done = .true.
|
acc_done = .true.
|
||||||
@@ -444,6 +443,7 @@ contains
|
|||||||
integer(psb_ipk_) :: n, idx(:)
|
integer(psb_ipk_) :: n, idx(:)
|
||||||
real(psb_dpk_) :: beta,x(:), y(:)
|
real(psb_dpk_) :: beta,x(:), y(:)
|
||||||
integer(psb_ipk_) :: k
|
integer(psb_ipk_) :: k
|
||||||
|
!$acc update device(x(1:n)) async
|
||||||
!$acc parallel loop
|
!$acc parallel loop
|
||||||
do k = 1, n
|
do k = 1, n
|
||||||
y(idx(k)) = x(k) + beta *y(idx(k))
|
y(idx(k)) = x(k) + beta *y(idx(k))
|
||||||
@@ -488,6 +488,7 @@ contains
|
|||||||
integer(psb_ipk_) :: n, idx(:)
|
integer(psb_ipk_) :: n, idx(:)
|
||||||
real(psb_dpk_) :: beta, x(:), y(:)
|
real(psb_dpk_) :: beta, x(:), y(:)
|
||||||
integer(psb_ipk_) :: k
|
integer(psb_ipk_) :: k
|
||||||
|
!$acc update device(x(1:n)) async
|
||||||
!$acc parallel loop
|
!$acc parallel loop
|
||||||
do k = 1, n
|
do k = 1, n
|
||||||
y(idx(k)) = x(k) + beta *y(idx(k))
|
y(idx(k)) = x(k) + beta *y(idx(k))
|
||||||
@@ -561,7 +562,7 @@ contains
|
|||||||
y(k) = x(idx(k))
|
y(k) = x(idx(k))
|
||||||
end do
|
end do
|
||||||
!$acc end parallel loop
|
!$acc end parallel loop
|
||||||
!$acc update self(y)
|
!$acc update self(y(1:n)) async
|
||||||
end subroutine inner_gth
|
end subroutine inner_gth
|
||||||
end subroutine d_oacc_gthzbuf
|
end subroutine d_oacc_gthzbuf
|
||||||
|
|
||||||
@@ -605,7 +606,7 @@ contains
|
|||||||
y(k) = x(idx(k))
|
y(k) = x(idx(k))
|
||||||
end do
|
end do
|
||||||
!$acc end parallel loop
|
!$acc end parallel loop
|
||||||
!$acc update self(y)
|
!$acc update self(y(1:n)) async
|
||||||
end subroutine inner_gth
|
end subroutine inner_gth
|
||||||
end subroutine d_oacc_gthzv_x
|
end subroutine d_oacc_gthzv_x
|
||||||
|
|
||||||
|
|||||||
@@ -79,7 +79,6 @@ contains
|
|||||||
class is (psb_i_vect_oacc)
|
class is (psb_i_vect_oacc)
|
||||||
if (ii%is_host()) call ii%sync()
|
if (ii%is_host()) call ii%sync()
|
||||||
if (y%is_host()) call y%sync()
|
if (y%is_host()) call y%sync()
|
||||||
!$acc update device(y%combuf)
|
|
||||||
call inner_sctb(n,y%combuf(i:i+n-1),beta,y%v,ii%v(i:i+n-1))
|
call inner_sctb(n,y%combuf(i:i+n-1),beta,y%v,ii%v(i:i+n-1))
|
||||||
call y%set_dev()
|
call y%set_dev()
|
||||||
acc_done = .true.
|
acc_done = .true.
|
||||||
@@ -98,6 +97,7 @@ contains
|
|||||||
integer(psb_ipk_) :: n, idx(:)
|
integer(psb_ipk_) :: n, idx(:)
|
||||||
integer(psb_ipk_) :: beta,x(:), y(:)
|
integer(psb_ipk_) :: beta,x(:), y(:)
|
||||||
integer(psb_ipk_) :: k
|
integer(psb_ipk_) :: k
|
||||||
|
!$acc update device(x(1:n)) async
|
||||||
!$acc parallel loop
|
!$acc parallel loop
|
||||||
do k = 1, n
|
do k = 1, n
|
||||||
y(idx(k)) = x(k) + beta *y(idx(k))
|
y(idx(k)) = x(k) + beta *y(idx(k))
|
||||||
@@ -142,6 +142,7 @@ contains
|
|||||||
integer(psb_ipk_) :: n, idx(:)
|
integer(psb_ipk_) :: n, idx(:)
|
||||||
integer(psb_ipk_) :: beta, x(:), y(:)
|
integer(psb_ipk_) :: beta, x(:), y(:)
|
||||||
integer(psb_ipk_) :: k
|
integer(psb_ipk_) :: k
|
||||||
|
!$acc update device(x(1:n)) async
|
||||||
!$acc parallel loop
|
!$acc parallel loop
|
||||||
do k = 1, n
|
do k = 1, n
|
||||||
y(idx(k)) = x(k) + beta *y(idx(k))
|
y(idx(k)) = x(k) + beta *y(idx(k))
|
||||||
@@ -215,7 +216,7 @@ contains
|
|||||||
y(k) = x(idx(k))
|
y(k) = x(idx(k))
|
||||||
end do
|
end do
|
||||||
!$acc end parallel loop
|
!$acc end parallel loop
|
||||||
!$acc update self(y)
|
!$acc update self(y(1:n)) async
|
||||||
end subroutine inner_gth
|
end subroutine inner_gth
|
||||||
end subroutine i_oacc_gthzbuf
|
end subroutine i_oacc_gthzbuf
|
||||||
|
|
||||||
@@ -259,7 +260,7 @@ contains
|
|||||||
y(k) = x(idx(k))
|
y(k) = x(idx(k))
|
||||||
end do
|
end do
|
||||||
!$acc end parallel loop
|
!$acc end parallel loop
|
||||||
!$acc update self(y)
|
!$acc update self(y(1:n)) async
|
||||||
end subroutine inner_gth
|
end subroutine inner_gth
|
||||||
end subroutine i_oacc_gthzv_x
|
end subroutine i_oacc_gthzv_x
|
||||||
|
|
||||||
|
|||||||
@@ -81,7 +81,6 @@ contains
|
|||||||
class is (psb_i_vect_oacc)
|
class is (psb_i_vect_oacc)
|
||||||
if (ii%is_host()) call ii%sync()
|
if (ii%is_host()) call ii%sync()
|
||||||
if (y%is_host()) call y%sync()
|
if (y%is_host()) call y%sync()
|
||||||
!$acc update device(y%combuf)
|
|
||||||
call inner_sctb(n,y%combuf(i:i+n-1),beta,y%v,ii%v(i:i+n-1))
|
call inner_sctb(n,y%combuf(i:i+n-1),beta,y%v,ii%v(i:i+n-1))
|
||||||
call y%set_dev()
|
call y%set_dev()
|
||||||
acc_done = .true.
|
acc_done = .true.
|
||||||
@@ -100,6 +99,7 @@ contains
|
|||||||
integer(psb_ipk_) :: n, idx(:)
|
integer(psb_ipk_) :: n, idx(:)
|
||||||
integer(psb_lpk_) :: beta,x(:), y(:)
|
integer(psb_lpk_) :: beta,x(:), y(:)
|
||||||
integer(psb_ipk_) :: k
|
integer(psb_ipk_) :: k
|
||||||
|
!$acc update device(x(1:n)) async
|
||||||
!$acc parallel loop
|
!$acc parallel loop
|
||||||
do k = 1, n
|
do k = 1, n
|
||||||
y(idx(k)) = x(k) + beta *y(idx(k))
|
y(idx(k)) = x(k) + beta *y(idx(k))
|
||||||
@@ -144,6 +144,7 @@ contains
|
|||||||
integer(psb_ipk_) :: n, idx(:)
|
integer(psb_ipk_) :: n, idx(:)
|
||||||
integer(psb_lpk_) :: beta, x(:), y(:)
|
integer(psb_lpk_) :: beta, x(:), y(:)
|
||||||
integer(psb_ipk_) :: k
|
integer(psb_ipk_) :: k
|
||||||
|
!$acc update device(x(1:n)) async
|
||||||
!$acc parallel loop
|
!$acc parallel loop
|
||||||
do k = 1, n
|
do k = 1, n
|
||||||
y(idx(k)) = x(k) + beta *y(idx(k))
|
y(idx(k)) = x(k) + beta *y(idx(k))
|
||||||
@@ -217,7 +218,7 @@ contains
|
|||||||
y(k) = x(idx(k))
|
y(k) = x(idx(k))
|
||||||
end do
|
end do
|
||||||
!$acc end parallel loop
|
!$acc end parallel loop
|
||||||
!$acc update self(y)
|
!$acc update self(y(1:n)) async
|
||||||
end subroutine inner_gth
|
end subroutine inner_gth
|
||||||
end subroutine l_oacc_gthzbuf
|
end subroutine l_oacc_gthzbuf
|
||||||
|
|
||||||
@@ -261,7 +262,7 @@ contains
|
|||||||
y(k) = x(idx(k))
|
y(k) = x(idx(k))
|
||||||
end do
|
end do
|
||||||
!$acc end parallel loop
|
!$acc end parallel loop
|
||||||
!$acc update self(y)
|
!$acc update self(y(1:n)) async
|
||||||
end subroutine inner_gth
|
end subroutine inner_gth
|
||||||
end subroutine l_oacc_gthzv_x
|
end subroutine l_oacc_gthzv_x
|
||||||
|
|
||||||
|
|||||||
@@ -425,7 +425,6 @@ contains
|
|||||||
class is (psb_i_vect_oacc)
|
class is (psb_i_vect_oacc)
|
||||||
if (ii%is_host()) call ii%sync()
|
if (ii%is_host()) call ii%sync()
|
||||||
if (y%is_host()) call y%sync()
|
if (y%is_host()) call y%sync()
|
||||||
!$acc update device(y%combuf)
|
|
||||||
call inner_sctb(n,y%combuf(i:i+n-1),beta,y%v,ii%v(i:i+n-1))
|
call inner_sctb(n,y%combuf(i:i+n-1),beta,y%v,ii%v(i:i+n-1))
|
||||||
call y%set_dev()
|
call y%set_dev()
|
||||||
acc_done = .true.
|
acc_done = .true.
|
||||||
@@ -444,6 +443,7 @@ contains
|
|||||||
integer(psb_ipk_) :: n, idx(:)
|
integer(psb_ipk_) :: n, idx(:)
|
||||||
real(psb_spk_) :: beta,x(:), y(:)
|
real(psb_spk_) :: beta,x(:), y(:)
|
||||||
integer(psb_ipk_) :: k
|
integer(psb_ipk_) :: k
|
||||||
|
!$acc update device(x(1:n)) async
|
||||||
!$acc parallel loop
|
!$acc parallel loop
|
||||||
do k = 1, n
|
do k = 1, n
|
||||||
y(idx(k)) = x(k) + beta *y(idx(k))
|
y(idx(k)) = x(k) + beta *y(idx(k))
|
||||||
@@ -488,6 +488,7 @@ contains
|
|||||||
integer(psb_ipk_) :: n, idx(:)
|
integer(psb_ipk_) :: n, idx(:)
|
||||||
real(psb_spk_) :: beta, x(:), y(:)
|
real(psb_spk_) :: beta, x(:), y(:)
|
||||||
integer(psb_ipk_) :: k
|
integer(psb_ipk_) :: k
|
||||||
|
!$acc update device(x(1:n)) async
|
||||||
!$acc parallel loop
|
!$acc parallel loop
|
||||||
do k = 1, n
|
do k = 1, n
|
||||||
y(idx(k)) = x(k) + beta *y(idx(k))
|
y(idx(k)) = x(k) + beta *y(idx(k))
|
||||||
@@ -561,7 +562,7 @@ contains
|
|||||||
y(k) = x(idx(k))
|
y(k) = x(idx(k))
|
||||||
end do
|
end do
|
||||||
!$acc end parallel loop
|
!$acc end parallel loop
|
||||||
!$acc update self(y)
|
!$acc update self(y(1:n)) async
|
||||||
end subroutine inner_gth
|
end subroutine inner_gth
|
||||||
end subroutine s_oacc_gthzbuf
|
end subroutine s_oacc_gthzbuf
|
||||||
|
|
||||||
@@ -605,7 +606,7 @@ contains
|
|||||||
y(k) = x(idx(k))
|
y(k) = x(idx(k))
|
||||||
end do
|
end do
|
||||||
!$acc end parallel loop
|
!$acc end parallel loop
|
||||||
!$acc update self(y)
|
!$acc update self(y(1:n)) async
|
||||||
end subroutine inner_gth
|
end subroutine inner_gth
|
||||||
end subroutine s_oacc_gthzv_x
|
end subroutine s_oacc_gthzv_x
|
||||||
|
|
||||||
|
|||||||
@@ -425,7 +425,6 @@ contains
|
|||||||
class is (psb_i_vect_oacc)
|
class is (psb_i_vect_oacc)
|
||||||
if (ii%is_host()) call ii%sync()
|
if (ii%is_host()) call ii%sync()
|
||||||
if (y%is_host()) call y%sync()
|
if (y%is_host()) call y%sync()
|
||||||
!$acc update device(y%combuf)
|
|
||||||
call inner_sctb(n,y%combuf(i:i+n-1),beta,y%v,ii%v(i:i+n-1))
|
call inner_sctb(n,y%combuf(i:i+n-1),beta,y%v,ii%v(i:i+n-1))
|
||||||
call y%set_dev()
|
call y%set_dev()
|
||||||
acc_done = .true.
|
acc_done = .true.
|
||||||
@@ -444,6 +443,7 @@ contains
|
|||||||
integer(psb_ipk_) :: n, idx(:)
|
integer(psb_ipk_) :: n, idx(:)
|
||||||
complex(psb_dpk_) :: beta,x(:), y(:)
|
complex(psb_dpk_) :: beta,x(:), y(:)
|
||||||
integer(psb_ipk_) :: k
|
integer(psb_ipk_) :: k
|
||||||
|
!$acc update device(x(1:n)) async
|
||||||
!$acc parallel loop
|
!$acc parallel loop
|
||||||
do k = 1, n
|
do k = 1, n
|
||||||
y(idx(k)) = x(k) + beta *y(idx(k))
|
y(idx(k)) = x(k) + beta *y(idx(k))
|
||||||
@@ -488,6 +488,7 @@ contains
|
|||||||
integer(psb_ipk_) :: n, idx(:)
|
integer(psb_ipk_) :: n, idx(:)
|
||||||
complex(psb_dpk_) :: beta, x(:), y(:)
|
complex(psb_dpk_) :: beta, x(:), y(:)
|
||||||
integer(psb_ipk_) :: k
|
integer(psb_ipk_) :: k
|
||||||
|
!$acc update device(x(1:n)) async
|
||||||
!$acc parallel loop
|
!$acc parallel loop
|
||||||
do k = 1, n
|
do k = 1, n
|
||||||
y(idx(k)) = x(k) + beta *y(idx(k))
|
y(idx(k)) = x(k) + beta *y(idx(k))
|
||||||
@@ -561,7 +562,7 @@ contains
|
|||||||
y(k) = x(idx(k))
|
y(k) = x(idx(k))
|
||||||
end do
|
end do
|
||||||
!$acc end parallel loop
|
!$acc end parallel loop
|
||||||
!$acc update self(y)
|
!$acc update self(y(1:n)) async
|
||||||
end subroutine inner_gth
|
end subroutine inner_gth
|
||||||
end subroutine z_oacc_gthzbuf
|
end subroutine z_oacc_gthzbuf
|
||||||
|
|
||||||
@@ -605,7 +606,7 @@ contains
|
|||||||
y(k) = x(idx(k))
|
y(k) = x(idx(k))
|
||||||
end do
|
end do
|
||||||
!$acc end parallel loop
|
!$acc end parallel loop
|
||||||
!$acc update self(y)
|
!$acc update self(y(1:n)) async
|
||||||
end subroutine inner_gth
|
end subroutine inner_gth
|
||||||
end subroutine z_oacc_gthzv_x
|
end subroutine z_oacc_gthzv_x
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user