go: Eliminate memory allocations and reduce Decode time by 26%#749
Open
willbeason wants to merge 1 commit intogoogle:mainfrom
Open
go: Eliminate memory allocations and reduce Decode time by 26%#749willbeason wants to merge 1 commit intogoogle:mainfrom
willbeason wants to merge 1 commit intogoogle:mainfrom
Conversation
Contributor
Author
|
After this PR, I have another that reduces Decode time further, to ~161.4ns/op. It's a separate optimization so I've split it out. |
Use handwritten version of strings.Map. This avoids having to dynamically allocate and resize the byte slice, and allows the compiler to fully remove memory allocations from the operation. As a result, the time spent in StripCode is almost completely removed.
Contributor
Author
|
I see actually that StripCode() is part of the public API, so it's probably better that I don't change it and possibly break someone. I've removed that part of the change. It's still a significant speedup. Future performance improvements don't rely on it (yet), so I'm not worried about touching that now. |
Contributor
Author
|
On that note, I have a third optimization that gets us to ~75ns/op for Decode. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Use handwritten version of strings.Map logic. This avoids having to dynamically allocate and resize the byte slice, and allows the compiler to fully remove memory allocations from the operation. As a result, the time spent in StripCode is almost completely removed.
Before:
After:
CPU Profiles:
Before:
After: