math/big: allocate less for single-Word nats
For many uses of math/big, most numbers are small in practice.
Prior to this change, big.NewInt allocated a minimum of five Words:
one to hold the value, and four as extra capacity.
In most cases, this extra capacity is waste.
Worse, allocating a single Word uses a fast malloc path for tiny allocs;
allocating five Words is more expensive in CPU as well as memory.
This change is a simple fix: Treat a request for one Word at its word.
I experimented with more complicated fixes and did not find anything
that outperformed this easy fix.
On some real world programs, this is a clear win.
The compiler:
name old alloc/op new alloc/op delta
Template 37.1MB ± 0% 37.0MB ± 0% -0.23% (p=0.008 n=5+5)
Unicode 29.2MB ± 0% 28.5MB ± 0% -2.48% (p=0.008 n=5+5)
GoTypes 133MB ± 0% 133MB ± 0% -0.05% (p=0.008 n=5+5)
Compiler 628MB ± 0% 628MB ± 0% -0.06% (p=0.008 n=5+5)
SSA 2.04GB ± 0% 2.03GB ± 0% -0.14% (p=0.008 n=5+5)
Flate 24.7MB ± 0% 24.6MB ± 0% -0.23% (p=0.008 n=5+5)
GoParser 29.6MB ± 0% 29.6MB ± 0% -0.07% (p=0.008 n=5+5)
Reflect 82.3MB ± 0% 82.2MB ± 0% -0.05% (p=0.008 n=5+5)
Tar 36.2MB ± 0% 36.2MB ± 0% -0.12% (p=0.008 n=5+5)
XML 49.5MB ± 0% 49.4MB ± 0% -0.23% (p=0.008 n=5+5)
[Geo mean] 85.1MB 84.8MB -0.37%
name old allocs/op new allocs/op delta
Template 364k ± 0% 364k ± 0% ~ (p=0.476 n=5+5)
Unicode 341k ± 0% 341k ± 0% ~ (p=0.690 n=5+5)
GoTypes 1.37M ± 0% 1.37M ± 0% ~ (p=0.444 n=5+5)
Compiler 5.50M ± 0% 5.50M ± 0% +0.02% (p=0.008 n=5+5)
SSA 16.0M ± 0% 16.0M ± 0% +0.01% (p=0.008 n=5+5)
Flate 238k ± 0% 238k ± 0% ~ (p=0.222 n=5+5)
GoParser 305k ± 0% 305k ± 0% ~ (p=0.841 n=5+5)
Reflect 976k ± 0% 976k ± 0% ~ (p=0.222 n=5+5)
Tar 354k ± 0% 354k ± 0% ~ (p=0.103 n=5+5)
XML 450k ± 0% 450k ± 0% ~ (p=0.151 n=5+5)
[Geo mean] 837k 837k +0.01%
go.skylark.net (at
ea6d2813de75ded8d157b9540bc3d3ad0b688623):
name old alloc/op new alloc/op delta
Hashtable-8 456kB ± 0% 299kB ± 0% -34.33% (p=0.000 n=9+9)
/bench_builtin_method-8 220kB ± 0% 190kB ± 0% -13.55% (p=0.000 n=9+10)
name old allocs/op new allocs/op delta
Hashtable-8 7.84k ± 0% 7.84k ± 0% ~ (all equal)
/bench_builtin_method-8 7.49k ± 0% 7.49k ± 0% ~ (all equal)
The math/big benchmarks are messy, which is predictable, since they
naturally exercise the bigger-than-one-word code more.
Also worth noting is that many of the benchmarks have very high variance.
I've omitted the opVV and opVW benchmarks, as they are unrelated.
name old time/op new time/op delta
DecimalConversion-8 92.5µs ± 1% 90.6µs ± 0% -2.12% (p=0.000 n=17+19)
FloatString/100-8 867ns ± 0% 871ns ± 0% +0.50% (p=0.000 n=18+18)
FloatString/1000-8 26.4µs ± 1% 26.5µs ± 1% ~ (p=0.396 n=20+19)
FloatString/10000-8 2.15ms ± 2% 2.16ms ± 2% ~ (p=0.089 n=19+20)
FloatString/100000-8 209ms ± 1% 209ms ± 1% ~ (p=0.583 n=19+19)
FloatAdd/10-8 63.5ns ± 2% 64.1ns ± 6% ~ (p=0.389 n=19+19)
FloatAdd/100-8 66.0ns ± 2% 65.8ns ± 2% ~ (p=0.825 n=20+20)
FloatAdd/1000-8 93.9ns ± 1% 94.3ns ± 1% ~ (p=0.273 n=19+20)
FloatAdd/10000-8 347ns ± 2% 342ns ± 1% -1.50% (p=0.000 n=18+18)
FloatAdd/100000-8 2.78µs ± 1% 2.78µs ± 2% ~ (p=0.961 n=20+19)
FloatSub/10-8 56.9ns ± 2% 57.8ns ± 3% +1.59% (p=0.001 n=19+19)
FloatSub/100-8 58.2ns ± 2% 58.9ns ± 2% +1.25% (p=0.004 n=20+20)
FloatSub/1000-8 74.9ns ± 1% 74.4ns ± 1% -0.76% (p=0.000 n=19+20)
FloatSub/10000-8 223ns ± 1% 220ns ± 2% -1.29% (p=0.000 n=16+20)
FloatSub/100000-8 1.66µs ± 1% 1.66µs ± 2% ~ (p=0.147 n=20+20)
ParseFloatSmallExp-8 8.38µs ± 0% 8.59µs ± 0% +2.48% (p=0.000 n=19+19)
ParseFloatLargeExp-8 31.1µs ± 0% 32.0µs ± 0% +3.04% (p=0.000 n=16+17)
GCD10x10/WithoutXY-8 115ns ± 1% 99ns ± 3% -14.07% (p=0.000 n=20+20)
GCD10x10/WithXY-8 322ns ± 0% 312ns ± 0% -3.11% (p=0.000 n=18+13)
GCD10x100/WithoutXY-8 233ns ± 1% 219ns ± 1% -5.73% (p=0.000 n=19+17)
GCD10x100/WithXY-8 709ns ± 0% 759ns ± 0% +7.04% (p=0.000 n=19+19)
GCD10x1000/WithoutXY-8 653ns ± 1% 642ns ± 1% -1.69% (p=0.000 n=17+20)
GCD10x1000/WithXY-8 1.35µs ± 0% 1.35µs ± 1% ~ (p=0.255 n=20+16)
GCD10x10000/WithoutXY-8 4.57µs ± 1% 4.61µs ± 1% +0.95% (p=0.000 n=18+17)
GCD10x10000/WithXY-8 6.82µs ± 0% 6.84µs ± 0% +0.27% (p=0.000 n=16+17)
GCD10x100000/WithoutXY-8 43.9µs ± 1% 44.0µs ± 1% +0.28% (p=0.000 n=18+17)
GCD10x100000/WithXY-8 60.6µs ± 0% 60.6µs ± 0% ~ (p=0.907 n=18+18)
GCD100x100/WithoutXY-8 1.13µs ± 0% 1.21µs ± 0% +6.39% (p=0.000 n=19+19)
GCD100x100/WithXY-8 1.82µs ± 0% 1.92µs ± 0% +5.24% (p=0.000 n=19+17)
GCD100x1000/WithoutXY-8 2.00µs ± 0% 2.03µs ± 1% +1.61% (p=0.000 n=18+16)
GCD100x1000/WithXY-8 3.22µs ± 0% 3.20µs ± 1% -0.83% (p=0.000 n=19+19)
GCD100x10000/WithoutXY-8 9.28µs ± 1% 9.17µs ± 1% -1.25% (p=0.000 n=18+19)
GCD100x10000/WithXY-8 13.5µs ± 0% 13.3µs ± 0% -1.12% (p=0.000 n=18+19)
GCD100x100000/WithoutXY-8 80.4µs ± 0% 78.6µs ± 0% -2.25% (p=0.000 n=19+19)
GCD100x100000/WithXY-8 114µs ± 0% 112µs ± 0% -1.46% (p=0.000 n=19+17)
GCD1000x1000/WithoutXY-8 12.9µs ± 1% 12.9µs ± 2% -0.50% (p=0.014 n=20+19)
GCD1000x1000/WithXY-8 19.6µs ± 1% 19.6µs ± 2% -0.28% (p=0.040 n=17+18)
GCD1000x10000/WithoutXY-8 22.4µs ± 0% 22.4µs ± 2% ~ (p=0.220 n=19+19)
GCD1000x10000/WithXY-8 57.0µs ± 0% 56.5µs ± 0% -0.87% (p=0.000 n=20+20)
GCD1000x100000/WithoutXY-8 116µs ± 0% 115µs ± 0% -0.49% (p=0.000 n=18+19)
GCD1000x100000/WithXY-8 410µs ± 0% 411µs ± 0% ~ (p=0.052 n=19+19)
GCD10000x10000/WithoutXY-8 247µs ± 1% 244µs ± 1% -0.92% (p=0.000 n=19+19)
GCD10000x10000/WithXY-8 476µs ± 1% 473µs ± 1% -0.48% (p=0.009 n=19+19)
GCD10000x100000/WithoutXY-8 573µs ± 1% 571µs ± 1% -0.45% (p=0.012 n=20+20)
GCD10000x100000/WithXY-8 3.35ms ± 1% 3.35ms ± 1% ~ (p=0.444 n=20+19)
GCD100000x100000/WithoutXY-8 12.0ms ± 2% 11.9ms ± 2% ~ (p=0.276 n=18+20)
GCD100000x100000/WithXY-8 27.3ms ± 1% 27.3ms ± 1% ~ (p=0.792 n=20+19)
Hilbert-8 672µs ± 0% 611µs ± 0% -9.02% (p=0.000 n=19+19)
Binomial-8 1.40µs ± 0% 1.18µs ± 0% -15.69% (p=0.000 n=16+14)
QuoRem-8 2.20µs ± 1% 2.17µs ± 1% -1.13% (p=0.000 n=19+19)
Exp-8 4.10ms ± 1% 4.11ms ± 1% ~ (p=0.296 n=20+19)
Exp2-8 4.11ms ± 1% 4.12ms ± 1% ~ (p=0.429 n=20+20)
Bitset-8 8.67ns ± 6% 8.74ns ± 4% ~ (p=0.139 n=19+17)
BitsetNeg-8 43.6ns ± 1% 43.8ns ± 2% +0.61% (p=0.036 n=20+20)
BitsetOrig-8 77.5ns ± 1% 68.4ns ± 1% -11.77% (p=0.000 n=19+20)
BitsetNegOrig-8 145ns ± 1% 141ns ± 1% -2.87% (p=0.000 n=19+20)
ModSqrt225_Tonelli-8 324µs ± 1% 324µs ± 1% ~ (p=0.409 n=18+20)
ModSqrt225_3Mod4-8 98.9µs ± 1% 99.1µs ± 1% ~ (p=0.298 n=19+18)
ModSqrt231_Tonelli-8 337µs ± 1% 337µs ± 1% ~ (p=0.718 n=20+18)
ModSqrt231_5Mod8-8 115µs ± 1% 114µs ± 1% -0.22% (p=0.050 n=20+20)
ModInverse-8 895ns ± 0% 869ns ± 1% -2.83% (p=0.000 n=17+17)
Sqrt-8 28.1µs ± 1% 28.1µs ± 0% -0.28% (p=0.000 n=16+20)
IntSqr/1-8 10.8ns ± 3% 10.5ns ± 3% -2.51% (p=0.000 n=19+17)
IntSqr/2-8 30.5ns ± 2% 30.3ns ± 4% -0.71% (p=0.035 n=18+18)
IntSqr/3-8 40.1ns ± 1% 40.1ns ± 1% ~ (p=0.710 n=20+17)
IntSqr/5-8 65.3ns ± 1% 65.4ns ± 2% ~ (p=0.744 n=19+19)
IntSqr/8-8 101ns ± 1% 102ns ± 0% ~ (p=0.234 n=19+20)
IntSqr/10-8 138ns ± 0% 138ns ± 2% ~ (p=0.827 n=18+18)
IntSqr/20-8 378ns ± 1% 378ns ± 1% ~ (p=0.479 n=18+18)
IntSqr/30-8 637ns ± 0% 638ns ± 1% ~ (p=0.051 n=18+20)
IntSqr/50-8 1.34µs ± 2% 1.34µs ± 1% ~ (p=0.970 n=18+19)
IntSqr/80-8 2.78µs ± 0% 2.78µs ± 1% -0.18% (p=0.006 n=19+17)
IntSqr/100-8 3.98µs ± 0% 3.98µs ± 0% ~ (p=0.057 n=17+19)
IntSqr/200-8 13.5µs ± 0% 13.5µs ± 1% -0.33% (p=0.000 n=19+17)
IntSqr/300-8 25.3µs ± 1% 25.3µs ± 1% ~ (p=0.361 n=19+20)
IntSqr/500-8 62.9µs ± 0% 62.9µs ± 1% ~ (p=0.899 n=17+17)
IntSqr/800-8 128µs ± 1% 127µs ± 1% -0.32% (p=0.016 n=18+20)
IntSqr/1000-8 192µs ± 0% 192µs ± 1% ~ (p=0.916 n=17+18)
Div/20/10-8 34.9ns ± 2% 35.6ns ± 1% +2.01% (p=0.000 n=20+20)
Div/200/100-8 218ns ± 1% 215ns ± 2% -1.43% (p=0.000 n=18+18)
Div/2000/1000-8 1.16µs ± 1% 1.15µs ± 1% -1.04% (p=0.000 n=19+20)
Div/20000/10000-8 35.7µs ± 1% 35.4µs ± 1% -0.69% (p=0.000 n=19+18)
Div/200000/100000-8 2.89ms ± 1% 2.88ms ± 1% -0.62% (p=0.007 n=19+20)
Mul-8 9.28ms ± 1% 9.27ms ± 1% ~ (p=0.563 n=18+18)
ZeroShifts/Shl-8 712ns ± 6% 716ns ± 7% ~ (p=0.597 n=20+20)
ZeroShifts/ShlSame-8 4.00ns ± 1% 4.06ns ± 5% ~ (p=0.162 n=18+20)
ZeroShifts/Shr-8 714ns ±10% 1285ns ±156% ~ (p=0.250 n=20+20)
ZeroShifts/ShrSame-8 4.00ns ± 1% 4.09ns ±10% +2.34% (p=0.048 n=16+19)
Exp3Power/0x10-8 154ns ± 0% 159ns ±13% ~ (p=0.197 n=14+20)
Exp3Power/0x40-8 171ns ± 1% 175ns ± 8% ~ (p=0.058 n=16+19)
Exp3Power/0x100-8 287ns ± 0% 316ns ± 4% +10.03% (p=0.000 n=17+19)
Exp3Power/0x400-8 698ns ± 1% 801ns ± 6% +14.75% (p=0.000 n=19+20)
Exp3Power/0x1000-8 2.87µs ± 0% 3.65µs ± 6% +27.24% (p=0.000 n=18+18)
Exp3Power/0x4000-8 21.9µs ± 1% 28.7µs ± 8% +31.09% (p=0.000 n=18+20)
Exp3Power/0x10000-8 204µs ± 0% 267µs ± 9% +30.81% (p=0.000 n=20+20)
Exp3Power/0x40000-8 1.86ms ± 0% 2.26ms ± 5% +21.68% (p=0.000 n=18+19)
Exp3Power/0x100000-8 17.5ms ± 1% 20.7ms ± 7% +18.39% (p=0.000 n=19+20)
Exp3Power/0x400000-8 156ms ± 0% 172ms ± 6% +10.54% (p=0.000 n=19+20)
Fibo-8 26.9ms ± 1% 27.5ms ± 3% +2.32% (p=0.000 n=19+19)
NatSqr/1-8 31.0ns ± 4% 39.5ns ±29% +27.25% (p=0.000 n=20+19)
NatSqr/2-8 54.1ns ± 1% 69.0ns ±28% +27.52% (p=0.000 n=20+20)
NatSqr/3-8 66.6ns ± 1% 83.0ns ±25% +24.59% (p=0.000 n=20+20)
NatSqr/5-8 97.1ns ± 1% 119.9ns ±12% +23.50% (p=0.000 n=16+20)
NatSqr/8-8 138ns ± 1% 171ns ± 9% +24.20% (p=0.000 n=19+20)
NatSqr/10-8 182ns ± 0% 225ns ± 9% +23.50% (p=0.000 n=16+20)
NatSqr/20-8 447ns ± 1% 624ns ± 6% +39.64% (p=0.000 n=19+19)
NatSqr/30-8 736ns ± 2% 986ns ± 9% +33.94% (p=0.000 n=19+20)
NatSqr/50-8 1.51µs ± 2% 1.97µs ± 9% +30.42% (p=0.000 n=20+20)
NatSqr/80-8 3.03µs ± 1% 3.67µs ± 7% +21.08% (p=0.000 n=20+20)
NatSqr/100-8 4.31µs ± 1% 5.20µs ± 7% +20.52% (p=0.000 n=19+20)
NatSqr/200-8 14.2µs ± 0% 16.3µs ± 4% +14.92% (p=0.000 n=19+20)
NatSqr/300-8 27.8µs ± 1% 33.2µs ± 7% +19.28% (p=0.000 n=20+18)
NatSqr/500-8 66.6µs ± 1% 74.5µs ± 3% +11.87% (p=0.000 n=18+18)
NatSqr/800-8 135µs ± 1% 165µs ± 7% +22.33% (p=0.000 n=20+20)
NatSqr/1000-8 200µs ± 0% 228µs ± 3% +14.39% (p=0.000 n=19+20)
NatSetBytes/8-8 8.87ns ± 4% 8.77ns ± 2% -1.17% (p=0.020 n=20+16)
NatSetBytes/24-8 38.6ns ± 3% 49.5ns ±29% +28.32% (p=0.000 n=18+19)
NatSetBytes/128-8 75.2ns ± 1% 120.7ns ±29% +60.60% (p=0.000 n=17+20)
NatSetBytes/7-8 16.2ns ± 2% 16.5ns ± 2% +1.76% (p=0.000 n=20+20)
NatSetBytes/23-8 46.5ns ± 1% 60.2ns ±24% +29.59% (p=0.000 n=20+20)
NatSetBytes/127-8 83.1ns ± 1% 118.2ns ±20% +42.33% (p=0.000 n=18+20)
ScanPi-8 89.1µs ± 1% 117.4µs ±12% +31.75% (p=0.000 n=18+20)
StringPiParallel-8 35.1µs ± 9% 40.2µs ±12% +14.53% (p=0.000 n=20+20)
Scan/10/Base2-8 410ns ±14% 429ns ±10% +4.47% (p=0.018 n=19+20)
Scan/100/Base2-8 3.05µs ±20% 2.97µs ±14% ~ (p=0.449 n=20+20)
Scan/1000/Base2-8 29.3µs ± 8% 30.1µs ±23% ~ (p=0.355 n=20+20)
Scan/10000/Base2-8 402µs ±13% 395µs ±14% ~ (p=0.355 n=20+20)
Scan/100000/Base2-8 11.8ms ±10% 11.6ms ± 1% ~ (p=0.245 n=17+18)
Scan/10/Base8-8 194ns ± 6% 196ns ±12% ~ (p=0.829 n=20+19)
Scan/100/Base8-8 1.11µs ±15% 1.11µs ±12% ~ (p=0.743 n=20+20)
Scan/1000/Base8-8 11.7µs ±10% 11.7µs ±12% ~ (p=0.904 n=20+20)
Scan/10000/Base8-8 209µs ± 7% 210µs ± 8% ~ (p=0.478 n=20+20)
Scan/100000/Base8-8 10.6ms ± 7% 10.4ms ± 6% ~ (p=0.112 n=20+18)
Scan/10/Base10-8 182ns ±12% 188ns ±11% +3.52% (p=0.044 n=20+20)
Scan/100/Base10-8 1.01µs ± 8% 1.00µs ±13% ~ (p=0.588 n=20+20)
Scan/1000/Base10-8 10.7µs ±20% 10.6µs ±14% ~ (p=0.560 n=20+20)
Scan/10000/Base10-8 195µs ±10% 194µs ± 9% ~ (p=0.883 n=20+20)
Scan/100000/Base10-8 10.6ms ± 2% 10.6ms ± 2% ~ (p=0.495 n=20+20)
Scan/10/Base16-8 166ns ±10% 174ns ±17% ~ (p=0.072 n=20+20)
Scan/100/Base16-8 836ns ±10% 826ns ±12% ~ (p=0.562 n=20+17)
Scan/1000/Base16-8 8.96µs ±13% 8.65µs ± 9% ~ (p=0.203 n=20+18)
Scan/10000/Base16-8 198µs ± 3% 198µs ± 5% ~ (p=0.718 n=20+20)
Scan/100000/Base16-8 11.1ms ± 3% 11.0ms ± 4% ~ (p=0.512 n=20+20)
String/10/Base2-8 88.1ns ± 7% 94.1ns ±11% +6.80% (p=0.000 n=19+20)
String/100/Base2-8 577ns ± 4% 598ns ± 5% +3.72% (p=0.000 n=20+20)
String/1000/Base2-8 5.25µs ± 2% 5.62µs ± 5% +7.04% (p=0.000 n=19+20)
String/10000/Base2-8 55.6µs ± 1% 60.1µs ± 2% +8.12% (p=0.000 n=19+19)
String/100000/Base2-8 519µs ± 2% 560µs ± 2% +7.91% (p=0.000 n=18+17)
String/10/Base8-8 52.2ns ± 8% 53.3ns ±12% ~ (p=0.188 n=20+18)
String/100/Base8-8 218ns ± 3% 232ns ±10% +6.66% (p=0.000 n=20+20)
String/1000/Base8-8 1.84µs ± 3% 1.94µs ± 4% +5.07% (p=0.000 n=20+18)
String/10000/Base8-8 18.1µs ± 2% 19.1µs ± 3% +5.84% (p=0.000 n=20+19)
String/100000/Base8-8 184µs ± 2% 197µs ± 1% +7.15% (p=0.000 n=19+19)
String/10/Base10-8 158ns ± 7% 146ns ± 6% -7.65% (p=0.000 n=20+19)
String/100/Base10-8 807ns ± 2% 845ns ± 4% +4.79% (p=0.000 n=20+19)
String/1000/Base10-8 3.99µs ± 3% 3.99µs ± 7% ~ (p=0.920 n=20+20)
String/10000/Base10-8 20.8µs ± 6% 22.1µs ±10% +6.11% (p=0.000 n=19+20)
String/100000/Base10-8 5.60ms ± 2% 5.59ms ± 2% ~ (p=0.749 n=20+19)
String/10/Base16-8 49.0ns ±13% 49.3ns ±16% ~ (p=0.581 n=19+20)
String/100/Base16-8 173ns ± 5% 185ns ± 6% +6.63% (p=0.000 n=20+18)
String/1000/Base16-8 1.38µs ± 3% 1.49µs ±10% +8.27% (p=0.000 n=19+20)
String/10000/Base16-8 13.5µs ± 2% 14.5µs ± 3% +7.08% (p=0.000 n=20+20)
String/100000/Base16-8 138µs ± 4% 148µs ± 4% +7.57% (p=0.000 n=19+20)
LeafSize/0-8 2.74ms ± 1% 2.79ms ± 2% +2.00% (p=0.000 n=19+19)
LeafSize/1-8 24.8µs ± 4% 26.1µs ± 8% +5.33% (p=0.000 n=18+19)
LeafSize/2-8 24.9µs ± 7% 25.0µs ± 8% ~ (p=0.989 n=20+19)
LeafSize/3-8 97.6µs ± 3% 100.2µs ± 5% +2.66% (p=0.001 n=20+19)
LeafSize/4-8 25.2µs ± 5% 25.4µs ± 5% ~ (p=0.173 n=19+20)
LeafSize/5-8 118µs ± 2% 119µs ± 5% ~ (p=0.478 n=20+20)
LeafSize/6-8 97.6µs ± 3% 100.1µs ± 8% +2.65% (p=0.021 n=20+19)
LeafSize/7-8 65.6µs ± 5% 67.5µs ± 6% +2.92% (p=0.003 n=20+19)
LeafSize/8-8 25.5µs ± 5% 25.6µs ± 6% ~ (p=0.461 n=19+20)
LeafSize/9-8 134µs ± 4% 136µs ± 5% ~ (p=0.194 n=19+20)
LeafSize/10-8 119µs ± 3% 122µs ± 3% +2.52% (p=0.000 n=20+19)
LeafSize/11-8 115µs ± 5% 116µs ± 5% ~ (p=0.158 n=20+19)
LeafSize/12-8 97.4µs ± 4% 100.3µs ± 5% +2.91% (p=0.003 n=19+20)
LeafSize/13-8 93.1µs ± 4% 93.0µs ± 6% ~ (p=0.698 n=20+20)
LeafSize/14-8 67.0µs ± 3% 69.7µs ± 6% +4.10% (p=0.000 n=20+20)
LeafSize/15-8 48.3µs ± 2% 49.3µs ± 6% +1.91% (p=0.014 n=19+20)
LeafSize/16-8 25.6µs ± 5% 25.6µs ± 6% ~ (p=0.947 n=20+20)
LeafSize/32-8 30.1µs ± 4% 30.3µs ± 5% ~ (p=0.685 n=18+19)
LeafSize/64-8 53.4µs ± 2% 54.0µs ± 3% ~ (p=0.053 n=19+19)
ProbablyPrime/n=0-8 3.59ms ± 1% 3.55ms ± 1% -1.12% (p=0.000 n=20+18)
ProbablyPrime/n=1-8 4.21ms ± 2% 4.17ms ± 2% -0.73% (p=0.018 n=20+19)
ProbablyPrime/n=5-8 6.74ms ± 1% 6.72ms ± 1% ~ (p=0.102 n=20+20)
ProbablyPrime/n=10-8 9.91ms ± 1% 9.89ms ± 2% ~ (p=0.322 n=19+20)
ProbablyPrime/n=20-8 16.2ms ± 1% 16.1ms ± 2% -0.52% (p=0.006 n=19+19)
ProbablyPrime/Lucas-8 2.94ms ± 1% 2.95ms ± 1% +0.52% (p=0.002 n=18+19)
ProbablyPrime/MillerRabinBase2-8 641µs ± 2% 640µs ± 2% ~ (p=0.607 n=19+20)
FloatSqrt/64-8 653ns ± 5% 704ns ± 5% +7.82% (p=0.000 n=19+20)
FloatSqrt/128-8 1.32µs ± 3% 1.42µs ± 5% +7.29% (p=0.000 n=18+20)
FloatSqrt/256-8 1.44µs ± 2% 1.45µs ± 4% ~ (p=0.089 n=19+19)
FloatSqrt/1000-8 3.36µs ± 3% 3.42µs ± 5% +1.82% (p=0.012 n=20+20)
FloatSqrt/10000-8 25.5µs ± 2% 27.5µs ± 7% +7.91% (p=0.000 n=18+19)
FloatSqrt/100000-8 629µs ± 6% 663µs ± 9% +5.32% (p=0.000 n=18+20)
FloatSqrt/
1000000-8 46.4ms ± 2% 46.6ms ± 5% ~ (p=0.351 n=20+19)
[Geo mean] 9.60µs 10.01µs +4.28%
name old alloc/op new alloc/op delta
DecimalConversion-8 54.0kB ± 0% 43.6kB ± 0% -19.40% (p=0.000 n=20+20)
FloatString/100-8 400B ± 0% 400B ± 0% ~ (all equal)
FloatString/1000-8 3.10kB ± 0% 3.10kB ± 0% ~ (all equal)
FloatString/10000-8 52.1kB ± 0% 52.1kB ± 0% ~ (p=0.153 n=20+20)
FloatString/100000-8 582kB ± 0% 582kB ± 0% ~ (all equal)
FloatAdd/10-8 0.00B 0.00B ~ (all equal)
FloatAdd/100-8 0.00B 0.00B ~ (all equal)
FloatAdd/1000-8 0.00B 0.00B ~ (all equal)
FloatAdd/10000-8 0.00B 0.00B ~ (all equal)
FloatAdd/100000-8 0.00B 0.00B ~ (all equal)
FloatSub/10-8 0.00B 0.00B ~ (all equal)
FloatSub/100-8 0.00B 0.00B ~ (all equal)
FloatSub/1000-8 0.00B 0.00B ~ (all equal)
FloatSub/10000-8 0.00B 0.00B ~ (all equal)
FloatSub/100000-8 0.00B 0.00B ~ (all equal)
ParseFloatSmallExp-8 4.18kB ± 0% 3.60kB ± 0% -13.79% (p=0.000 n=20+20)
ParseFloatLargeExp-8 18.9kB ± 0% 19.3kB ± 0% +2.25% (p=0.000 n=20+20)
GCD10x10/WithoutXY-8 96.0B ± 0% 16.0B ± 0% -83.33% (p=0.000 n=20+20)
GCD10x10/WithXY-8 240B ± 0% 88B ± 0% -63.33% (p=0.000 n=20+20)
GCD10x100/WithoutXY-8 192B ± 0% 112B ± 0% -41.67% (p=0.000 n=20+20)
GCD10x100/WithXY-8 464B ± 0% 424B ± 0% -8.62% (p=0.000 n=20+20)
GCD10x1000/WithoutXY-8 416B ± 0% 336B ± 0% -19.23% (p=0.000 n=20+20)
GCD10x1000/WithXY-8 1.25kB ± 0% 1.10kB ± 0% -12.18% (p=0.000 n=20+20)
GCD10x10000/WithoutXY-8 2.91kB ± 0% 2.83kB ± 0% -2.75% (p=0.000 n=20+20)
GCD10x10000/WithXY-8 8.70kB ± 0% 8.55kB ± 0% -1.76% (p=0.000 n=16+16)
GCD10x100000/WithoutXY-8 27.2kB ± 0% 27.2kB ± 0% -0.29% (p=0.000 n=20+20)
GCD10x100000/WithXY-8 82.4kB ± 0% 82.3kB ± 0% -0.17% (p=0.000 n=20+19)
GCD100x100/WithoutXY-8 288B ± 0% 384B ± 0% +33.33% (p=0.000 n=20+20)
GCD100x100/WithXY-8 464B ± 0% 576B ± 0% +24.14% (p=0.000 n=20+20)
GCD100x1000/WithoutXY-8 640B ± 0% 688B ± 0% +7.50% (p=0.000 n=20+20)
GCD100x1000/WithXY-8 1.52kB ± 0% 1.46kB ± 0% -3.68% (p=0.000 n=20+20)
GCD100x10000/WithoutXY-8 4.24kB ± 0% 4.29kB ± 0% +1.13% (p=0.000 n=20+20)
GCD100x10000/WithXY-8 11.1kB ± 0% 11.0kB ± 0% -0.51% (p=0.000 n=15+20)
GCD100x100000/WithoutXY-8 40.9kB ± 0% 40.9kB ± 0% +0.12% (p=0.000 n=20+19)
GCD100x100000/WithXY-8 110kB ± 0% 109kB ± 0% -0.08% (p=0.000 n=20+20)
GCD1000x1000/WithoutXY-8 1.22kB ± 0% 1.06kB ± 0% -13.16% (p=0.000 n=20+20)
GCD1000x1000/WithXY-8 2.37kB ± 0% 2.11kB ± 0% -10.83% (p=0.000 n=20+20)
GCD1000x10000/WithoutXY-8 4.71kB ± 0% 4.63kB ± 0% -1.70% (p=0.000 n=20+19)
GCD1000x10000/WithXY-8 28.2kB ± 0% 28.0kB ± 0% -0.43% (p=0.000 n=20+15)
GCD1000x100000/WithoutXY-8 41.3kB ± 0% 41.2kB ± 0% -0.20% (p=0.000 n=20+16)
GCD1000x100000/WithXY-8 301kB ± 0% 301kB ± 0% -0.13% (p=0.000 n=20+20)
GCD10000x10000/WithoutXY-8 8.64kB ± 0% 8.48kB ± 0% -1.85% (p=0.000 n=20+20)
GCD10000x10000/WithXY-8 57.2kB ± 0% 57.7kB ± 0% +0.80% (p=0.000 n=20+20)
GCD10000x100000/WithoutXY-8 43.8kB ± 0% 43.7kB ± 0% -0.19% (p=0.000 n=20+18)
GCD10000x100000/WithXY-8 2.08MB ± 0% 2.08MB ± 0% -0.02% (p=0.000 n=15+19)
GCD100000x100000/WithoutXY-8 81.6kB ± 0% 81.4kB ± 0% -0.20% (p=0.000 n=20+20)
GCD100000x100000/WithXY-8 4.32MB ± 0% 4.33MB ± 0% +0.12% (p=0.000 n=20+20)
Hilbert-8 653kB ± 0% 313kB ± 0% -52.13% (p=0.000 n=19+20)
Binomial-8 1.82kB ± 0% 1.02kB ± 0% -43.86% (p=0.000 n=20+20)
QuoRem-8 0.00B 0.00B ~ (all equal)
Exp-8 11.1kB ± 0% 11.0kB ± 0% -0.34% (p=0.000 n=19+20)
Exp2-8 11.3kB ± 0% 11.3kB ± 0% -0.35% (p=0.000 n=19+20)
Bitset-8 0.00B 0.00B ~ (all equal)
BitsetNeg-8 0.00B 0.00B ~ (all equal)
BitsetOrig-8 103B ± 0% 63B ± 0% -38.83% (p=0.000 n=20+20)
BitsetNegOrig-8 215B ± 0% 175B ± 0% -18.60% (p=0.000 n=20+20)
ModSqrt225_Tonelli-8 11.3kB ± 0% 11.0kB ± 0% -2.76% (p=0.000 n=20+17)
ModSqrt225_3Mod4-8 3.57kB ± 0% 3.53kB ± 0% -1.12% (p=0.000 n=20+20)
ModSqrt231_Tonelli-8 11.0kB ± 0% 10.7kB ± 0% -2.55% (p=0.000 n=20+20)
ModSqrt231_5Mod8-8 4.21kB ± 0% 4.09kB ± 0% -2.85% (p=0.000 n=16+20)
ModInverse-8 1.44kB ± 0% 1.28kB ± 0% -11.11% (p=0.000 n=20+20)
Sqrt-8 6.00kB ± 0% 6.00kB ± 0% ~ (all equal)
IntSqr/1-8 0.00B 0.00B ~ (all equal)
IntSqr/2-8 0.00B 0.00B ~ (all equal)
IntSqr/3-8 0.00B 0.00B ~ (all equal)
IntSqr/5-8 0.00B 0.00B ~ (all equal)
IntSqr/8-8 0.00B 0.00B ~ (all equal)
IntSqr/10-8 0.00B 0.00B ~ (all equal)
IntSqr/20-8 320B ± 0% 320B ± 0% ~ (all equal)
IntSqr/30-8 480B ± 0% 480B ± 0% ~ (all equal)
IntSqr/50-8 896B ± 0% 896B ± 0% ~ (all equal)
IntSqr/80-8 1.28kB ± 0% 1.28kB ± 0% ~ (all equal)
IntSqr/100-8 1.79kB ± 0% 1.79kB ± 0% ~ (all equal)
IntSqr/200-8 3.20kB ± 0% 3.20kB ± 0% ~ (all equal)
IntSqr/300-8 8.06kB ± 0% 8.06kB ± 0% ~ (all equal)
IntSqr/500-8 12.3kB ± 0% 12.3kB ± 0% ~ (all equal)
IntSqr/800-8 28.8kB ± 0% 28.8kB ± 0% ~ (all equal)
IntSqr/1000-8 36.9kB ± 0% 36.9kB ± 0% ~ (all equal)
Div/20/10-8 0.00B 0.00B ~ (all equal)
Div/200/100-8 0.00B 0.00B ~ (all equal)
Div/2000/1000-8 0.00B 0.00B ~ (all equal)
Div/20000/10000-8 0.00B 0.00B ~ (all equal)
Div/200000/100000-8 690B ± 0% 690B ± 0% ~ (all equal)
Mul-8 565kB ± 0% 565kB ± 0% ~ (all equal)
ZeroShifts/Shl-8 6.53kB ± 0% 6.53kB ± 0% ~ (all equal)
ZeroShifts/ShlSame-8 0.00B 0.00B ~ (all equal)
ZeroShifts/Shr-8 6.53kB ± 0% 6.53kB ± 0% ~ (all equal)
ZeroShifts/ShrSame-8 0.00B 0.00B ~ (all equal)
Exp3Power/0x10-8 192B ± 0% 112B ± 0% -41.67% (p=0.000 n=20+20)
Exp3Power/0x40-8 192B ± 0% 112B ± 0% -41.67% (p=0.000 n=20+20)
Exp3Power/0x100-8 288B ± 0% 208B ± 0% -27.78% (p=0.000 n=20+20)
Exp3Power/0x400-8 672B ± 0% 592B ± 0% -11.90% (p=0.000 n=20+20)
Exp3Power/0x1000-8 3.33kB ± 0% 3.25kB ± 0% -2.40% (p=0.000 n=20+20)
Exp3Power/0x4000-8 13.8kB ± 0% 13.7kB ± 0% -0.58% (p=0.000 n=20+20)
Exp3Power/0x10000-8 117kB ± 0% 117kB ± 0% -0.07% (p=0.000 n=20+20)
Exp3Power/0x40000-8 755kB ± 0% 755kB ± 0% -0.01% (p=0.000 n=19+20)
Exp3Power/0x100000-8 5.22MB ± 0% 5.22MB ± 0% -0.00% (p=0.000 n=20+20)
Exp3Power/0x400000-8 39.8MB ± 0% 39.8MB ± 0% -0.00% (p=0.000 n=20+19)
Fibo-8 3.09MB ± 0% 3.08MB ± 0% -0.28% (p=0.000 n=20+16)
NatSqr/1-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
NatSqr/2-8 64.0B ± 0% 64.0B ± 0% ~ (all equal)
NatSqr/3-8 80.0B ± 0% 80.0B ± 0% ~ (all equal)
NatSqr/5-8 112B ± 0% 112B ± 0% ~ (all equal)
NatSqr/8-8 160B ± 0% 160B ± 0% ~ (all equal)
NatSqr/10-8 192B ± 0% 192B ± 0% ~ (all equal)
NatSqr/20-8 672B ± 0% 672B ± 0% ~ (all equal)
NatSqr/30-8 992B ± 0% 992B ± 0% ~ (all equal)
NatSqr/50-8 1.79kB ± 0% 1.79kB ± 0% ~ (all equal)
NatSqr/80-8 2.69kB ± 0% 2.69kB ± 0% ~ (all equal)
NatSqr/100-8 3.58kB ± 0% 3.58kB ± 0% ~ (all equal)
NatSqr/200-8 6.66kB ± 0% 6.66kB ± 0% ~ (all equal)
NatSqr/300-8 24.4kB ± 0% 24.4kB ± 0% ~ (all equal)
NatSqr/500-8 36.9kB ± 0% 36.9kB ± 0% ~ (all equal)
NatSqr/800-8 69.8kB ± 0% 69.8kB ± 0% ~ (all equal)
NatSqr/1000-8 86.0kB ± 0% 86.0kB ± 0% ~ (all equal)
NatSetBytes/8-8 0.00B 0.00B ~ (all equal)
NatSetBytes/24-8 64.0B ± 0% 64.0B ± 0% ~ (all equal)
NatSetBytes/128-8 160B ± 0% 160B ± 0% ~ (all equal)
NatSetBytes/7-8 0.00B 0.00B ~ (all equal)
NatSetBytes/23-8 64.0B ± 0% 64.0B ± 0% ~ (all equal)
NatSetBytes/127-8 160B ± 0% 160B ± 0% ~ (all equal)
ScanPi-8 75.4kB ± 0% 75.7kB ± 0% +0.41% (p=0.000 n=20+20)
StringPiParallel-8 20.4kB ± 0% 20.4kB ± 0% ~ (p=0.223 n=20+20)
Scan/10/Base2-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
Scan/100/Base2-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
Scan/1000/Base2-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
Scan/10000/Base2-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
Scan/100000/Base2-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
Scan/10/Base8-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
Scan/100/Base8-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
Scan/1000/Base8-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
Scan/10000/Base8-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
Scan/100000/Base8-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
Scan/10/Base10-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
Scan/100/Base10-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
Scan/1000/Base10-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
Scan/10000/Base10-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
Scan/100000/Base10-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
Scan/10/Base16-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
Scan/100/Base16-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
Scan/1000/Base16-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
Scan/10000/Base16-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
Scan/100000/Base16-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
String/10/Base2-8 48.0B ± 0% 48.0B ± 0% ~ (all equal)
String/100/Base2-8 352B ± 0% 352B ± 0% ~ (all equal)
String/1000/Base2-8 3.46kB ± 0% 3.46kB ± 0% ~ (all equal)
String/10000/Base2-8 41.0kB ± 0% 41.0kB ± 0% ~ (all equal)
String/100000/Base2-8 336kB ± 0% 336kB ± 0% ~ (all equal)
String/10/Base8-8 16.0B ± 0% 16.0B ± 0% ~ (all equal)
String/100/Base8-8 112B ± 0% 112B ± 0% ~ (all equal)
String/1000/Base8-8 1.15kB ± 0% 1.15kB ± 0% ~ (all equal)
String/10000/Base8-8 12.3kB ± 0% 12.3kB ± 0% ~ (all equal)
String/100000/Base8-8 115kB ± 0% 115kB ± 0% ~ (all equal)
String/10/Base10-8 64.0B ± 0% 24.0B ± 0% -62.50% (p=0.000 n=20+20)
String/100/Base10-8 192B ± 0% 192B ± 0% ~ (all equal)
String/1000/Base10-8 1.95kB ± 0% 1.95kB ± 0% ~ (all equal)
String/10000/Base10-8 20.0kB ± 0% 20.0kB ± 0% ~ (p=0.983 n=19+20)
String/100000/Base10-8 210kB ± 1% 211kB ± 1% +0.82% (p=0.000 n=19+20)
String/10/Base16-8 16.0B ± 0% 16.0B ± 0% ~ (all equal)
String/100/Base16-8 96.0B ± 0% 96.0B ± 0% ~ (all equal)
String/1000/Base16-8 896B ± 0% 896B ± 0% ~ (all equal)
String/10000/Base16-8 9.47kB ± 0% 9.47kB ± 0% ~ (all equal)
String/100000/Base16-8 90.1kB ± 0% 90.1kB ± 0% ~ (all equal)
LeafSize/0-8 16.9kB ± 0% 16.8kB ± 0% -0.44% (p=0.000 n=20+20)
LeafSize/1-8 22.4kB ± 0% 22.3kB ± 0% -0.34% (p=0.000 n=20+19)
LeafSize/2-8 22.4kB ± 0% 22.3kB ± 0% -0.34% (p=0.000 n=20+19)
LeafSize/3-8 22.4kB ± 0% 22.3kB ± 0% -0.34% (p=0.000 n=20+17)
LeafSize/4-8 22.4kB ± 0% 22.3kB ± 0% -0.34% (p=0.000 n=20+19)
LeafSize/5-8 22.4kB ± 0% 22.3kB ± 0% -0.33% (p=0.000 n=20+20)
LeafSize/6-8 22.3kB ± 0% 22.2kB ± 0% -0.34% (p=0.000 n=20+20)
LeafSize/7-8 22.3kB ± 0% 22.2kB ± 0% -0.35% (p=0.000 n=20+20)
LeafSize/8-8 22.3kB ± 0% 22.2kB ± 0% -0.34% (p=0.000 n=16+20)
LeafSize/9-8 22.3kB ± 0% 22.2kB ± 0% -0.33% (p=0.000 n=20+20)
LeafSize/10-8 22.3kB ± 0% 22.2kB ± 0% -0.33% (p=0.000 n=20+20)
LeafSize/11-8 22.3kB ± 0% 22.2kB ± 0% -0.33% (p=0.000 n=20+20)
LeafSize/12-8 22.3kB ± 0% 22.2kB ± 0% -0.33% (p=0.000 n=20+20)
LeafSize/13-8 22.3kB ± 0% 22.2kB ± 0% -0.34% (p=0.000 n=20+15)
LeafSize/14-8 22.3kB ± 0% 22.2kB ± 0% -0.33% (p=0.000 n=20+20)
LeafSize/15-8 22.3kB ± 0% 22.2kB ± 0% -0.33% (p=0.000 n=20+20)
LeafSize/16-8 22.3kB ± 0% 22.2kB ± 0% -0.33% (p=0.000 n=19+20)
LeafSize/32-8 22.3kB ± 0% 22.2kB ± 0% -0.32% (p=0.000 n=20+20)
LeafSize/64-8 21.8kB ± 0% 21.7kB ± 0% -0.33% (p=0.000 n=18+19)
ProbablyPrime/n=0-8 15.3kB ± 0% 14.9kB ± 0% -2.35% (p=0.000 n=20+20)
ProbablyPrime/n=1-8 21.0kB ± 0% 20.7kB ± 0% -1.71% (p=0.000 n=20+20)
ProbablyPrime/n=5-8 43.4kB ± 0% 42.9kB ± 0% -1.20% (p=0.000 n=20+20)
ProbablyPrime/n=10-8 71.5kB ± 0% 70.7kB ± 0% -1.01% (p=0.000 n=19+20)
ProbablyPrime/n=20-8 127kB ± 0% 126kB ± 0% -0.88% (p=0.000 n=20+20)
ProbablyPrime/Lucas-8 3.07kB ± 0% 2.79kB ± 0% -9.12% (p=0.000 n=20+20)
ProbablyPrime/MillerRabinBase2-8 12.1kB ± 0% 12.0kB ± 0% -0.66% (p=0.000 n=20+20)
FloatSqrt/64-8 416B ± 0% 360B ± 0% -13.46% (p=0.000 n=20+20)
FloatSqrt/128-8 640B ± 0% 584B ± 0% -8.75% (p=0.000 n=20+20)
FloatSqrt/256-8 512B ± 0% 472B ± 0% -7.81% (p=0.000 n=20+20)
FloatSqrt/1000-8 1.47kB ± 0% 1.43kB ± 0% -2.72% (p=0.000 n=20+20)
FloatSqrt/10000-8 18.2kB ± 0% 18.1kB ± 0% -0.22% (p=0.000 n=20+20)
FloatSqrt/100000-8 204kB ± 0% 204kB ± 0% -0.02% (p=0.000 n=20+20)
FloatSqrt/
1000000-8 6.37MB ± 0% 6.37MB ± 0% -0.00% (p=0.000 n=19+20)
[Geo mean] 3.42kB 3.24kB -5.33%
name old allocs/op new allocs/op delta
DecimalConversion-8 1.65k ± 0% 1.65k ± 0% ~ (all equal)
FloatString/100-8 8.00 ± 0% 8.00 ± 0% ~ (all equal)
FloatString/1000-8 9.00 ± 0% 9.00 ± 0% ~ (all equal)
FloatString/10000-8 22.0 ± 0% 22.0 ± 0% ~ (all equal)
FloatString/100000-8 136 ± 0% 136 ± 0% ~ (all equal)
FloatAdd/10-8 0.00 0.00 ~ (all equal)
FloatAdd/100-8 0.00 0.00 ~ (all equal)
FloatAdd/1000-8 0.00 0.00 ~ (all equal)
FloatAdd/10000-8 0.00 0.00 ~ (all equal)
FloatAdd/100000-8 0.00 0.00 ~ (all equal)
FloatSub/10-8 0.00 0.00 ~ (all equal)
FloatSub/100-8 0.00 0.00 ~ (all equal)
FloatSub/1000-8 0.00 0.00 ~ (all equal)
FloatSub/10000-8 0.00 0.00 ~ (all equal)
FloatSub/100000-8 0.00 0.00 ~ (all equal)
ParseFloatSmallExp-8 110 ± 0% 130 ± 0% +18.18% (p=0.000 n=20+20)
ParseFloatLargeExp-8 319 ± 0% 371 ± 0% +16.30% (p=0.000 n=20+20)
GCD10x10/WithoutXY-8 2.00 ± 0% 2.00 ± 0% ~ (all equal)
GCD10x10/WithXY-8 5.00 ± 0% 6.00 ± 0% +20.00% (p=0.000 n=20+20)
GCD10x100/WithoutXY-8 4.00 ± 0% 4.00 ± 0% ~ (all equal)
GCD10x100/WithXY-8 9.00 ± 0% 12.00 ± 0% +33.33% (p=0.000 n=20+20)
GCD10x1000/WithoutXY-8 4.00 ± 0% 4.00 ± 0% ~ (all equal)
GCD10x1000/WithXY-8 11.0 ± 0% 12.0 ± 0% +9.09% (p=0.000 n=20+20)
GCD10x10000/WithoutXY-8 4.00 ± 0% 4.00 ± 0% ~ (all equal)
GCD10x10000/WithXY-8 11.0 ± 0% 12.0 ± 0% +9.09% (p=0.000 n=20+20)
GCD10x100000/WithoutXY-8 4.00 ± 0% 4.00 ± 0% ~ (all equal)
GCD10x100000/WithXY-8 11.0 ± 0% 12.0 ± 0% +9.09% (p=0.000 n=20+20)
GCD100x100/WithoutXY-8 6.00 ± 0% 10.00 ± 0% +66.67% (p=0.000 n=20+20)
GCD100x100/WithXY-8 9.00 ± 0% 15.00 ± 0% +66.67% (p=0.000 n=20+20)
GCD100x1000/WithoutXY-8 6.00 ± 0% 8.00 ± 0% +33.33% (p=0.000 n=20+20)
GCD100x1000/WithXY-8 12.0 ± 0% 13.0 ± 0% +8.33% (p=0.000 n=20+20)
GCD100x10000/WithoutXY-8 6.00 ± 0% 8.00 ± 0% +33.33% (p=0.000 n=20+20)
GCD100x10000/WithXY-8 12.0 ± 0% 13.0 ± 0% +8.33% (p=0.000 n=20+20)
GCD100x100000/WithoutXY-8 6.00 ± 0% 8.00 ± 0% +33.33% (p=0.000 n=20+20)
GCD100x100000/WithXY-8 12.0 ± 0% 13.0 ± 0% +8.33% (p=0.000 n=20+20)
GCD1000x1000/WithoutXY-8 10.0 ± 0% 10.0 ± 0% ~ (all equal)
GCD1000x1000/WithXY-8 19.0 ± 0% 20.0 ± 0% +5.26% (p=0.000 n=20+20)
GCD1000x10000/WithoutXY-8 8.00 ± 0% 8.00 ± 0% ~ (all equal)
GCD1000x10000/WithXY-8 26.0 ± 0% 26.0 ± 0% ~ (all equal)
GCD1000x100000/WithoutXY-8 8.00 ± 0% 8.00 ± 0% ~ (all equal)
GCD1000x100000/WithXY-8 27.0 ± 0% 27.0 ± 0% ~ (all equal)
GCD10000x10000/WithoutXY-8 10.0 ± 0% 10.0 ± 0% ~ (all equal)
GCD10000x10000/WithXY-8 76.0 ± 0% 78.0 ± 0% +2.63% (p=0.000 n=20+20)
GCD10000x100000/WithoutXY-8 8.00 ± 0% 8.00 ± 0% ~ (all equal)
GCD10000x100000/WithXY-8 174 ± 0% 174 ± 0% ~ (all equal)
GCD100000x100000/WithoutXY-8 10.0 ± 0% 10.0 ± 0% ~ (all equal)
GCD100000x100000/WithXY-8 645 ± 0% 647 ± 0% +0.31% (p=0.000 n=20+20)
Hilbert-8 14.1k ± 0% 14.3k ± 0% +0.92% (p=0.000 n=20+20)
Binomial-8 38.0 ± 0% 38.0 ± 0% ~ (all equal)
QuoRem-8 0.00 0.00 ~ (all equal)
Exp-8 21.0 ± 0% 21.0 ± 0% ~ (all equal)
Exp2-8 22.0 ± 0% 22.0 ± 0% ~ (all equal)
Bitset-8 0.00 0.00 ~ (all equal)
BitsetNeg-8 0.00 0.00 ~ (all equal)
BitsetOrig-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
BitsetNegOrig-8 2.00 ± 0% 2.00 ± 0% ~ (all equal)
ModSqrt225_Tonelli-8 85.0 ± 0% 86.0 ± 0% +1.18% (p=0.000 n=20+20)
ModSqrt225_3Mod4-8 25.0 ± 0% 25.0 ± 0% ~ (all equal)
ModSqrt231_Tonelli-8 80.0 ± 0% 80.0 ± 0% ~ (all equal)
ModSqrt231_5Mod8-8 32.0 ± 0% 32.0 ± 0% ~ (all equal)
ModInverse-8 11.0 ± 0% 11.0 ± 0% ~ (all equal)
Sqrt-8 13.0 ± 0% 13.0 ± 0% ~ (all equal)
IntSqr/1-8 0.00 0.00 ~ (all equal)
IntSqr/2-8 0.00 0.00 ~ (all equal)
IntSqr/3-8 0.00 0.00 ~ (all equal)
IntSqr/5-8 0.00 0.00 ~ (all equal)
IntSqr/8-8 0.00 0.00 ~ (all equal)
IntSqr/10-8 0.00 0.00 ~ (all equal)
IntSqr/20-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
IntSqr/30-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
IntSqr/50-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
IntSqr/80-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
IntSqr/100-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
IntSqr/200-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
IntSqr/300-8 3.00 ± 0% 3.00 ± 0% ~ (all equal)
IntSqr/500-8 3.00 ± 0% 3.00 ± 0% ~ (all equal)
IntSqr/800-8 9.00 ± 0% 9.00 ± 0% ~ (all equal)
IntSqr/1000-8 9.00 ± 0% 9.00 ± 0% ~ (all equal)
Div/20/10-8 0.00 0.00 ~ (all equal)
Div/200/100-8 0.00 0.00 ~ (all equal)
Div/2000/1000-8 0.00 0.00 ~ (all equal)
Div/20000/10000-8 0.00 0.00 ~ (all equal)
Div/200000/100000-8 0.00 0.00 ~ (all equal)
Mul-8 2.00 ± 0% 2.00 ± 0% ~ (all equal)
ZeroShifts/Shl-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
ZeroShifts/ShlSame-8 0.00 0.00 ~ (all equal)
ZeroShifts/Shr-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
ZeroShifts/ShrSame-8 0.00 0.00 ~ (all equal)
Exp3Power/0x10-8 4.00 ± 0% 4.00 ± 0% ~ (all equal)
Exp3Power/0x40-8 4.00 ± 0% 4.00 ± 0% ~ (all equal)
Exp3Power/0x100-8 5.00 ± 0% 5.00 ± 0% ~ (all equal)
Exp3Power/0x400-8 7.00 ± 0% 7.00 ± 0% ~ (all equal)
Exp3Power/0x1000-8 11.0 ± 0% 11.0 ± 0% ~ (all equal)
Exp3Power/0x4000-8 15.0 ± 0% 15.0 ± 0% ~ (all equal)
Exp3Power/0x10000-8 29.0 ± 0% 29.0 ± 0% ~ (all equal)
Exp3Power/0x40000-8 140 ± 0% 140 ± 0% ~ (all equal)
Exp3Power/0x100000-8 1.12k ± 0% 1.12k ± 0% ~ (all equal)
Exp3Power/0x400000-8 9.88k ± 0% 9.88k ± 0% ~ (p=0.747 n=17+19)
Fibo-8 739 ± 0% 743 ± 0% +0.54% (p=0.000 n=20+20)
NatSqr/1-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
NatSqr/2-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
NatSqr/3-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
NatSqr/5-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
NatSqr/8-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
NatSqr/10-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
NatSqr/20-8 2.00 ± 0% 2.00 ± 0% ~ (all equal)
NatSqr/30-8 2.00 ± 0% 2.00 ± 0% ~ (all equal)
NatSqr/50-8 2.00 ± 0% 2.00 ± 0% ~ (all equal)
NatSqr/80-8 2.00 ± 0% 2.00 ± 0% ~ (all equal)
NatSqr/100-8 2.00 ± 0% 2.00 ± 0% ~ (all equal)
NatSqr/200-8 2.00 ± 0% 2.00 ± 0% ~ (all equal)
NatSqr/300-8 4.00 ± 0% 4.00 ± 0% ~ (all equal)
NatSqr/500-8 4.00 ± 0% 4.00 ± 0% ~ (all equal)
NatSqr/800-8 10.0 ± 0% 10.0 ± 0% ~ (all equal)
NatSqr/1000-8 10.0 ± 0% 10.0 ± 0% ~ (all equal)
NatSetBytes/8-8 0.00 0.00 ~ (all equal)
NatSetBytes/24-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
NatSetBytes/128-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
NatSetBytes/7-8 0.00 0.00 ~ (all equal)
NatSetBytes/23-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
NatSetBytes/127-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
ScanPi-8 60.0 ± 0% 61.0 ± 0% +1.67% (p=0.000 n=20+20)
StringPiParallel-8 24.0 ± 0% 24.0 ± 0% ~ (all equal)
Scan/10/Base2-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
Scan/100/Base2-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
Scan/1000/Base2-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
Scan/10000/Base2-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
Scan/100000/Base2-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
Scan/10/Base8-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
Scan/100/Base8-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
Scan/1000/Base8-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
Scan/10000/Base8-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
Scan/100000/Base8-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
Scan/10/Base10-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
Scan/100/Base10-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
Scan/1000/Base10-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
Scan/10000/Base10-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
Scan/100000/Base10-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
Scan/10/Base16-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
Scan/100/Base16-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
Scan/1000/Base16-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
Scan/10000/Base16-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
Scan/100000/Base16-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
String/10/Base2-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
String/100/Base2-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
String/1000/Base2-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
String/10000/Base2-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
String/100000/Base2-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
String/10/Base8-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
String/100/Base8-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
String/1000/Base8-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
String/10000/Base8-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
String/100000/Base8-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
String/10/Base10-8 2.00 ± 0% 2.00 ± 0% ~ (all equal)
String/100/Base10-8 2.00 ± 0% 2.00 ± 0% ~ (all equal)
String/1000/Base10-8 3.00 ± 0% 3.00 ± 0% ~ (all equal)
String/10000/Base10-8 3.00 ± 0% 3.00 ± 0% ~ (all equal)
String/100000/Base10-8 3.00 ± 0% 3.00 ± 0% ~ (all equal)
String/10/Base16-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
String/100/Base16-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
String/1000/Base16-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
String/10000/Base16-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
String/100000/Base16-8 1.00 ± 0% 1.00 ± 0% ~ (all equal)
LeafSize/0-8 10.0 ± 0% 10.0 ± 0% ~ (all equal)
LeafSize/1-8 13.0 ± 0% 13.0 ± 0% ~ (all equal)
LeafSize/2-8 13.0 ± 0% 13.0 ± 0% ~ (all equal)
LeafSize/3-8 13.0 ± 0% 13.0 ± 0% ~ (all equal)
LeafSize/4-8 13.0 ± 0% 13.0 ± 0% ~ (all equal)
LeafSize/5-8 13.0 ± 0% 13.0 ± 0% ~ (all equal)
LeafSize/6-8 12.0 ± 0% 12.0 ± 0% ~ (all equal)
LeafSize/7-8 12.0 ± 0% 12.0 ± 0% ~ (all equal)
LeafSize/8-8 12.0 ± 0% 12.0 ± 0% ~ (all equal)
LeafSize/9-8 12.0 ± 0% 12.0 ± 0% ~ (all equal)
LeafSize/10-8 12.0 ± 0% 12.0 ± 0% ~ (all equal)
LeafSize/11-8 12.0 ± 0% 12.0 ± 0% ~ (all equal)
LeafSize/12-8 12.0 ± 0% 12.0 ± 0% ~ (all equal)
LeafSize/13-8 12.0 ± 0% 12.0 ± 0% ~ (all equal)
LeafSize/14-8 12.0 ± 0% 12.0 ± 0% ~ (all equal)
LeafSize/15-8 12.0 ± 0% 12.0 ± 0% ~ (all equal)
LeafSize/16-8 12.0 ± 0% 12.0 ± 0% ~ (all equal)
LeafSize/32-8 12.0 ± 0% 12.0 ± 0% ~ (all equal)
LeafSize/64-8 11.0 ± 0% 11.0 ± 0% ~ (all equal)
ProbablyPrime/n=0-8 52.0 ± 0% 52.0 ± 0% ~ (all equal)
ProbablyPrime/n=1-8 73.0 ± 0% 73.0 ± 0% ~ (all equal)
ProbablyPrime/n=5-8 157 ± 0% 157 ± 0% ~ (all equal)
ProbablyPrime/n=10-8 262 ± 0% 262 ± 0% ~ (all equal)
ProbablyPrime/n=20-8 472 ± 0% 472 ± 0% ~ (all equal)
ProbablyPrime/Lucas-8 22.0 ± 0% 22.0 ± 0% ~ (all equal)
ProbablyPrime/MillerRabinBase2-8 29.0 ± 0% 29.0 ± 0% ~ (all equal)
FloatSqrt/64-8 9.00 ± 0% 10.00 ± 0% +11.11% (p=0.000 n=20+20)
FloatSqrt/128-8 12.0 ± 0% 13.0 ± 0% +8.33% (p=0.000 n=20+20)
FloatSqrt/256-8 8.00 ± 0% 8.00 ± 0% ~ (all equal)
FloatSqrt/1000-8 9.00 ± 0% 9.00 ± 0% ~ (all equal)
FloatSqrt/10000-8 14.0 ± 0% 14.0 ± 0% ~ (all equal)
FloatSqrt/100000-8 33.0 ± 0% 33.0 ± 0% ~ (all equal)
FloatSqrt/
1000000-8 1.16k ± 0% 1.16k ± 0% ~ (all equal)
[Geo mean] 6.62 6.76 +2.09%
Change-Id: Id9df4157cac1e07721e35cff7fcdefe60703873a
Reviewed-on: https://go-review.googlesource.com/c/150999
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Alan Donovan <adonovan@google.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
cmd/compile: for non-SSA-typed params, emit simple vars.
This case was missed entirely and caused such params to be
unprintable. This change gives them stack addresses
for the entire function (which is correct).
Change-Id: Ia4f706450219e48bce65b6395d3d9792df142fb5
Reviewed-on: https://go-review.googlesource.com/c/150657
Run-TryBot: David Chase <drchase@google.com>
Reviewed-by: Heschi Kreinick <heschi@google.com>