Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: speed up escaped string decoding #28

Merged
merged 7 commits into from Jan 18, 2022

Commits on Jan 17, 2022

  1. Copy the full SHA
    3775cbf View commit details
    Browse the repository at this point in the history
  2. feat: use unrolled loop for escaped string

    name                                      old time/op    new time/op    delta
    Decoder_StrBytes/Plain/1b-12                9.47ns ± 0%   11.25ns ± 0%  +18.77%  (p=0.000 n=13+15)
    Decoder_StrBytes/Plain/8b-12                11.3ns ± 1%    13.1ns ± 2%  +15.40%  (p=0.000 n=15+15)
    Decoder_StrBytes/Plain/16b-12               13.9ns ± 0%    16.5ns ± 0%  +19.02%  (p=0.000 n=15+13)
    Decoder_StrBytes/Plain/64b-12               28.0ns ± 0%    31.9ns ± 1%  +14.04%  (p=0.000 n=13+15)
    Decoder_StrBytes/Plain/128b-12              46.2ns ± 2%    52.3ns ± 1%  +13.25%  (p=0.000 n=15+15)
    Decoder_StrBytes/Plain/1024b-12              295ns ± 0%     333ns ± 3%  +12.92%  (p=0.000 n=15+15)
    Decoder_StrBytes/EscapedNewline/2b-12       43.2ns ± 1%    43.1ns ± 1%   -0.44%  (p=0.007 n=14+15)
    Decoder_StrBytes/EscapedNewline/16b-12       138ns ± 1%     138ns ± 1%   +0.58%  (p=0.034 n=15+15)
    Decoder_StrBytes/EscapedNewline/32b-12       253ns ± 0%     276ns ± 1%   +9.14%  (p=0.000 n=14+15)
    Decoder_StrBytes/EscapedNewline/128b-12      839ns ± 0%     945ns ± 0%  +12.66%  (p=0.000 n=12+14)
    Decoder_StrBytes/EscapedNewline/256b-12     1.56µs ± 0%    1.77µs ± 0%  +13.63%  (p=0.000 n=12+15)
    Decoder_StrBytes/EscapedNewline/2048b-12    11.3µs ± 0%    13.0µs ± 1%  +15.38%  (p=0.000 n=15+15)
    Decoder_StrBytes/EscapedUnicode/6b-12       57.3ns ± 0%    62.7ns ± 1%   +9.39%  (p=0.000 n=13+15)
    Decoder_StrBytes/EscapedUnicode/48b-12       231ns ± 2%     245ns ± 2%   +6.16%  (p=0.000 n=15+15)
    Decoder_StrBytes/EscapedUnicode/96b-12       446ns ± 2%     483ns ± 2%   +8.38%  (p=0.000 n=15+15)
    Decoder_StrBytes/EscapedUnicode/384b-12     1.64µs ± 2%    1.79µs ± 2%   +9.13%  (p=0.000 n=15+15)
    Decoder_StrBytes/EscapedUnicode/768b-12     3.18µs ± 1%    3.45µs ± 3%   +8.58%  (p=0.000 n=13+15)
    Decoder_StrBytes/EscapedUnicode/6144b-12    24.3µs ± 2%    26.4µs ± 2%   +8.71%  (p=0.000 n=15+15)
    Decoder_StrBytes/Mixed/21b-12                144ns ± 1%     109ns ± 1%  -24.11%  (p=0.000 n=15+15)
    Decoder_StrBytes/Mixed/168b-12               860ns ± 2%     576ns ± 1%  -33.05%  (p=0.000 n=14+14)
    Decoder_StrBytes/Mixed/336b-12              1.61µs ± 2%    1.01µs ± 2%  -37.20%  (p=0.000 n=15+15)
    
    name                                      old speed      new speed      delta
    Decoder_StrBytes/Plain/1b-12               317MB/s ± 0%   267MB/s ± 0%  -15.81%  (p=0.000 n=13+15)
    Decoder_StrBytes/Plain/8b-12               883MB/s ± 1%   766MB/s ± 2%  -13.33%  (p=0.000 n=15+15)
    Decoder_StrBytes/Plain/16b-12             1.30GB/s ± 0%  1.09GB/s ± 0%  -15.97%  (p=0.000 n=15+13)
    Decoder_StrBytes/Plain/64b-12             2.36GB/s ± 0%  2.07GB/s ± 1%  -12.32%  (p=0.000 n=13+15)
    Decoder_StrBytes/Plain/128b-12            2.81GB/s ± 2%  2.49GB/s ± 1%  -11.70%  (p=0.000 n=15+15)
    Decoder_StrBytes/Plain/1024b-12           3.48GB/s ± 0%  3.08GB/s ± 3%  -11.43%  (p=0.000 n=15+15)
    Decoder_StrBytes/EscapedNewline/2b-12     92.5MB/s ± 1%  92.9MB/s ± 1%   +0.44%  (p=0.007 n=14+15)
    Decoder_StrBytes/EscapedNewline/16b-12     131MB/s ± 1%   130MB/s ± 1%   -0.56%  (p=0.037 n=15+15)
    Decoder_StrBytes/EscapedNewline/32b-12     134MB/s ± 0%   123MB/s ± 1%   -8.37%  (p=0.000 n=14+15)
    Decoder_StrBytes/EscapedNewline/128b-12    155MB/s ± 0%   138MB/s ± 0%  -11.24%  (p=0.000 n=12+14)
    Decoder_StrBytes/EscapedNewline/256b-12    165MB/s ± 0%   146MB/s ± 0%  -12.01%  (p=0.000 n=12+15)
    Decoder_StrBytes/EscapedNewline/2048b-12   182MB/s ± 0%   157MB/s ± 1%  -13.33%  (p=0.000 n=15+15)
    Decoder_StrBytes/EscapedUnicode/6b-12      140MB/s ± 0%   128MB/s ± 1%   -8.58%  (p=0.000 n=13+15)
    Decoder_StrBytes/EscapedUnicode/48b-12     217MB/s ± 2%   204MB/s ± 2%   -5.81%  (p=0.000 n=15+15)
    Decoder_StrBytes/EscapedUnicode/96b-12     220MB/s ± 2%   203MB/s ± 2%   -7.73%  (p=0.000 n=15+15)
    Decoder_StrBytes/EscapedUnicode/384b-12    236MB/s ± 2%   216MB/s ± 2%   -8.36%  (p=0.000 n=15+15)
    Decoder_StrBytes/EscapedUnicode/768b-12    242MB/s ± 1%   223MB/s ± 3%   -7.89%  (p=0.000 n=13+15)
    Decoder_StrBytes/EscapedUnicode/6144b-12   253MB/s ± 2%   233MB/s ± 2%   -8.01%  (p=0.000 n=15+15)
    Decoder_StrBytes/Mixed/21b-12              160MB/s ± 1%   211MB/s ± 1%  +31.77%  (p=0.000 n=15+15)
    Decoder_StrBytes/Mixed/168b-12             198MB/s ± 2%   295MB/s ± 1%  +49.37%  (p=0.000 n=14+14)
    Decoder_StrBytes/Mixed/336b-12             210MB/s ± 2%   334MB/s ± 2%  +59.23%  (p=0.000 n=15+15)
    tdakkota committed Jan 17, 2022
    Copy the full SHA
    2867c4b View commit details
    Browse the repository at this point in the history

Commits on Jan 18, 2022

  1. feat: avoid regression in Plain case, split str and strSlow

    name                                      old time/op    new time/op    delta
    Decoder_StrBytes/Plain/1b-12                9.47ns ± 0%    9.62ns ± 1%   +1.56%  (p=0.000 n=13+15)
    Decoder_StrBytes/Plain/8b-12                11.3ns ± 1%    11.6ns ± 1%   +2.67%  (p=0.000 n=15+15)
    Decoder_StrBytes/Plain/16b-12               13.9ns ± 0%    13.9ns ± 1%     ~     (p=0.123 n=15+15)
    Decoder_StrBytes/Plain/64b-12               28.0ns ± 0%    28.1ns ± 1%   +0.35%  (p=0.001 n=13+14)
    Decoder_StrBytes/Plain/128b-12              46.2ns ± 2%    46.3ns ± 1%     ~     (p=0.097 n=15+15)
    Decoder_StrBytes/Plain/1024b-12              295ns ± 0%     295ns ± 0%     ~     (p=0.894 n=15+12)
    Decoder_StrBytes/EscapedNewline/2b-12       43.2ns ± 1%    50.2ns ± 1%  +15.98%  (p=0.000 n=14+15)
    Decoder_StrBytes/EscapedNewline/16b-12       138ns ± 1%     145ns ± 1%   +5.61%  (p=0.000 n=15+14)
    Decoder_StrBytes/EscapedNewline/32b-12       253ns ± 0%     279ns ± 1%  +10.33%  (p=0.000 n=14+14)
    Decoder_StrBytes/EscapedNewline/128b-12      839ns ± 0%     933ns ± 0%  +11.15%  (p=0.000 n=12+13)
    Decoder_StrBytes/EscapedNewline/256b-12     1.56µs ± 0%    1.74µs ± 0%  +11.80%  (p=0.000 n=12+15)
    Decoder_StrBytes/EscapedNewline/2048b-12    11.3µs ± 0%    12.8µs ± 0%  +13.30%  (p=0.000 n=15+15)
    Decoder_StrBytes/EscapedUnicode/6b-12       57.3ns ± 0%    69.3ns ± 2%  +20.89%  (p=0.000 n=13+15)
    Decoder_StrBytes/EscapedUnicode/48b-12       231ns ± 2%     247ns ± 1%   +7.11%  (p=0.000 n=15+13)
    Decoder_StrBytes/EscapedUnicode/96b-12       446ns ± 2%     475ns ± 1%   +6.70%  (p=0.000 n=15+15)
    Decoder_StrBytes/EscapedUnicode/384b-12     1.64µs ± 2%    1.70µs ± 1%   +3.55%  (p=0.000 n=15+15)
    Decoder_StrBytes/EscapedUnicode/768b-12     3.18µs ± 1%    3.25µs ± 1%   +2.41%  (p=0.000 n=13+14)
    Decoder_StrBytes/EscapedUnicode/6144b-12    24.3µs ± 2%    24.9µs ± 0%   +2.68%  (p=0.000 n=15+13)
    Decoder_StrBytes/Mixed/21b-12                144ns ± 1%     114ns ± 1%  -20.33%  (p=0.000 n=15+15)
    Decoder_StrBytes/Mixed/168b-12               860ns ± 2%     574ns ± 2%  -33.32%  (p=0.000 n=14+15)
    Decoder_StrBytes/Mixed/336b-12              1.61µs ± 2%    1.01µs ± 1%  -37.35%  (p=0.000 n=15+15)
    
    name                                      old speed      new speed      delta
    Decoder_StrBytes/Plain/1b-12               317MB/s ± 0%   312MB/s ± 1%   -1.53%  (p=0.000 n=13+15)
    Decoder_StrBytes/Plain/8b-12               883MB/s ± 1%   861MB/s ± 1%   -2.60%  (p=0.000 n=15+15)
    Decoder_StrBytes/Plain/16b-12             1.30GB/s ± 0%  1.30GB/s ± 1%     ~     (p=0.202 n=15+15)
    Decoder_StrBytes/Plain/64b-12             2.36GB/s ± 0%  2.35GB/s ± 1%   -0.36%  (p=0.002 n=13+14)
    Decoder_StrBytes/Plain/128b-12            2.81GB/s ± 2%  2.81GB/s ± 1%     ~     (p=0.089 n=15+15)
    Decoder_StrBytes/Plain/1024b-12           3.48GB/s ± 0%  3.48GB/s ± 0%     ~     (p=0.943 n=15+12)
    Decoder_StrBytes/EscapedNewline/2b-12     92.5MB/s ± 1%  79.8MB/s ± 1%  -13.78%  (p=0.000 n=14+15)
    Decoder_StrBytes/EscapedNewline/16b-12     131MB/s ± 1%   124MB/s ± 1%   -5.31%  (p=0.000 n=15+14)
    Decoder_StrBytes/EscapedNewline/32b-12     134MB/s ± 0%   122MB/s ± 1%   -9.36%  (p=0.000 n=14+14)
    Decoder_StrBytes/EscapedNewline/128b-12    155MB/s ± 0%   139MB/s ± 0%  -10.03%  (p=0.000 n=12+13)
    Decoder_StrBytes/EscapedNewline/256b-12    165MB/s ± 0%   148MB/s ± 0%  -10.56%  (p=0.000 n=12+15)
    Decoder_StrBytes/EscapedNewline/2048b-12   182MB/s ± 0%   160MB/s ± 0%  -11.74%  (p=0.000 n=15+15)
    Decoder_StrBytes/EscapedUnicode/6b-12      140MB/s ± 0%   116MB/s ± 2%  -17.27%  (p=0.000 n=13+15)
    Decoder_StrBytes/EscapedUnicode/48b-12     217MB/s ± 2%   202MB/s ± 1%   -6.66%  (p=0.000 n=15+13)
    Decoder_StrBytes/EscapedUnicode/96b-12     220MB/s ± 2%   206MB/s ± 1%   -6.28%  (p=0.000 n=15+15)
    Decoder_StrBytes/EscapedUnicode/384b-12    236MB/s ± 2%   227MB/s ± 1%   -3.44%  (p=0.000 n=15+15)
    Decoder_StrBytes/EscapedUnicode/768b-12    242MB/s ± 1%   237MB/s ± 1%   -2.35%  (p=0.000 n=13+14)
    Decoder_StrBytes/EscapedUnicode/6144b-12   253MB/s ± 2%   246MB/s ± 0%   -2.62%  (p=0.000 n=15+13)
    Decoder_StrBytes/Mixed/21b-12              160MB/s ± 1%   201MB/s ± 1%  +25.52%  (p=0.000 n=15+15)
    Decoder_StrBytes/Mixed/168b-12             198MB/s ± 2%   296MB/s ± 2%  +49.96%  (p=0.000 n=14+15)
    Decoder_StrBytes/Mixed/336b-12             210MB/s ± 2%   335MB/s ± 1%  +59.64%  (p=0.000 n=15+15)
    tdakkota committed Jan 18, 2022
    Copy the full SHA
    2025236 View commit details
    Browse the repository at this point in the history
  2. Copy the full SHA
    c322742 View commit details
    Browse the repository at this point in the history
  3. Copy the full SHA
    32b1f5d View commit details
    Browse the repository at this point in the history
  4. feat: speed up escaped string decoding

    name                            old time/op    new time/op    delta
    Decoder_escapedChar/Unicode-12    18.7ns ± 3%    12.6ns ± 1%  -32.81%  (p=0.000 n=15+13)
    Decoder_escapedChar/Newline-12    7.80ns ± 0%    3.75ns ± 0%  -51.94%  (p=0.000 n=14+14)
    tdakkota committed Jan 18, 2022
    Copy the full SHA
    fdf89f0 View commit details
    Browse the repository at this point in the history
  5. chore: resolve linter issues

    tdakkota committed Jan 18, 2022
    Copy the full SHA
    04caca1 View commit details
    Browse the repository at this point in the history