|
|
@ -29,18 +29,18 @@
|
|
|
|
! POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
! POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
!
|
|
|
|
!
|
|
|
|
|
|
|
|
|
|
|
|
subroutine psb_c_dnsg_vect_mv(alpha,a,x,beta,y,info,trans)
|
|
|
|
subroutine psb_c_cuda_dnsg_vect_mv(alpha,a,x,beta,y,info,trans)
|
|
|
|
use psb_base_mod
|
|
|
|
use psb_base_mod
|
|
|
|
use psb_c_gpu_vect_mod
|
|
|
|
use psb_c_cuda_vect_mod
|
|
|
|
#ifdef HAVE_SPGPU
|
|
|
|
#ifdef HAVE_SPGPU
|
|
|
|
use dnsdev_mod
|
|
|
|
use dnsdev_mod
|
|
|
|
use psb_c_vectordev_mod
|
|
|
|
use psb_c_vectordev_mod
|
|
|
|
use psb_c_dnsg_mat_mod, psb_protect_name => psb_c_dnsg_vect_mv
|
|
|
|
use psb_c_cuda_dnsg_mat_mod, psb_protect_name => psb_c_cuda_dnsg_vect_mv
|
|
|
|
#else
|
|
|
|
#else
|
|
|
|
use psb_c_dnsg_mat_mod
|
|
|
|
use psb_c_cuda_dnsg_mat_mod
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
implicit none
|
|
|
|
implicit none
|
|
|
|
class(psb_c_dnsg_sparse_mat), intent(in) :: a
|
|
|
|
class(psb_c_cuda_dnsg_sparse_mat), intent(in) :: a
|
|
|
|
complex(psb_spk_), intent(in) :: alpha, beta
|
|
|
|
complex(psb_spk_), intent(in) :: alpha, beta
|
|
|
|
class(psb_c_base_vect_type), intent(inout) :: x
|
|
|
|
class(psb_c_base_vect_type), intent(inout) :: x
|
|
|
|
class(psb_c_base_vect_type), intent(inout) :: y
|
|
|
|
class(psb_c_base_vect_type), intent(inout) :: y
|
|
|
@ -50,7 +50,7 @@ subroutine psb_c_dnsg_vect_mv(alpha,a,x,beta,y,info,trans)
|
|
|
|
character :: trans_
|
|
|
|
character :: trans_
|
|
|
|
complex(psb_spk_), allocatable :: rx(:), ry(:)
|
|
|
|
complex(psb_spk_), allocatable :: rx(:), ry(:)
|
|
|
|
Integer(Psb_ipk_) :: err_act, m, n, k
|
|
|
|
Integer(Psb_ipk_) :: err_act, m, n, k
|
|
|
|
character(len=20) :: name='c_dnsg_vect_mv'
|
|
|
|
character(len=20) :: name='c_cuda_dnsg_vect_mv'
|
|
|
|
|
|
|
|
|
|
|
|
call psb_erractionsave(err_act)
|
|
|
|
call psb_erractionsave(err_act)
|
|
|
|
info = psb_success_
|
|
|
|
info = psb_success_
|
|
|
@ -76,9 +76,9 @@ subroutine psb_c_dnsg_vect_mv(alpha,a,x,beta,y,info,trans)
|
|
|
|
k = a%get_nrows()
|
|
|
|
k = a%get_nrows()
|
|
|
|
end if
|
|
|
|
end if
|
|
|
|
select type (xx => x)
|
|
|
|
select type (xx => x)
|
|
|
|
type is (psb_c_vect_gpu)
|
|
|
|
type is (psb_c_vect_cuda)
|
|
|
|
select type(yy => y)
|
|
|
|
select type(yy => y)
|
|
|
|
type is (psb_c_vect_gpu)
|
|
|
|
type is (psb_c_vect_cuda)
|
|
|
|
if (a%is_host()) call a%sync()
|
|
|
|
if (a%is_host()) call a%sync()
|
|
|
|
if (xx%is_host()) call xx%sync()
|
|
|
|
if (xx%is_host()) call xx%sync()
|
|
|
|
if (beta /= czero) then
|
|
|
|
if (beta /= czero) then
|
|
|
@ -117,21 +117,21 @@ subroutine psb_c_dnsg_vect_mv(alpha,a,x,beta,y,info,trans)
|
|
|
|
|
|
|
|
|
|
|
|
return
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
end subroutine psb_c_dnsg_vect_mv
|
|
|
|
end subroutine psb_c_cuda_dnsg_vect_mv
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
subroutine psb_c_dnsg_mold(a,b,info)
|
|
|
|
subroutine psb_c_cuda_dnsg_mold(a,b,info)
|
|
|
|
use psb_base_mod
|
|
|
|
use psb_base_mod
|
|
|
|
use psb_c_gpu_vect_mod
|
|
|
|
use psb_c_cuda_vect_mod
|
|
|
|
#ifdef HAVE_SPGPU
|
|
|
|
#ifdef HAVE_SPGPU
|
|
|
|
use dnsdev_mod
|
|
|
|
use dnsdev_mod
|
|
|
|
use psb_c_vectordev_mod
|
|
|
|
use psb_c_vectordev_mod
|
|
|
|
use psb_c_dnsg_mat_mod, psb_protect_name => psb_c_dnsg_mold
|
|
|
|
use psb_c_cuda_dnsg_mat_mod, psb_protect_name => psb_c_cuda_dnsg_mold
|
|
|
|
#else
|
|
|
|
#else
|
|
|
|
use psb_c_dnsg_mat_mod
|
|
|
|
use psb_c_cuda_dnsg_mat_mod
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
implicit none
|
|
|
|
implicit none
|
|
|
|
class(psb_c_dnsg_sparse_mat), intent(in) :: a
|
|
|
|
class(psb_c_cuda_dnsg_sparse_mat), intent(in) :: a
|
|
|
|
class(psb_c_base_sparse_mat), intent(inout), allocatable :: b
|
|
|
|
class(psb_c_base_sparse_mat), intent(inout), allocatable :: b
|
|
|
|
integer(psb_ipk_), intent(out) :: info
|
|
|
|
integer(psb_ipk_), intent(out) :: info
|
|
|
|
Integer(Psb_ipk_) :: err_act
|
|
|
|
Integer(Psb_ipk_) :: err_act
|
|
|
@ -145,7 +145,7 @@ subroutine psb_c_dnsg_mold(a,b,info)
|
|
|
|
call b%free()
|
|
|
|
call b%free()
|
|
|
|
deallocate(b,stat=info)
|
|
|
|
deallocate(b,stat=info)
|
|
|
|
end if
|
|
|
|
end if
|
|
|
|
if (info == 0) allocate(psb_c_dnsg_sparse_mat :: b, stat=info)
|
|
|
|
if (info == 0) allocate(psb_c_cuda_dnsg_sparse_mat :: b, stat=info)
|
|
|
|
|
|
|
|
|
|
|
|
if (info /= psb_success_) then
|
|
|
|
if (info /= psb_success_) then
|
|
|
|
info = psb_err_alloc_dealloc_
|
|
|
|
info = psb_err_alloc_dealloc_
|
|
|
@ -158,54 +158,54 @@ subroutine psb_c_dnsg_mold(a,b,info)
|
|
|
|
|
|
|
|
|
|
|
|
return
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
end subroutine psb_c_dnsg_mold
|
|
|
|
end subroutine psb_c_cuda_dnsg_mold
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!!$
|
|
|
|
!!$
|
|
|
|
!!$ interface
|
|
|
|
!!$ interface
|
|
|
|
!!$ subroutine psb_c_dnsg_inner_vect_sv(alpha,a,x,beta,y,info,trans)
|
|
|
|
!!$ subroutine psb_c_cuda_dnsg_inner_vect_sv(alpha,a,x,beta,y,info,trans)
|
|
|
|
!!$ import :: psb_ipk_, psb_c_dnsg_sparse_mat, psb_spk_, psb_c_base_vect_type
|
|
|
|
!!$ import :: psb_ipk_, psb_c_cuda_dnsg_sparse_mat, psb_spk_, psb_c_base_vect_type
|
|
|
|
!!$ class(psb_c_dnsg_sparse_mat), intent(in) :: a
|
|
|
|
!!$ class(psb_c_cuda_dnsg_sparse_mat), intent(in) :: a
|
|
|
|
!!$ complex(psb_spk_), intent(in) :: alpha, beta
|
|
|
|
!!$ complex(psb_spk_), intent(in) :: alpha, beta
|
|
|
|
!!$ class(psb_c_base_vect_type), intent(inout) :: x, y
|
|
|
|
!!$ class(psb_c_base_vect_type), intent(inout) :: x, y
|
|
|
|
!!$ integer(psb_ipk_), intent(out) :: info
|
|
|
|
!!$ integer(psb_ipk_), intent(out) :: info
|
|
|
|
!!$ character, optional, intent(in) :: trans
|
|
|
|
!!$ character, optional, intent(in) :: trans
|
|
|
|
!!$ end subroutine psb_c_dnsg_inner_vect_sv
|
|
|
|
!!$ end subroutine psb_c_cuda_dnsg_inner_vect_sv
|
|
|
|
!!$ end interface
|
|
|
|
!!$ end interface
|
|
|
|
|
|
|
|
|
|
|
|
!!$ interface
|
|
|
|
!!$ interface
|
|
|
|
!!$ subroutine psb_c_dnsg_reallocate_nz(nz,a)
|
|
|
|
!!$ subroutine psb_c_cuda_dnsg_reallocate_nz(nz,a)
|
|
|
|
!!$ import :: psb_c_dnsg_sparse_mat, psb_ipk_
|
|
|
|
!!$ import :: psb_c_cuda_dnsg_sparse_mat, psb_ipk_
|
|
|
|
!!$ integer(psb_ipk_), intent(in) :: nz
|
|
|
|
!!$ integer(psb_ipk_), intent(in) :: nz
|
|
|
|
!!$ class(psb_c_dnsg_sparse_mat), intent(inout) :: a
|
|
|
|
!!$ class(psb_c_cuda_dnsg_sparse_mat), intent(inout) :: a
|
|
|
|
!!$ end subroutine psb_c_dnsg_reallocate_nz
|
|
|
|
!!$ end subroutine psb_c_cuda_dnsg_reallocate_nz
|
|
|
|
!!$ end interface
|
|
|
|
!!$ end interface
|
|
|
|
!!$
|
|
|
|
!!$
|
|
|
|
!!$ interface
|
|
|
|
!!$ interface
|
|
|
|
!!$ subroutine psb_c_dnsg_allocate_mnnz(m,n,a,nz)
|
|
|
|
!!$ subroutine psb_c_cuda_dnsg_allocate_mnnz(m,n,a,nz)
|
|
|
|
!!$ import :: psb_c_dnsg_sparse_mat, psb_ipk_
|
|
|
|
!!$ import :: psb_c_cuda_dnsg_sparse_mat, psb_ipk_
|
|
|
|
!!$ integer(psb_ipk_), intent(in) :: m,n
|
|
|
|
!!$ integer(psb_ipk_), intent(in) :: m,n
|
|
|
|
!!$ class(psb_c_dnsg_sparse_mat), intent(inout) :: a
|
|
|
|
!!$ class(psb_c_cuda_dnsg_sparse_mat), intent(inout) :: a
|
|
|
|
!!$ integer(psb_ipk_), intent(in), optional :: nz
|
|
|
|
!!$ integer(psb_ipk_), intent(in), optional :: nz
|
|
|
|
!!$ end subroutine psb_c_dnsg_allocate_mnnz
|
|
|
|
!!$ end subroutine psb_c_cuda_dnsg_allocate_mnnz
|
|
|
|
!!$ end interface
|
|
|
|
!!$ end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
subroutine psb_c_dnsg_to_gpu(a,info)
|
|
|
|
subroutine psb_c_cuda_dnsg_to_gpu(a,info)
|
|
|
|
use psb_base_mod
|
|
|
|
use psb_base_mod
|
|
|
|
use psb_c_gpu_vect_mod
|
|
|
|
use psb_c_cuda_vect_mod
|
|
|
|
#ifdef HAVE_SPGPU
|
|
|
|
#ifdef HAVE_SPGPU
|
|
|
|
use dnsdev_mod
|
|
|
|
use dnsdev_mod
|
|
|
|
use psb_c_vectordev_mod
|
|
|
|
use psb_c_vectordev_mod
|
|
|
|
use psb_c_dnsg_mat_mod, psb_protect_name => psb_c_dnsg_to_gpu
|
|
|
|
use psb_c_cuda_dnsg_mat_mod, psb_protect_name => psb_c_cuda_dnsg_to_gpu
|
|
|
|
#else
|
|
|
|
#else
|
|
|
|
use psb_c_dnsg_mat_mod
|
|
|
|
use psb_c_cuda_dnsg_mat_mod
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
class(psb_c_dnsg_sparse_mat), intent(inout) :: a
|
|
|
|
class(psb_c_cuda_dnsg_sparse_mat), intent(inout) :: a
|
|
|
|
integer(psb_ipk_), intent(out) :: info
|
|
|
|
integer(psb_ipk_), intent(out) :: info
|
|
|
|
Integer(Psb_ipk_) :: err_act, pitch, lda
|
|
|
|
Integer(Psb_ipk_) :: err_act, pitch, lda
|
|
|
|
logical, parameter :: debug=.false.
|
|
|
|
logical, parameter :: debug=.false.
|
|
|
|
character(len=20) :: name='c_dnsg_to_gpu'
|
|
|
|
character(len=20) :: name='c_cuda_dnsg_to_gpu'
|
|
|
|
|
|
|
|
|
|
|
|
call psb_erractionsave(err_act)
|
|
|
|
call psb_erractionsave(err_act)
|
|
|
|
info = psb_success_
|
|
|
|
info = psb_success_
|
|
|
@ -226,27 +226,27 @@ subroutine psb_c_dnsg_to_gpu(a,info)
|
|
|
|
|
|
|
|
|
|
|
|
return
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
end subroutine psb_c_dnsg_to_gpu
|
|
|
|
end subroutine psb_c_cuda_dnsg_to_gpu
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
subroutine psb_c_cp_dnsg_from_coo(a,b,info)
|
|
|
|
subroutine psb_c_cuda_cp_dnsg_from_coo(a,b,info)
|
|
|
|
use psb_base_mod
|
|
|
|
use psb_base_mod
|
|
|
|
use psb_c_gpu_vect_mod
|
|
|
|
use psb_c_cuda_vect_mod
|
|
|
|
#ifdef HAVE_SPGPU
|
|
|
|
#ifdef HAVE_SPGPU
|
|
|
|
use dnsdev_mod
|
|
|
|
use dnsdev_mod
|
|
|
|
use psb_c_vectordev_mod
|
|
|
|
use psb_c_vectordev_mod
|
|
|
|
use psb_c_dnsg_mat_mod, psb_protect_name => psb_c_cp_dnsg_from_coo
|
|
|
|
use psb_c_cuda_dnsg_mat_mod, psb_protect_name => psb_c_cuda_cp_dnsg_from_coo
|
|
|
|
#else
|
|
|
|
#else
|
|
|
|
use psb_c_dnsg_mat_mod
|
|
|
|
use psb_c_cuda_dnsg_mat_mod
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
implicit none
|
|
|
|
implicit none
|
|
|
|
|
|
|
|
|
|
|
|
class(psb_c_dnsg_sparse_mat), intent(inout) :: a
|
|
|
|
class(psb_c_cuda_dnsg_sparse_mat), intent(inout) :: a
|
|
|
|
class(psb_c_coo_sparse_mat), intent(in) :: b
|
|
|
|
class(psb_c_coo_sparse_mat), intent(in) :: b
|
|
|
|
integer(psb_ipk_), intent(out) :: info
|
|
|
|
integer(psb_ipk_), intent(out) :: info
|
|
|
|
Integer(Psb_ipk_) :: err_act
|
|
|
|
Integer(Psb_ipk_) :: err_act
|
|
|
|
character(len=20) :: name='c_dnsg_cp_from_coo'
|
|
|
|
character(len=20) :: name='c_cuda_dnsg_cp_from_coo'
|
|
|
|
integer(psb_ipk_) :: debug_level, debug_unit
|
|
|
|
integer(psb_ipk_) :: debug_level, debug_unit
|
|
|
|
logical, parameter :: debug=.false.
|
|
|
|
logical, parameter :: debug=.false.
|
|
|
|
type(psb_c_coo_sparse_mat) :: tmp
|
|
|
|
type(psb_c_coo_sparse_mat) :: tmp
|
|
|
@ -267,27 +267,27 @@ subroutine psb_c_cp_dnsg_from_coo(a,b,info)
|
|
|
|
|
|
|
|
|
|
|
|
return
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
end subroutine psb_c_cp_dnsg_from_coo
|
|
|
|
end subroutine psb_c_cuda_cp_dnsg_from_coo
|
|
|
|
|
|
|
|
|
|
|
|
subroutine psb_c_cp_dnsg_from_fmt(a,b,info)
|
|
|
|
subroutine psb_c_cuda_cp_dnsg_from_fmt(a,b,info)
|
|
|
|
use psb_base_mod
|
|
|
|
use psb_base_mod
|
|
|
|
use psb_c_gpu_vect_mod
|
|
|
|
use psb_c_cuda_vect_mod
|
|
|
|
#ifdef HAVE_SPGPU
|
|
|
|
#ifdef HAVE_SPGPU
|
|
|
|
use dnsdev_mod
|
|
|
|
use dnsdev_mod
|
|
|
|
use psb_c_vectordev_mod
|
|
|
|
use psb_c_vectordev_mod
|
|
|
|
use psb_c_dnsg_mat_mod, psb_protect_name => psb_c_cp_dnsg_from_fmt
|
|
|
|
use psb_c_cuda_dnsg_mat_mod, psb_protect_name => psb_c_cuda_cp_dnsg_from_fmt
|
|
|
|
#else
|
|
|
|
#else
|
|
|
|
use psb_c_dnsg_mat_mod
|
|
|
|
use psb_c_cuda_dnsg_mat_mod
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
implicit none
|
|
|
|
implicit none
|
|
|
|
|
|
|
|
|
|
|
|
class(psb_c_dnsg_sparse_mat), intent(inout) :: a
|
|
|
|
class(psb_c_cuda_dnsg_sparse_mat), intent(inout) :: a
|
|
|
|
class(psb_c_base_sparse_mat), intent(in) :: b
|
|
|
|
class(psb_c_base_sparse_mat), intent(in) :: b
|
|
|
|
integer(psb_ipk_), intent(out) :: info
|
|
|
|
integer(psb_ipk_), intent(out) :: info
|
|
|
|
|
|
|
|
|
|
|
|
type(psb_c_coo_sparse_mat) :: tmp
|
|
|
|
type(psb_c_coo_sparse_mat) :: tmp
|
|
|
|
Integer(Psb_ipk_) :: err_act
|
|
|
|
Integer(Psb_ipk_) :: err_act
|
|
|
|
character(len=20) :: name='c_dnsg_cp_from_fmt'
|
|
|
|
character(len=20) :: name='c_cuda_dnsg_cp_from_fmt'
|
|
|
|
|
|
|
|
|
|
|
|
call psb_erractionsave(err_act)
|
|
|
|
call psb_erractionsave(err_act)
|
|
|
|
info = psb_success_
|
|
|
|
info = psb_success_
|
|
|
@ -341,29 +341,29 @@ subroutine psb_c_cp_dnsg_from_fmt(a,b,info)
|
|
|
|
|
|
|
|
|
|
|
|
return
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
end subroutine psb_c_cp_dnsg_from_fmt
|
|
|
|
end subroutine psb_c_cuda_cp_dnsg_from_fmt
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
subroutine psb_c_mv_dnsg_from_coo(a,b,info)
|
|
|
|
subroutine psb_c_cuda_mv_dnsg_from_coo(a,b,info)
|
|
|
|
use psb_base_mod
|
|
|
|
use psb_base_mod
|
|
|
|
use psb_c_gpu_vect_mod
|
|
|
|
use psb_c_cuda_vect_mod
|
|
|
|
#ifdef HAVE_SPGPU
|
|
|
|
#ifdef HAVE_SPGPU
|
|
|
|
use dnsdev_mod
|
|
|
|
use dnsdev_mod
|
|
|
|
use psb_c_vectordev_mod
|
|
|
|
use psb_c_vectordev_mod
|
|
|
|
use psb_c_dnsg_mat_mod, psb_protect_name => psb_c_mv_dnsg_from_coo
|
|
|
|
use psb_c_cuda_dnsg_mat_mod, psb_protect_name => psb_c_cuda_mv_dnsg_from_coo
|
|
|
|
#else
|
|
|
|
#else
|
|
|
|
use psb_c_dnsg_mat_mod
|
|
|
|
use psb_c_cuda_dnsg_mat_mod
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
implicit none
|
|
|
|
implicit none
|
|
|
|
|
|
|
|
|
|
|
|
class(psb_c_dnsg_sparse_mat), intent(inout) :: a
|
|
|
|
class(psb_c_cuda_dnsg_sparse_mat), intent(inout) :: a
|
|
|
|
class(psb_c_coo_sparse_mat), intent(inout) :: b
|
|
|
|
class(psb_c_coo_sparse_mat), intent(inout) :: b
|
|
|
|
integer(psb_ipk_), intent(out) :: info
|
|
|
|
integer(psb_ipk_), intent(out) :: info
|
|
|
|
|
|
|
|
|
|
|
|
Integer(Psb_ipk_) :: err_act
|
|
|
|
Integer(Psb_ipk_) :: err_act
|
|
|
|
logical, parameter :: debug=.false.
|
|
|
|
logical, parameter :: debug=.false.
|
|
|
|
character(len=20) :: name='c_dnsg_mv_from_coo'
|
|
|
|
character(len=20) :: name='c_cuda_dnsg_mv_from_coo'
|
|
|
|
|
|
|
|
|
|
|
|
call psb_erractionsave(err_act)
|
|
|
|
call psb_erractionsave(err_act)
|
|
|
|
info = psb_success_
|
|
|
|
info = psb_success_
|
|
|
@ -382,28 +382,28 @@ subroutine psb_c_mv_dnsg_from_coo(a,b,info)
|
|
|
|
|
|
|
|
|
|
|
|
return
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
end subroutine psb_c_mv_dnsg_from_coo
|
|
|
|
end subroutine psb_c_cuda_mv_dnsg_from_coo
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
subroutine psb_c_mv_dnsg_from_fmt(a,b,info)
|
|
|
|
subroutine psb_c_cuda_mv_dnsg_from_fmt(a,b,info)
|
|
|
|
use psb_base_mod
|
|
|
|
use psb_base_mod
|
|
|
|
use psb_c_gpu_vect_mod
|
|
|
|
use psb_c_cuda_vect_mod
|
|
|
|
#ifdef HAVE_SPGPU
|
|
|
|
#ifdef HAVE_SPGPU
|
|
|
|
use dnsdev_mod
|
|
|
|
use dnsdev_mod
|
|
|
|
use psb_c_vectordev_mod
|
|
|
|
use psb_c_vectordev_mod
|
|
|
|
use psb_c_dnsg_mat_mod, psb_protect_name => psb_c_mv_dnsg_from_fmt
|
|
|
|
use psb_c_cuda_dnsg_mat_mod, psb_protect_name => psb_c_cuda_mv_dnsg_from_fmt
|
|
|
|
#else
|
|
|
|
#else
|
|
|
|
use psb_c_dnsg_mat_mod
|
|
|
|
use psb_c_cuda_dnsg_mat_mod
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
implicit none
|
|
|
|
implicit none
|
|
|
|
class(psb_c_dnsg_sparse_mat), intent(inout) :: a
|
|
|
|
class(psb_c_cuda_dnsg_sparse_mat), intent(inout) :: a
|
|
|
|
class(psb_c_base_sparse_mat), intent(inout) :: b
|
|
|
|
class(psb_c_base_sparse_mat), intent(inout) :: b
|
|
|
|
integer(psb_ipk_), intent(out) :: info
|
|
|
|
integer(psb_ipk_), intent(out) :: info
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type(psb_c_coo_sparse_mat) :: tmp
|
|
|
|
type(psb_c_coo_sparse_mat) :: tmp
|
|
|
|
Integer(Psb_ipk_) :: err_act
|
|
|
|
Integer(Psb_ipk_) :: err_act
|
|
|
|
character(len=20) :: name='c_dnsg_cp_from_fmt'
|
|
|
|
character(len=20) :: name='c_cuda_dnsg_cp_from_fmt'
|
|
|
|
|
|
|
|
|
|
|
|
call psb_erractionsave(err_act)
|
|
|
|
call psb_erractionsave(err_act)
|
|
|
|
info = psb_success_
|
|
|
|
info = psb_success_
|
|
|
@ -458,4 +458,4 @@ subroutine psb_c_mv_dnsg_from_fmt(a,b,info)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end subroutine psb_c_mv_dnsg_from_fmt
|
|
|
|
end subroutine psb_c_cuda_mv_dnsg_from_fmt
|