# CUSPARSE matrix-matrix multiplication not using GPU

**URL:** <https://discourse.julialang.org/t/cusparse-matrix-matrix-multiplication-not-using-gpu/92082>\
**Category:** GPU\
**Created:** [December 24, 2022, 10:55am UTC](https://discourse.julialang.org/t/cusparse-matrix-matrix-multiplication-not-using-gpu/92082 "2022-12-24T10:55:17Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![tsc25](https://avatars.discourse-cdn.com/v4/letter/t/f08c70/32.png) [@tsc25](https://discourse.julialang.org/u/tsc25)\
**Post date:** [December 24, 2022, 10:55am UTC](https://discourse.julialang.org/t/cusparse-matrix-matrix-multiplication-not-using-gpu/92082/1 "2022-12-24T10:55:17Z")

</div>

I’m trying to perform sparse matrix-matrix multiplication on the GPU, which looks like it should be supported by CUSPARSE via `cusparseSpmm`. But it doesn’t seem to be working using Julia’s CUDA.CUSPARSE:

```julia
using CUDA, CUDA.CUSPARSE, LinearAlgebra, SparseArrays
A = SparseMatrixCSC{Float64,Int64}(I,1000,1000)
B = SparseMatrixCSC{Float64,Int64}(I,1000,1000)
cuA = CuSparseMatrixCSC(A)
cuB = CuSparseMatrixCSC(B)
cuC = similar(cuA)
cuv = CuVector(ones(1000))
cuA*cuB
mul!(cuC,cuA,cuB)

```

The `cuX` matrices seem to be created on the GPU correctly:

```julia
julia> typeof(cuA)
CuSparseMatrixCSC{Float64, Int32}

```

But both `*` and `mul!` warn about scalar indexing.

Sparse-matrix \* vector multiplication _does_ seem to be working correctly on the GPU:

```julia
julia> cuA*cuv
1000-element CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}

```

What am I doing wrong here?

Here are the system details:

Julia Version 1.8.3 (2022-11-14)  
CUDA v3.12.0

```julia
julia> CUDA.versioninfo()
CUDA toolkit 11.7, artifact installation
NVIDIA driver 510.73.8, for CUDA 11.6
CUDA driver 11.7

Libraries:
- CUBLAS: 11.10.1
- CURAND: 10.2.10
- CUFFT: 10.7.2
- CUSOLVER: 11.3.5
- CUSPARSE: 11.7.3
- CUPTI: 17.0.0
- NVML: 11.0.0+510.73.8
- CUDNN: 8.30.2 (for CUDA 11.5.0)
- CUTENSOR: 1.4.0 (for CUDA 11.5.0)

Toolchain:
- Julia: 1.8.3
- LLVM: 13.0.1
- PTX ISA support: 3.2, 4.0, 4.1, 4.2, 4.3, 5.0, 6.0, 6.1, 6.3, 6.4, 6.5, 7.0, 7.1, 7.2
- Device capability support: sm_35, sm_37, sm_50, sm_52, sm_53, sm_60, sm_61, sm_62, sm_70, sm_72, sm_75, sm_80, sm_86

1 device:
  0: NVIDIA A10G (sm_86, 22.196 GiB / 22.488 GiB available)

```

---

<div class="post-metadata">

**Author:** ![maleadt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/maleadt/32/10097_2.png) [@maleadt](https://discourse.julialang.org/u/maleadt)\
**Post date:** [December 25, 2022, 9:56am UTC](https://discourse.julialang.org/t/cusparse-matrix-matrix-multiplication-not-using-gpu/92082/2 "2022-12-25T09:56:23Z")

</div>

Try the latest master, much has changed in the CUSPARSE wrappers.

---

<div class="post-metadata">

**Author:** ![amontoison](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/amontoison/32/218741_2.png) [@amontoison](https://discourse.julialang.org/u/amontoison)\
**Post date:** [January 2, 2023, 12:25am UTC](https://discourse.julialang.org/t/cusparse-matrix-matrix-multiplication-not-using-gpu/92082/3 "2023-01-02T00:25:30Z")

</div>

@tsc25 It should work if you use the branch `master`:

> <https://github.com/JuliaGPU/CUDA.jl/blob/master/lib/cusparse/interfaces.jl#L143-L155>
