https://github.com/JuliaSymbolics/SymbolicUtils.jl relies on gcd to simplify fractions.
This is currently the performance bottleneck and while the current implementation was focused on correctness, we should now perform a detailed performance benchmark and eliminate bottlenecks.
Possible improvements are:
Reduce allocation by making use of MutableArithmetics
Flip order of terms so that leading monomial can be efficiently dropped in-place
https://github.com/JuliaSymbolics/SymbolicUtils.jl relies on
gcd
to simplify fractions. This is currently the performance bottleneck and while the current implementation was focused on correctness, we should now perform a detailed performance benchmark and eliminate bottlenecks. Possible improvements are:It would also be relevant to compare to https://github.com/YingboMa/SIMDPolynomials.jl
Below is the results of https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/205 after the following PRs:
Benchmark 1
SIMDPolynomials v0.1, DynamicPolynomials v0.4.5, TypedPolynomials v0.3.2
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/199
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/200
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/208
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/209
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/210
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/217
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/218
Benchmark 2
SIMDPolynomials v0.1, DynamicPolynomials v0.4.5, TypedPolynomials v0.3.2
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/199
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/200
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/208
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/209
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/210
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/217
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/218
Benchmark 3
SIMDPolynomials v0.1, DynamicPolynomials v0.4.5, TypedPolynomials v0.3.2
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/199
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/200
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/208
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/209
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/210
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/217
After https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/pull/218
cc @shashi