• Ilya Tocar's avatar
    runtime: avoid division in growslice · e53cc7ae
    Ilya Tocar authored
    Add a special case for power-of-2 sized elements.
    We can replace div/mul with left/right shift and avoid expensive operation.
    growslice is hotter for short slices of small elements, such as int16, so
    add an int16 version for GrowSlice benchmark.
    
    name                   old time/op  new time/op  delta
    GrowSlice/Byte-6       61.3ns ± 3%  60.5ns ± 4%  -1.33%  (p=0.002 n=30+30)
    GrowSlice/Int16-6      94.0ns ± 4%  84.7ns ± 2%  -9.82%  (p=0.000 n=30+30)
    GrowSlice/Int-6         100ns ± 1%    99ns ± 1%  -0.25%  (p=0.032 n=29+28)
    GrowSlice/Ptr-6         197ns ± 2%   195ns ± 2%  -0.94%  (p=0.001 n=30+29)
    GrowSlice/Struct/24-6   168ns ± 1%   166ns ± 2%  -1.09%  (p=0.000 n=25+30)
    GrowSlice/Struct/32-6   187ns ± 2%   180ns ± 1%  -3.59%  (p=0.000 n=30+30)
    GrowSlice/Struct/40-6   241ns ± 2%   238ns ± 2%  -1.41%  (p=0.000 n=30+30)
    
    Change-Id: I31e8388d73fd9356e2dcc091d8d92eef3e3ccdbc
    Reviewed-on: https://go-review.googlesource.com/102279
    Run-TryBot: Ilya Tocar <ilya.tocar@intel.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarJosh Bleecher Snyder <josharian@gmail.com>
    e53cc7ae
slice.go 7.64 KB