Hey! i am encountering a runtime error while trying to run a simple code which uses cusparseDgtsv2. Can some one help me with this?
The code snippet is as follows:
real(dp), device,dimension(NImax) :: a_rd,b_rd,c_rd,r
real(dp), dimension(NImax) :: a_prev,b_prev,alpha_rd,beta_rd
real(dp), dimension(NImax) :: c_prev,r_prev
integer(8) :: freeMem,totalMem
integer(4) :: ierr,version;
integer,device :: NImax2;
character, allocatable, device :: buf(:)
integer (c_size_t) :: N
type(cusparseHandle) :: handle
ierr = cusparseCreate(handle)
ierr = cusparseGetVersion(handle, version)
ierr = cusparseCreate(handle)
ierr = cudaMemGetInfo(freeMem,totalMem)
write(*,*) "Total device memory: ",totalMem, "bytes",dp, " ", version
write(*,*) "Free device memory: ", freeMem, "bytes"
write(*,*) "used device memory: ", totalMem - freeMem, "bytes"
do i = 1, NImax
c_rd(i) = 25
a_rd(i) = 50
b_rd(i) = 25
r(i) = 250
end do
a_rd(1) = 0
c_rd(NImax) = 0
do i = 1, NImax
r_prev(i) = r(i)
a_prev(i) = a_rd(i)
end do
write(*,*) "Before",r_prev(25)
ierr = cusparseDgtsv2_bufferSizeExt(handle,NImax,1,c_rd,b_rd,a_rd,r,NImax,N)
allocate (buf(N))
write(*,*) "buffer ",N
ierr = cusparseDgtsv2(handle,NImax,1,c_rd,b_rd,a_rd,r,NImax,c_loc(buf));
!!$acc end host_data
!!acc end data
r_prev = r
write(*,*) "After",a_prev(25)
The Output is as follows:
Total device memory: 6226378752 bytes 8
12001
Free device memory: 6049955840 bytes
used device memory: 176422912 bytes
Before 250.0000000000000
buffer 30336
0: copyout Memcpy (host=0x202ad10, dev=0x7f42cb1e4800, size=1024) FAILED: 700(an illegal memory access was encountered)
How to resolve this?