• Josh Bleecher Snyder's avatar
    encoding/binary: simplify Read and Write · 2179e495
    Josh Bleecher Snyder authored
    There's no need to manually manage the backing slice for bs.
    Removing it simplifies the code, removes some allocations,
    and speeds it up slightly.
    
    Fixes #27403
    
    name                     old time/op    new time/op    delta
    ReadSlice1000Int32s-8      6.39µs ± 1%    6.31µs ± 1%   -1.37%  (p=0.000 n=27+27)
    ReadStruct-8               1.25µs ± 2%    1.23µs ± 2%   -1.06%  (p=0.003 n=30+29)
    ReadInts-8                  301ns ± 0%     297ns ± 1%   -1.21%  (p=0.000 n=27+30)
    WriteInts-8                 325ns ± 1%     320ns ± 1%   -1.59%  (p=0.000 n=26+29)
    WriteSlice1000Int32s-8     6.60µs ± 0%    6.52µs ± 0%   -1.23%  (p=0.000 n=28+27)
    PutUint16-8                0.72ns ± 2%    0.71ns ± 2%     ~     (p=0.286 n=30+30)
    PutUint32-8                0.71ns ± 1%    0.71ns ± 0%   -0.42%  (p=0.003 n=30+25)
    PutUint64-8                0.78ns ± 2%    0.78ns ± 0%   -0.55%  (p=0.001 n=30+27)
    LittleEndianPutUint16-8    0.57ns ± 0%    0.57ns ± 0%     ~     (all equal)
    LittleEndianPutUint32-8    0.57ns ± 0%    0.57ns ± 0%     ~     (all equal)
    LittleEndianPutUint64-8    0.57ns ± 0%    0.57ns ± 0%     ~     (all equal)
    PutUvarint32-8             23.1ns ± 1%    23.1ns ± 1%     ~     (p=0.925 n=26+29)
    PutUvarint64-8             57.5ns ± 2%    57.3ns ± 1%     ~     (p=0.338 n=30+26)
    [Geo mean]                 23.0ns         22.9ns        -0.61%
    
    name                     old speed      new speed      delta
    ReadSlice1000Int32s-8     626MB/s ± 1%   634MB/s ± 1%   +1.38%  (p=0.000 n=27+27)
    ReadStruct-8             60.2MB/s ± 2%  60.8MB/s ± 2%   +1.08%  (p=0.002 n=30+29)
    ReadInts-8                100MB/s ± 1%   101MB/s ± 1%   +1.24%  (p=0.000 n=27+30)
    WriteInts-8              92.2MB/s ± 1%  93.6MB/s ± 1%   +1.56%  (p=0.000 n=26+29)
    WriteSlice1000Int32s-8    606MB/s ± 0%   614MB/s ± 0%   +1.24%  (p=0.000 n=28+27)
    PutUint16-8              2.80GB/s ± 1%  2.80GB/s ± 1%     ~     (p=0.095 n=28+29)
    PutUint32-8              5.61GB/s ± 1%  5.62GB/s ± 1%     ~     (p=0.069 n=27+28)
    PutUint64-8              10.2GB/s ± 1%  10.2GB/s ± 0%   +0.15%  (p=0.039 n=27+27)
    LittleEndianPutUint16-8  3.50GB/s ± 1%  3.50GB/s ± 1%     ~     (p=0.552 n=30+29)
    LittleEndianPutUint32-8  7.01GB/s ± 1%  7.02GB/s ± 1%     ~     (p=0.160 n=29+27)
    LittleEndianPutUint64-8  14.0GB/s ± 1%  14.0GB/s ± 1%     ~     (p=0.413 n=29+29)
    PutUvarint32-8            174MB/s ± 1%   173MB/s ± 1%     ~     (p=0.648 n=25+30)
    PutUvarint64-8            139MB/s ± 2%   140MB/s ± 1%     ~     (p=0.271 n=30+26)
    [Geo mean]                906MB/s        911MB/s        +0.55%
    
    name                     old alloc/op   new alloc/op   delta
    ReadSlice1000Int32s-8      4.14kB ± 0%    4.13kB ± 0%   -0.19%  (p=0.000 n=30+30)
    ReadStruct-8                 200B ± 0%      200B ± 0%     ~     (all equal)
    ReadInts-8                  64.0B ± 0%     32.0B ± 0%  -50.00%  (p=0.000 n=30+30)
    WriteInts-8                  112B ± 0%       64B ± 0%  -42.86%  (p=0.000 n=30+30)
    WriteSlice1000Int32s-8     4.14kB ± 0%    4.13kB ± 0%   -0.19%  (p=0.000 n=30+30)
    PutUint16-8                 0.00B          0.00B          ~     (all equal)
    PutUint32-8                 0.00B          0.00B          ~     (all equal)
    PutUint64-8                 0.00B          0.00B          ~     (all equal)
    LittleEndianPutUint16-8     0.00B          0.00B          ~     (all equal)
    LittleEndianPutUint32-8     0.00B          0.00B          ~     (all equal)
    LittleEndianPutUint64-8     0.00B          0.00B          ~     (all equal)
    PutUvarint32-8              0.00B          0.00B          ~     (all equal)
    PutUvarint64-8              0.00B          0.00B          ~     (all equal)
    [Geo mean]                   476B           370B       -22.22%
    
    name                     old allocs/op  new allocs/op  delta
    ReadSlice1000Int32s-8        3.00 ± 0%      2.00 ± 0%  -33.33%  (p=0.000 n=30+30)
    ReadStruct-8                 16.0 ± 0%      16.0 ± 0%     ~     (all equal)
    ReadInts-8                   8.00 ± 0%      8.00 ± 0%     ~     (all equal)
    WriteInts-8                  14.0 ± 0%      14.0 ± 0%     ~     (all equal)
    WriteSlice1000Int32s-8       3.00 ± 0%      2.00 ± 0%  -33.33%  (p=0.000 n=30+30)
    PutUint16-8                  0.00           0.00          ~     (all equal)
    PutUint32-8                  0.00           0.00          ~     (all equal)
    PutUint64-8                  0.00           0.00          ~     (all equal)
    LittleEndianPutUint16-8      0.00           0.00          ~     (all equal)
    LittleEndianPutUint32-8      0.00           0.00          ~     (all equal)
    LittleEndianPutUint64-8      0.00           0.00          ~     (all equal)
    PutUvarint32-8               0.00           0.00          ~     (all equal)
    PutUvarint64-8               0.00           0.00          ~     (all equal)
    [Geo mean]                   6.94           5.90       -14.97%
    
    Change-Id: I3790b93e4190d98621d5f2c47e42929a18f56c2e
    Reviewed-on: https://go-review.googlesource.com/133135
    Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
    2179e495
Name
Last commit
Last update
.github Loading commit data...
api Loading commit data...
doc Loading commit data...
lib/time Loading commit data...
misc Loading commit data...
src Loading commit data...
test Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
AUTHORS Loading commit data...
CONTRIBUTING.md Loading commit data...
CONTRIBUTORS Loading commit data...
LICENSE Loading commit data...
PATENTS Loading commit data...
README.md Loading commit data...
favicon.ico Loading commit data...
robots.txt Loading commit data...