Skip to content

fix: properly specialize on functions passed to any/all/map#861

Merged
AayushSabharwal merged 1 commit intomasterfrom
as/small-array-specialize
Feb 17, 2026
Merged

fix: properly specialize on functions passed to any/all/map#861
AayushSabharwal merged 1 commit intomasterfrom
as/small-array-specialize

Conversation

@AayushSabharwal
Copy link
Member

No description provided.

@github-actions
Copy link
Contributor

Benchmark Results (Julia vlts)

Time benchmarks
master 40069aa... master / 40069aa...
arithmetic/2-arg mul 13.3 ± 0.38 μs 13.2 ± 0.37 μs 1.01 ± 0.04
arithmetic/addition 0.0781 ± 0.0012 ms 0.0784 ± 0.0011 ms 0.996 ± 0.021
arithmetic/division 26.8 ± 0.74 μs 27.2 ± 0.65 μs 0.984 ± 0.036
arithmetic/multiplication 0.0628 ± 0.0021 ms 0.0661 ± 0.002 ms 0.949 ± 0.043
overhead/acrule/a+2 2.32 ± 0.05 μs 2.35 ± 0.05 μs 0.991 ± 0.03
overhead/acrule/a+2+b 0.07 ± 0.01 μs 0.069 ± 0.01 μs 1.01 ± 0.21
overhead/acrule/a+b 4 ± 0.09 μs 4.07 ± 0.1 μs 0.983 ± 0.033
overhead/acrule/noop:Int 0.049 ± 0.01 μs 0.049 ± 0.01 μs 1 ± 0.29
overhead/acrule/noop:Sym 0.051 ± 0.01 μs 0.05 ± 0.01 μs 1.02 ± 0.29
overhead/get_degrees/large_poly 0.08 ± 0.01 μs 0.1 ± 0.01 μs 0.8 ± 0.13
overhead/rule/noop:Int 0.069 ± 0.01 μs 0.07 ± 0.01 μs 0.986 ± 0.2
overhead/rule/noop:Sym 0.06 ± 0.001 μs 0.06 ± 0.001 μs 1 ± 0.024
overhead/rule/noop:Term 0.06 ± 0.01 μs 0.06 ± 0.01 μs 1 ± 0.24
overhead/ruleset/noop:Int 30 ± 0 ns 30 ± 0 ns 1 ± 0
overhead/ruleset/noop:Sym 0.311 ± 0.011 μs 0.311 ± 0.001 μs 1 ± 0.036
overhead/ruleset/noop:Term 1.21 ± 0.011 μs 1.23 ± 0.021 μs 0.985 ± 0.019
overhead/simplify/noop:Int 30 ± 0 ns 30 ± 0 ns 1 ± 0
overhead/simplify/noop:Sym 30 ± 10 ns 30 ± 10 ns 1 ± 0.47
overhead/simplify/noop:Term 27.5 ± 0.72 μs 28.2 ± 0.68 μs 0.975 ± 0.035
overhead/simplify/randterm (+, *):serial 0.227 ± 0.0022 s 0.231 ± 0.002 s 0.984 ± 0.013
overhead/simplify/randterm (+, *):thread 0.25 ± 0.018 s 0.267 ± 0.0083 s 0.936 ± 0.072
overhead/simplify/randterm (/, *):serial 0.0834 ± 0.0015 ms 0.0851 ± 0.0023 ms 0.98 ± 0.032
overhead/simplify/randterm (/, *):thread 0.0866 ± 0.0015 ms 0.089 ± 0.0024 ms 0.973 ± 0.031
overhead/substitute/a 0.0433 ± 0.0012 ms 0.0421 ± 0.00094 ms 1.03 ± 0.036
overhead/substitute/a,b 0.0514 ± 0.0013 ms 0.0508 ± 0.0011 ms 1.01 ± 0.034
overhead/substitute/a,b,c 0.046 ± 0.001 ms 0.0448 ± 0.00094 ms 1.03 ± 0.032
polyform/easy_iszero 23.4 ± 0.51 μs 23.1 ± 0.45 μs 1.01 ± 0.03
polyform/isone 1.06 ± 0.021 ms 1.06 ± 0.029 ms 0.999 ± 0.034
polyform/isone:noop 0.09 ± 0 μs 0.1 ± 0.01 μs 0.9 ± 0.09
polyform/iszero 0.904 ± 0.018 ms 0.901 ± 0.029 ms 1 ± 0.038
polyform/iszero:noop 0.09 ± 0.01 μs 0.1 ± 0 μs 0.9 ± 0.1
polyform/simplify_fractions 1.15 ± 0.024 ms 1.15 ± 0.033 ms 0.999 ± 0.035
printing/large_poly 0.208 ± 0.0015 s 0.207 ± 0.0015 s 1 ± 0.01
time_to_load 1.27 ± 0.011 s 1.28 ± 0.0066 s 0.992 ± 0.01
Memory benchmarks
master 40069aa... master / 40069aa...
arithmetic/2-arg mul 0.077 k allocs: 2.69 kB 0.077 k allocs: 2.69 kB 1
arithmetic/addition 0.438 k allocs: 16 kB 0.438 k allocs: 16 kB 1
arithmetic/division 0.14 k allocs: 5.41 kB 0.141 k allocs: 5.44 kB 0.994
arithmetic/multiplication 0.356 k allocs: 11.7 kB 0.356 k allocs: 11.7 kB 1
overhead/acrule/a+2 0.033 k allocs: 1.23 kB 0.033 k allocs: 1.23 kB 1
overhead/acrule/a+2+b 0 allocs: 0 B 0 allocs: 0 B
overhead/acrule/a+b 0.045 k allocs: 1.77 kB 0.045 k allocs: 1.77 kB 1
overhead/acrule/noop:Int 0 allocs: 0 B 0 allocs: 0 B
overhead/acrule/noop:Sym 0 allocs: 0 B 0 allocs: 0 B
overhead/get_degrees/large_poly 2 allocs: 32 B 2 allocs: 32 B 1
overhead/rule/noop:Int 2 allocs: 0.0625 kB 2 allocs: 0.0625 kB 1
overhead/rule/noop:Sym 2 allocs: 0.0625 kB 2 allocs: 0.0625 kB 1
overhead/rule/noop:Term 2 allocs: 0.0625 kB 2 allocs: 0.0625 kB 1
overhead/ruleset/noop:Int 0 allocs: 0 B 0 allocs: 0 B
overhead/ruleset/noop:Sym 3 allocs: 0.109 kB 3 allocs: 0.109 kB 1
overhead/ruleset/noop:Term 12 allocs: 0.391 kB 12 allocs: 0.391 kB 1
overhead/simplify/noop:Int 0 allocs: 0 B 0 allocs: 0 B
overhead/simplify/noop:Sym 0 allocs: 0 B 0 allocs: 0 B
overhead/simplify/noop:Term 0.282 k allocs: 11.4 kB 0.282 k allocs: 11.4 kB 1
overhead/simplify/randterm (+, *):serial 2.21 M allocs: 0.0869 GB 2.21 M allocs: 0.0869 GB 1
overhead/simplify/randterm (+, *):thread 2.26 M allocs: 0.245 GB 2.26 M allocs: 0.245 GB 1
overhead/simplify/randterm (/, *):serial 0.781 k allocs: 29.4 kB 0.781 k allocs: 29.4 kB 1
overhead/simplify/randterm (/, *):thread 0.816 k allocs: 30.5 kB 0.816 k allocs: 30.5 kB 1
overhead/substitute/a 0.22 k allocs: 8.42 kB 0.22 k allocs: 8.42 kB 1
overhead/substitute/a,b 0.267 k allocs: 10.1 kB 0.267 k allocs: 10.1 kB 1
overhead/substitute/a,b,c 0.238 k allocs: 8.62 kB 0.238 k allocs: 8.62 kB 1
polyform/easy_iszero 0.127 k allocs: 4.48 kB 0.127 k allocs: 4.48 kB 1
polyform/isone 8 k allocs: 0.561 MB 8 k allocs: 0.561 MB 1
polyform/isone:noop 1 allocs: 16 B 1 allocs: 16 B 1
polyform/iszero 6.71 k allocs: 0.464 MB 6.72 k allocs: 0.465 MB 1
polyform/iszero:noop 1 allocs: 16 B 1 allocs: 16 B 1
polyform/simplify_fractions 8.65 k allocs: 0.586 MB 8.65 k allocs: 0.587 MB 1
printing/large_poly 1.86 M allocs: 0.082 GB 1.86 M allocs: 0.082 GB 1
time_to_load 0.153 k allocs: 14.5 kB 0.153 k allocs: 14.5 kB 1

