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

Conversation

tdakkota
Copy link
Member

Decoder_StrBytes/Plain/1b-12               317MB/s ± 0%   317MB/s ± 1%     ~     (p=0.578 n=13+15)
Decoder_StrBytes/Plain/8b-12               883MB/s ± 1%   856MB/s ± 1%   -3.15%  (p=0.000 n=15+15)
Decoder_StrBytes/Plain/16b-12             1.30GB/s ± 0%  1.30GB/s ± 0%     ~     (p=0.892 n=15+13)
Decoder_StrBytes/Plain/64b-12             2.36GB/s ± 0%  2.35GB/s ± 0%     ~     (p=0.078 n=13+15)
Decoder_StrBytes/Plain/128b-12            2.81GB/s ± 2%  2.85GB/s ± 0%   +1.20%  (p=0.000 n=15+12)
Decoder_StrBytes/Plain/1024b-12           3.48GB/s ± 0%  3.48GB/s ± 0%     ~     (p=0.377 n=15+14)
Decoder_StrBytes/EscapedNewline/2b-12     92.5MB/s ± 1%  87.1MB/s ± 1%   -5.87%  (p=0.000 n=14+15)
Decoder_StrBytes/EscapedNewline/16b-12     131MB/s ± 1%   162MB/s ± 1%  +24.08%  (p=0.000 n=15+14)
Decoder_StrBytes/EscapedNewline/32b-12     134MB/s ± 0%   160MB/s ± 2%  +19.03%  (p=0.000 n=14+15)
Decoder_StrBytes/EscapedNewline/128b-12    155MB/s ± 0%   191MB/s ± 0%  +23.35%  (p=0.000 n=12+14)
Decoder_StrBytes/EscapedNewline/256b-12    165MB/s ± 0%   208MB/s ± 0%  +25.94%  (p=0.000 n=12+14)
Decoder_StrBytes/EscapedNewline/2048b-12   182MB/s ± 0%   234MB/s ± 0%  +28.96%  (p=0.000 n=15+12)
Decoder_StrBytes/EscapedUnicode/6b-12      140MB/s ± 0%   141MB/s ± 1%   +0.90%  (p=0.000 n=13+15)
Decoder_StrBytes/EscapedUnicode/48b-12     217MB/s ± 2%   250MB/s ± 1%  +15.36%  (p=0.000 n=15+15)
Decoder_StrBytes/EscapedUnicode/96b-12     220MB/s ± 2%   255MB/s ± 1%  +15.78%  (p=0.000 n=15+15)
Decoder_StrBytes/EscapedUnicode/384b-12    236MB/s ± 2%   286MB/s ± 0%  +21.27%  (p=0.000 n=15+14)
Decoder_StrBytes/EscapedUnicode/768b-12    242MB/s ± 1%   298MB/s ± 0%  +23.10%  (p=0.000 n=13+15)
Decoder_StrBytes/EscapedUnicode/6144b-12   253MB/s ± 2%   315MB/s ± 1%  +24.51%  (p=0.000 n=15+14)
Decoder_StrBytes/Mixed/21b-12              160MB/s ± 1%   224MB/s ± 0%  +39.75%  (p=0.000 n=15+14)
Decoder_StrBytes/Mixed/168b-12             198MB/s ± 2%   362MB/s ± 1%  +83.42%  (p=0.000 n=14+14)
Decoder_StrBytes/Mixed/336b-12             210MB/s ± 2%   418MB/s ± 1%  +98.84%  (p=0.000 n=15+15)

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)
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)
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)
@codecov
Copy link

codecov bot commented Jan 18, 2022

Codecov Report

Merging #28 (04caca1) into main (0deeee4) will not change coverage.
The diff coverage is 100.00%.

Impacted file tree graph

@@            Coverage Diff            @@
##              main       #28   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           33        33           
  Lines         2220      2242   +22     
=========================================
+ Hits          2220      2242   +22     
Impacted Files Coverage Δ
dec.go 100.00% <ø> (ø)
dec_skip.go 100.00% <100.00%> (ø)
dec_str.go 100.00% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 0deeee4...04caca1. Read the comment docs.

@ernado ernado merged commit 4f7480a into go-faster:main Jan 18, 2022
@tdakkota tdakkota deleted the fix/string-benchmark branch January 18, 2022 14:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants