Establishing a Scalable Sparse Ecosystem with the Universal Sparse Tensor

Originally published at: Establishing a Scalable Sparse Ecosystem with the Universal Sparse Tensor | NVIDIA Technical Blog

Sparse tensors are vectors, matrices, and higher-dimensional generalizations with many zeros. They are crucial in various fields such as scientific computing, signal processing, and deep learning due to their efficiency in storage, computation, and power. Despite their benefits, handling sparse tensors manually or through existing libraries is often cumbersome, error-prone, nonportable, and does not scale…

Hi @abik1, @gpandav,
Great overview of supported formats!

I think format definition associated with Figure 10 isn’t precisely the right one: BCR has first level dense and then compressed, right? So it should be:

(i, j) -> (i / 2 : dense, j / 3 : compressed,
           i % 2 : dense,      j % 3 : dense)     # BSR-Row(2,3) 

Then is matches Figure 10 where the second dimension is with pos and idxs.

Which technologies support UST? sparse_tensor dialect in MLIR? I would definitely like to learn more about interoperability!

1 Like

You are absolutely right! No matter how often one proofreads, something always seems to fall through the cracks! Thanks for reporting.

This should indeed read as follows (NOTE: it has also been corrected in the blog text now):

(i, j) -> (i / 2 : dense, j / 3 : compressed,
           i % 2 : dense, j % 3 : dense)     # BSR-Row(2,3)
(i, j) -> (i / 2 : dense, j / 3 : compressed,
           j % 3 : dense, i % 2 : dense)     # BSR-Col(2,3)
(i, j) -> (j / 3 : dense, i / 2 : compressed,
           i % 2 : dense, j % 3 : dense)     # BSC-Row(2,3)
(i, j) -> (j / 3 : dense, i / 2 : compressed,
           j % 3 : dense, i % 2 : dense)     # BSC-Col(2,3)

Indeed, the MLIR Sparsifier supports a similar DSL. Also, sparsity support in MatX is based on the UST. As for interoperability, please stay tuned for our upcoming GTC2026 presentation!