@github-actions
Copy link
Contributor

Benchmark Results (Julia v1)

Time benchmarks
master 40069aa... master / 40069aa...
arithmetic/2-arg mul 10.3 ± 0.25 μs 10.4 ± 0.24 μs 0.992 ± 0.033
arithmetic/addition 0.067 ± 0.00092 ms 0.0679 ± 0.00093 ms 0.986 ± 0.019
arithmetic/division 23.8 ± 0.59 μs 24.5 ± 0.54 μs 0.97 ± 0.032
arithmetic/multiplication 0.0505 ± 0.002 ms 0.0526 ± 0.0018 ms 0.96 ± 0.05
overhead/acrule/a+2 2.12 ± 0.04 μs 2.14 ± 0.051 μs 0.991 ± 0.03
overhead/acrule/a+2+b 0.08 ± 0.01 μs 0.08 ± 0.01 μs 1 ± 0.18
overhead/acrule/a+b 3.69 ± 0.06 μs 3.69 ± 0.08 μs 1 ± 0.027
overhead/acrule/noop:Int 30 ± 0 ns 30 ± 0 ns 1 ± 0
overhead/acrule/noop:Sym 0.07 ± 0 μs 0.06 ± 0.001 μs 1.17 ± 0.019
overhead/get_degrees/large_poly 0.08 ± 0.01 μs 0.09 ± 0.001 μs 0.889 ± 0.11
overhead/rule/noop:Int 0.061 ± 0.01 μs 0.07 ± 0.01 μs 0.871 ± 0.19
overhead/rule/noop:Sym 0.07 ± 0.001 μs 0.07 ± 0.001 μs 1 ± 0.02
overhead/rule/noop:Term 0.07 ± 0 μs 0.07 ± 0 μs 1 ± 0
overhead/ruleset/noop:Int 30 ± 0 ns 30 ± 0 ns 1 ± 0
overhead/ruleset/noop:Sym 0.32 ± 0.021 μs 0.321 ± 0.01 μs 0.997 ± 0.072
overhead/ruleset/noop:Term 1.2 ± 0.02 μs 1.17 ± 0.03 μs 1.03 ± 0.031
overhead/simplify/noop:Int 30 ± 0 ns 30 ± 0 ns 1 ± 0
overhead/simplify/noop:Sym 30 ± 10 ns 30 ± 10 ns 1 ± 0.47
overhead/simplify/noop:Term 26.5 ± 0.62 μs 26.9 ± 0.6 μs 0.984 ± 0.032
overhead/simplify/randterm (+, *):serial 0.187 ± 0.028 s 0.188 ± 0.029 s 0.995 ± 0.21
overhead/simplify/randterm (+, *):thread 0.258 ± 0.074 s 0.27 ± 0.077 s 0.953 ± 0.39
overhead/simplify/randterm (/, *):serial 0.0851 ± 0.0048 ms 0.0866 ± 0.0025 ms 0.983 ± 0.062
overhead/simplify/randterm (/, *):thread 0.0953 ± 0.011 ms 0.096 ± 0.0094 ms 0.993 ± 0.15
overhead/substitute/a 0.0331 ± 0.00074 ms 0.0335 ± 0.00078 ms 0.988 ± 0.032
overhead/substitute/a,b 0.0409 ± 0.00096 ms 0.0416 ± 0.00097 ms 0.982 ± 0.033
overhead/substitute/a,b,c 0.0395 ± 0.00093 ms 0.0404 ± 0.00096 ms 0.978 ± 0.033
polyform/easy_iszero 18.7 ± 0.39 μs 18.8 ± 0.37 μs 0.993 ± 0.028
polyform/isone 0.9 ± 0.019 ms 0.891 ± 0.015 ms 1.01 ± 0.027
polyform/isone:noop 0.08 ± 0.01 μs 0.081 ± 0.01 μs 0.988 ± 0.17
polyform/iszero 0.783 ± 0.021 ms 0.774 ± 0.015 ms 1.01 ± 0.033
polyform/iszero:noop 0.08 ± 0.01 μs 0.09 ± 0.01 μs 0.889 ± 0.15
polyform/simplify_fractions 0.969 ± 0.017 ms 0.966 ± 0.048 ms 1 ± 0.053
printing/large_poly 0.191 ± 0.013 s 0.19 ± 0.019 s 1.01 ± 0.12
time_to_load 1.41 ± 0.0048 s 1.4 ± 0.019 s 1.01 ± 0.014
Memory benchmarks
master 40069aa... master / 40069aa...
arithmetic/2-arg mul 0.055 k allocs: 1.77 kB 0.055 k allocs: 1.77 kB 1
arithmetic/addition 0.3 k allocs: 10.3 kB 0.3 k allocs: 10.3 kB 1
arithmetic/division 0.131 k allocs: 4.75 kB 0.131 k allocs: 4.75 kB 1
arithmetic/multiplication 0.252 k allocs: 6.5 kB 0.252 k allocs: 6.5 kB 1
overhead/acrule/a+2 0.033 k allocs: 1.11 kB 0.033 k allocs: 1.11 kB 1
overhead/acrule/a+2+b 0 allocs: 0 B 0 allocs: 0 B
overhead/acrule/a+b 0.044 k allocs: 1.52 kB 0.044 k allocs: 1.52 kB 1
overhead/acrule/noop:Int 0 allocs: 0 B 0 allocs: 0 B
overhead/acrule/noop:Sym 0 allocs: 0 B 0 allocs: 0 B
overhead/get_degrees/large_poly 2 allocs: 32 B 2 allocs: 32 B 1
overhead/rule/noop:Int 2 allocs: 0.0625 kB 2 allocs: 0.0625 kB 1
overhead/rule/noop:Sym 2 allocs: 0.0625 kB 2 allocs: 0.0625 kB 1
overhead/rule/noop:Term 2 allocs: 0.0625 kB 2 allocs: 0.0625 kB 1
overhead/ruleset/noop:Int 0 allocs: 0 B 0 allocs: 0 B
overhead/ruleset/noop:Sym 3 allocs: 0.109 kB 3 allocs: 0.109 kB 1
overhead/ruleset/noop:Term 12 allocs: 0.391 kB 12 allocs: 0.391 kB 1
overhead/simplify/noop:Int 0 allocs: 0 B 0 allocs: 0 B
overhead/simplify/noop:Sym 0 allocs: 0 B 0 allocs: 0 B
overhead/simplify/noop:Term 0.276 k allocs: 9.89 kB 0.276 k allocs: 9.89 kB 1
overhead/simplify/randterm (+, *):serial 2.09 M allocs: 0.0744 GB 2.1 M allocs: 0.0744 GB 0.999
overhead/simplify/randterm (+, *):thread 2.26 M allocs: 0.236 GB 2.25 M allocs: 0.236 GB 1
overhead/simplify/randterm (/, *):serial 0.776 k allocs: 28.1 kB 0.776 k allocs: 28.1 kB 1
overhead/simplify/randterm (/, *):thread 0.911 k allocs: 0.0324 MB 0.911 k allocs: 0.0324 MB 1
overhead/substitute/a 0.168 k allocs: 5.98 kB 0.168 k allocs: 5.98 kB 1
overhead/substitute/a,b 0.217 k allocs: 7.59 kB 0.217 k allocs: 7.59 kB 1
overhead/substitute/a,b,c 0.223 k allocs: 7.72 kB 0.223 k allocs: 7.72 kB 1
polyform/easy_iszero 0.091 k allocs: 2.92 kB 0.091 k allocs: 2.92 kB 1
polyform/isone 10.9 k allocs: 0.578 MB 10.9 k allocs: 0.578 MB 1
polyform/isone:noop 1 allocs: 16 B 1 allocs: 16 B 1
polyform/iszero 8.95 k allocs: 0.48 MB 8.95 k allocs: 0.48 MB 1
polyform/iszero:noop 1 allocs: 16 B 1 allocs: 16 B 1
polyform/simplify_fractions 11.4 k allocs: 0.595 MB 11.4 k allocs: 0.595 MB 1
printing/large_poly 2.15 M allocs: 0.079 GB 2.15 M allocs: 0.079 GB 1
time_to_load 0.145 k allocs: 11 kB 0.145 k allocs: 11 kB 1

@AayushSabharwal AayushSabharwal merged commit bc7e313 into master Feb 17, 2026
18 of 23 checks passed
@AayushSabharwal AayushSabharwal deleted the as/small-array-specialize branch February 17, 2026 15:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant