# \[ANN\] SuiteSparseGraphBLAS.jl v0.7.0

**URL:** <https://discourse.julialang.org/t/ann-suitesparsegraphblas-jl-v0-7-0/79632>\
**Category:** Package Announcements\
**Created:** [April 18, 2022, 1:06pm UTC](https://discourse.julialang.org/t/ann-suitesparsegraphblas-jl-v0-7-0/79632 "2022-04-18T13:06:26Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![rayegun](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rayegun/32/26729_2.png) [@rayegun](https://discourse.julialang.org/u/rayegun)\
**Post date:** [April 18, 2022, 1:06pm UTC](https://discourse.julialang.org/t/ann-suitesparsegraphblas-jl-v0-7-0/79632/1 "2022-04-18T13:06:26Z")

</div>

Hey folks! I’m very excited to announce version 0.7.0 of [SuiteSparseGraphBLAS.jl](https://github.com/JuliaSparse/SuiteSparseGraphBLAS.jl)! This is the first release in what I hope will be a period of bugfixes, convenience function, and ecosystem development before v1.0!

SuiteSparseGraphBLAS.jl is a sparse linear algebra library, with some extra tricks up its sleeves specialized for graph algorithms. It’s fast and multithreaded, and the underlying [C library](https://github.com/DrTimothyAldenDavis/GraphBLAS) is developed by the illustrious [Tim Davis (tamu.edu)](https://people.engr.tamu.edu/davis/welcome.html) (responsible for our sparse solver ecosystem in SuiteSparse.jl).

If you’re interested in a very brief introduction to SuiteSparseGraphBLAS.jl checkout my [blog post](https://blog.wkimm.xyz/blog/2022/03/SuiteSparseGraphBLAS_intro/)!

For a hint of the performance checkout this comparison to SparseArrays.jl on sparse \* dense matrix multiplication (n x n \* n x 32) from the blogpost! In this specific instance SuiteSparseGraphBLAS.jl can hit up to 3x speedups on a single thread, and well over 30x speedups on 16 threads.

 ![image](https://global.discourse-cdn.com/julialang/original/3X/f/2/f2beee16d2f0aeec2ef72c95f16f97b6ae2ec624.png)

Please give it a try if you have any sparse linear algebra or graph algorithm needs! And please feel free to reach out to me for more information!

---

<div class="post-metadata">

**Author:** ![RoyiAvital](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/royiavital/32/571_2.png) [@RoyiAvital](https://discourse.julialang.org/u/RoyiAvital)\
**Post date:** [April 18, 2022, 3:33pm UTC](https://discourse.julialang.org/t/ann-suitesparsegraphblas-jl-v0-7-0/79632/2 "2022-04-18T15:33:00Z")

</div>

This is great.  
A big step to make Julia’s Sparse eco system the leading one in the camp.

Could you add performance comparison to `MKL`?

Eco system wise, I think the next step is focusing on decompositions and specifically on incomplete decompositions.

---

<div class="post-metadata">

**Author:** ![Bruno\_Amorim](https://avatars.discourse-cdn.com/v4/letter/b/f6c823/32.png) [@Bruno\_Amorim](https://discourse.julialang.org/u/Bruno_Amorim)\
**Post date:** [April 18, 2022, 5:29pm UTC](https://discourse.julialang.org/t/ann-suitesparsegraphblas-jl-v0-7-0/79632/3 "2022-04-18T17:29:35Z")

</div>

Nice! Could you please share the code for the benchmarks? I am particularly interested in the sparse matrix \* dense vector case and would like to see how SuiteSparseGraphBLAS.jl compares with MKL and with ThreadedSparseCSR.jl.

---

<div class="post-metadata">

**Author:** ![rayegun](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rayegun/32/26729_2.png) [@rayegun](https://discourse.julialang.org/u/rayegun)\
**Post date:** [April 18, 2022, 7:00pm UTC](https://discourse.julialang.org/t/ann-suitesparsegraphblas-jl-v0-7-0/79632/4 "2022-04-18T19:00:04Z")

</div>

To both you and @RoyiAvital the benchmarks code is in the repo under the benchmarks top level. If you look in the blog post you can find a link to Tim Davis’ upcoming paper in ACM TOMS (or find it here: [GraphBLAS/toms\_parallel\_grb2.pdf at stable · DrTimothyAldenDavis/GraphBLAS (github.com)](https://github.com/DrTimothyAldenDavis/GraphBLAS/blob/stable/Doc/toms_parallel_grb2.pdf)). SuiteSparse:GraphBLAS, the C library, performs quite well against MKL in that paper, beating it in almost every case.

I will add a wider performance comparison soon, especially vs MKL and ThreadedSparseCSR.jl. I suspect ThreadedSparseCSR.jl will perform just as well as SuiteSparseGraphBLAS.jl for matrices suited to whatever kernel ThreadedSparseCSR.jl uses (dot-product? I’m not sure), but I’d have to look at the actual code and run the benchmarks. Really I need to integrate better with SparseMatricesCSR.jl to achieve this.

---

<div class="post-metadata">

**Author:** ![RoyiAvital](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/royiavital/32/571_2.png) [@RoyiAvital](https://discourse.julialang.org/u/RoyiAvital)\
**Post date:** [April 18, 2022, 8:39pm UTC](https://discourse.julialang.org/t/ann-suitesparsegraphblas-jl-v0-7-0/79632/5 "2022-04-18T20:39:25Z")

</div>

Very impressive run time results in Tim Davis’ paper.  
I wish GraphBLAS had a version with 32 Bit indices as well.  
It might give an extra boost for most matrices.

@rayegun , What’s your estimation to the overhead of your wrapper compared to the results on the paper?

---

<div class="post-metadata">

**Author:** ![rayegun](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rayegun/32/26729_2.png) [@rayegun](https://discourse.julialang.org/u/rayegun)\
**Post date:** [April 19, 2022, 5:38am UTC](https://discourse.julialang.org/t/ann-suitesparsegraphblas-jl-v0-7-0/79632/6 "2022-04-19T05:38:54Z")

</div>

If you check out [this paper](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9622789&casa_token=W238y-XdiHMAAAAA:3oLiBcDwmqY55IfXS3mQKZyvMBoklX2Zg18hk7HBe2zcfJpyPujPCgnFkBE03vedEBOnpZGm&tag=1) is has some results against LAGraph. I will actively look for the sources of overhead more in the future (it’s not totally clear to me _why_ there’s as much as 10-15% overhead in some cases) although I expect we’re the fastest wrapper. (Stay tuned, there _might_ be some pretty cool compiler trickery on the way that could theoretically improve this, although it’s intended for other purposes).

---

<div class="post-metadata">

**Author:** ![RoyiAvital](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/royiavital/32/571_2.png) [@RoyiAvital](https://discourse.julialang.org/u/RoyiAvital)\
**Post date:** [April 19, 2022, 7:31am UTC](https://discourse.julialang.org/t/ann-suitesparsegraphblas-jl-v0-7-0/79632/7 "2022-04-19T07:31:43Z")

</div>

OK. I hope you’ll be able to bring the overhead down to the minimum.  
Who knows, maybe one day it will all be implemented in Julia and then exported as a dynamic / static library to be used in other languages.

---

<div class="post-metadata">

**Author:** ![Bruno\_Amorim](https://avatars.discourse-cdn.com/v4/letter/b/f6c823/32.png) [@Bruno\_Amorim](https://discourse.julialang.org/u/Bruno_Amorim)\
**Post date:** [April 19, 2022, 10:51am UTC](https://discourse.julialang.org/t/ann-suitesparsegraphblas-jl-v0-7-0/79632/8 "2022-04-19T10:51:15Z")

</div>

I am the author of ThreadedSparseCSR.jl. I am not sure what you mean by kernel used. It is just a very simple implementation of sparse matrix\*vec product using loops, which was adapted from [ThreadedSparseArrays.jl](https://github.com/jagot/ThreadedSparseArrays.jl) to use together with CSR matreices from [SparseMatricesCSR.jl](https://github.com/gridap/SparseMatricesCSR.jl). I would be very surprised if ThreadedSparseCSR.jl was competitive with SuiteSparseGraphBLAS.jl
