1
0
mirror of https://github.com/golang/go synced 2024-11-26 16:36:49 -07:00
The Go programming language
Go to file
Josh Bleecher Snyder bfc54bb6f3 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>
2018-11-28 17:38:46 +00:00
.github .github: don't render author-facing text in ISSUE_TEMPLATE 2018-11-02 04:47:34 +00:00
api syscall: FreeBSD 12 ino64 support 2018-10-05 21:38:13 +00:00
doc doc: update go1.12.html using latest output from relnote tool 2018-11-28 17:22:40 +00:00
lib/time lib/time: update tzdata to 2018g 2018-11-28 08:22:56 +00:00
misc cmd/trace: revert internal/traceparser 2018-11-22 02:59:55 +00:00
src math/big: allocate less for single-Word nats 2018-11-28 17:38:46 +00:00
test cmd/compile: randomize value order in block for testing 2018-11-28 17:13:46 +00:00
.gitattributes
.gitignore .gitignore: ignore src/cmd/dist/dist 2017-10-28 21:55:49 +00:00
AUTHORS A+C: add VMware as author, Venil Noronha as contributor 2018-08-31 02:14:24 +00:00
CONTRIBUTING.md all: restore changes from faulty merge/revert 2018-02-12 20:13:59 +00:00
CONTRIBUTORS A+C: add VMware as author, Venil Noronha as contributor 2018-08-31 02:14:24 +00:00
favicon.ico
LICENSE
PATENTS
README.md README: linkify some paths 2018-06-06 18:07:01 +00:00
robots.txt

The Go Programming Language

Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.

Gopher image Gopher image by Renee French, licensed under Creative Commons 3.0 Attributions license.

Our canonical Git repository is located at https://go.googlesource.com/go. There is a mirror of the repository at https://github.com/golang/go.

Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file.

Download and Install

Binary Distributions

Official binary distributions are available at https://golang.org/dl/.

After downloading a binary release, visit https://golang.org/doc/install or load doc/install.html in your web browser for installation instructions.

Install From Source

If a binary distribution is not available for your combination of operating system and architecture, visit https://golang.org/doc/install/source or load doc/install-source.html in your web browser for source installation instructions.

Contributing

Go is the work of thousands of contributors. We appreciate your help!

To contribute, please read the contribution guidelines: https://golang.org/doc/contribute.html

Note that the Go project uses the issue tracker for bug reports and proposals only. See https://golang.org/wiki/Questions for a list of places to ask questions about the Go language.