• 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
..
ascii85 Loading commit data...
asn1 Loading commit data...
base32 Loading commit data...
base64 Loading commit data...
binary Loading commit data...
csv Loading commit data...
gob Loading commit data...
hex Loading commit data...
json Loading commit data...
pem Loading commit data...
xml Loading commit data...
encoding.go Loading commit data...