TL;DR
This paper introduces Symbolics.jl, a flexible symbolic-numeric system leveraging multiple dispatch to optimize performance, enabling faster symbolic transformations, expression evaluation, and simulations in high-level languages.
Contribution
It presents an extendable symbolic system using dynamic multiple dispatch, allowing retroactive optimization and swapping of term-rewriting strategies for improved performance.
Findings
113x acceleration in symbolic transformations
Halved runtime in reaction-network simulation
157x speedup in PDE solving
Abstract
As mathematical computing becomes more democratized in high-level languages, high-performance symbolic-numeric systems are necessary for domain scientists and engineers to get the best performance out of their machine without deep knowledge of code optimization. Naturally, users need different term types either to have different algebraic properties for them, or to use efficient data structures. To this end, we developed Symbolics.jl, an extendable symbolic system which uses dynamic multiple dispatch to change behavior depending on the domain needs. In this work we detail an underlying abstract term interface which allows for speed without sacrificing generality. We show that by formalizing a generic API on actions independent of implementation, we can retroactively add optimized data structures to our system without changing the pre-existing term rewriters. We showcase how this can be…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Code & Models
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
