2025-07-24 –, Main Room 3
Finch is a Julia-to-Julia compiler which adapts array programs to the sparsity and structure of data automatically. Finch understands array structure through a language of basic loop building blocks called Looplets. This enables new loop optimizations across multiple domains, unifying techniques such as sparse tensors, geometric programming, databases, and lossless compression.
Multidimensional tensor programming, popularized by frameworks like Numpy or Tensorflow, have revolutionized how we express computation. Sparse tensors represent tensors which are mostly zero, such as graphs, meshes, or pruned neural networks. Unlike dense tensors, support for sparse tensors is fragmented and incomplete. Sparse performance depends on a complex set of factors, including datastructures, fused operations, and the sparsity patterns of the inputs at runtime. Existing frameworks struggle to support and navigate the wide variety of possible implementations.
In this talk, we introduce Finch, a state-of-the-art sparse tensor framework for flexible and efficient sparse tensor programming. Finch leverages compiler technology to automatically generate customized, fused sparse kernels for each specific use case. This allows users to write readable, high-level sparse array programs without worrying about the performance of the generated code. Finch can automatically generate efficient implementations even for unique problems that lack existing library solutions.
This talk will describe how to use Finch, detailing some of it's main features:
- Finch supports most major sparse formats (CSR, CSC, DCSR, DCSC, CSF, COO, Hash, Bytemap). Finch also allows users to define their own sparse formats with a parameterized format language.
- Finch supports many high-level array operations out of the box, such as +
, *
, maximum
, sum
, map
, broadcast
, and reduce
.
- Finch supports an @einsum syntax for more complex custom operations
- Finch allows users to easily fuse multiple operations into a single kernel with a simple interface. Since zeros allow us to prune computations in other expressions, fusion is a critical optimization for sparse computing.
- Different optimizers can be used to fuse programs, such as the state-of-the-art Galley optimizer, which adapts to the sparsity patterns of the inputs at runtime.
This talk will also give a brief overview of how Finch works. Under the hood, Finch uses a language of basic loop building blocks called Looplets to hierarchically decompose structured sparsity and generate efficient code.
Links: Finch.jl finch-tensor-python Looplets Paper Finch Paper
I am a postdoc at MIT advised by Saman Amarasinghe, and an incoming professor at Georgia Tech! I am inspired to make programming high-performance computers more productive, efficient, and accessible. My research primarily focuses on using compilers to adapt programs to the structure of data, bridging the gap between program flexibility and data structure flexibility. I’m the author of the Finch array programming language, which supports a wide variety of programming constructs on sparse, run-length-encoded, banded, or otherwise structured arrays.