Skip to content

Commit 799faa9

Browse files
committed
Fix BSR to CSR conversion.
1 parent 6a4afef commit 799faa9

File tree

3 files changed

+11
-9
lines changed

3 files changed

+11
-9
lines changed

lib/cusparse/conversions.jl

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,8 @@ for (fname,elty) in ((:cusparseScsr2bsr, :Float32),
216216
indc::SparseChar='O')
217217
m,n = size(csr)
218218
nnz_ref = Ref{Cint}(1)
219-
mb = div((m + blockDim - 1),blockDim)
220-
nb = div((n + blockDim - 1),blockDim)
219+
mb = cld(m, blockDim)
220+
nb = cld(n, blockDim)
221221
bsrRowPtr = CUDA.zeros(Cint,mb + 1)
222222
cudesca = CuMatrixDescriptor('G', 'L', 'N', inda)
223223
cudescc = CuMatrixDescriptor('G', 'L', 'N', indc)
@@ -242,8 +242,8 @@ for (fname,elty) in ((:cusparseSbsr2csr, :Float32),
242242
function CuSparseMatrixCSR{$elty}(bsr::CuSparseMatrixBSR{$elty};
243243
inda::SparseChar='O', indc::SparseChar='O')
244244
m,n = size(bsr)
245-
mb = div(m,bsr.blockDim)
246-
nb = div(n,bsr.blockDim)
245+
mb = cld(m, bsr.blockDim)
246+
nb = cld(n, bsr.blockDim)
247247
cudesca = CuMatrixDescriptor('G', 'L', 'N', inda)
248248
cudescc = CuMatrixDescriptor('G', 'L', 'N', indc)
249249
csrRowPtr = CUDA.zeros(Cint, m + 1)
@@ -253,7 +253,9 @@ for (fname,elty) in ((:cusparseSbsr2csr, :Float32),
253253
cudesca, nonzeros(bsr), bsr.rowPtr, bsr.colVal,
254254
bsr.blockDim, cudescc, csrNzVal, csrRowPtr,
255255
csrColInd)
256-
CuSparseMatrixCSR(csrRowPtr, csrColInd, csrNzVal, size(bsr))
256+
# XXX: the size here may not match the expected size, when the matrix dimension
257+
# is not a multiple of the block dimension!
258+
CuSparseMatrixCSR(csrRowPtr, csrColInd, csrNzVal, (mb*bsr.blockDim, nb*bsr.blockDim))
257259
end
258260
end
259261
end

lib/cusparse/level2.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ for (bname,aname,sname,elty) in ((:cusparseSbsrsv2_bufferSize, :cusparseSbsrsv2_
7070
if m != n
7171
throw(DimensionMismatch("A must be square, but has dimensions ($m,$n)!"))
7272
end
73-
mb = div(m,A.blockDim)
73+
mb = cld(m, A.blockDim)
7474
mX = length(X)
7575
if mX != m
7676
throw(DimensionMismatch("X must have length $m, but has length $mX"))

lib/cusparse/level3.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ for (fname,elty) in ((:cusparseSbsrmm, :Float32),
2828
index::SparseChar)
2929
desc = CuMatrixDescriptor('G', 'L', 'N', index)
3030
m,k = size(A)
31-
mb = div(m,A.blockDim)
32-
kb = div(k,A.blockDim)
31+
mb = cld(m, A.blockDim)
32+
kb = cld(k, A.blockDim)
3333
n = size(C)[2]
3434
if transa == 'N' && transb == 'N'
3535
chkmmdims(B,C,k,n,m,n)
@@ -156,7 +156,7 @@ for (bname,aname,sname,elty) in ((:cusparseSbsrsm2_bufferSize, :cusparseSbsrsm2_
156156
if m != n
157157
throw(DimensionMismatch("A must be square, but has dimensions ($m,$n)!"))
158158
end
159-
mb = div(m,A.blockDim)
159+
mb = cld(m, A.blockDim)
160160
mX,nX = size(X)
161161
if transxy == 'N' && (mX != m)
162162
throw(DimensionMismatch(""))

0 commit comments

Comments
 (0)