JuliaSparse / SuiteSparseGraphBLAS.jl

Sparse, General Linear Algebra for Graphs!
MIT License
102 stars 16 forks source link

use SparseArrays machinery for printing #105

Open CarloLucibello opened 1 year ago

CarloLucibello commented 1 year ago

Types here could hookup into SparseArrays show implementation for a nice printing.

julia> using SparseArrays, SuiteSparseGraphBLAS

julia> x = sprand(10, 10, 0.5)
10×10 SparseMatrixCSC{Float64, Int64} with 39 stored entries:
  ⋅       0.359801   ⋅         ⋅          ⋅          ⋅         ⋅        0.579892  0.592154  0.088285
  ⋅        ⋅         ⋅        0.522135    ⋅         0.840658  0.561799  0.158865   ⋅         ⋅ 
  ⋅       0.84019    ⋅         ⋅         0.189342    ⋅         ⋅         ⋅        0.889942  0.435336
  ⋅        ⋅        0.793216  0.0387143  0.295225    ⋅         ⋅        0.159388  0.97282   0.630283
 0.06779  0.784768   ⋅         ⋅          ⋅          ⋅         ⋅         ⋅        0.71467    ⋅ 
  ⋅       0.452141  0.5673     ⋅          ⋅         0.497747  0.892377   ⋅        0.624008   ⋅ 
  ⋅       0.461338   ⋅         ⋅         0.0744113   ⋅         ⋅         ⋅        0.817912   ⋅ 
  ⋅       0.685151   ⋅         ⋅          ⋅         0.4771     ⋅         ⋅         ⋅        0.110999
  ⋅        ⋅        0.671881   ⋅          ⋅          ⋅        0.848146  0.205909   ⋅         ⋅ 
  ⋅       0.775386   ⋅         ⋅         0.453898    ⋅        0.76114    ⋅         ⋅        0.478859

julia> GBMatrix(x)
10x10 GraphBLAS double matrix, bitmap by col
  39 entries, memory: 1.1 KB

    (5,1)    0.06779
    (1,2)    0.359801
    (3,2)    0.84019
    (5,2)    0.784768
    (6,2)    0.452141
    (7,2)    0.461338
    (8,2)    0.685151
    (10,2)    0.775386
    (4,3)    0.793216
    (6,3)    0.5673
    (9,3)    0.671881
    (2,4)    0.522135
    (4,4)    0.0387143
    (3,5)    0.189342
    (4,5)    0.295225
    (7,5)    0.0744113
    (10,5)    0.453898
    (2,6)    0.840658
    (6,6)    0.497747
    (8,6)    0.4771
    (2,7)    0.561799
    (6,7)    0.892377
    (9,7)    0.848146
    (10,7)    0.76114
    (1,8)    0.579892
    (2,8)    0.158865
    (4,8)    0.159388
    (9,8)    0.205909
    (1,9)    0.592154
    ...

This is what CUSPARSE types do in CUDA.jl https://github.com/JuliaGPU/CUDA.jl/blob/583b948ef4f1ab739047d19e7f65657a354ec28b/lib/cusparse/array.jl#L503

julia> using SparseArrays, CUDA

julia> x = sprand(3,3,0.5)
3×3 SparseMatrixCSC{Float64, Int64} with 7 stored entries:
  ⋅        0.662806   0.34835
 0.422577  0.0506328  0.932217
  ⋅        0.649229   0.753374

julia> xd = x |> cu
3×3 CUDA.CUSPARSE.CuSparseMatrixCSC{Float32, Int32} with 7 stored entries:
  ⋅         0.66280556   0.34835035
 0.4225766  0.050632793  0.9322167
  ⋅         0.649229     0.7533741
rayegun commented 1 year ago

Yep I plan on doing this soon, thanks for the pointer on CuSparseMatrixCSC that will help.