-
Notifications
You must be signed in to change notification settings - Fork 18k
sort: inline search convenience wrappers #41828
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
Conversation
The SearchInts, SearchFloat64s, and SearchStrings functions are convenience wrappers around the generic Search function, which takes a function parameter to determine truthfulness. However, since this passed function is utilized within a for loop, it cannot currently be inlined by the Go compiler, resulting in some degree of performance overhead (see golang#15561). This trivial commit manually inlines the Search function itself to these convenience wrappers, avoiding the function call overhead in the hot loop. It replaces 1 line of copy-pasted code with 10 lines of copy-pasted code, however it has a roughly 2x beneficial effect on performance as seen below: $ benchstat before.txt after.txt name old time/op new time/op delta SearchWrappers-16 84.7ns ± 1% 43.8ns ± 2% -48.34% (p=0.000 n=19+19) In the future, generics may enable similar perf gains while avoiding the minimal copypasta, but for now this small change can improve standard library performance and give the existing search "convenience wrappers" performance benefits as well as convenience. Updates golang#15561
This PR (HEAD: 403fd2c) has been imported to Gerrit for code review. Please visit https://go-review.googlesource.com/c/go/+/260018 to see it. Tip: You can toggle comments from me using the |
Message from Gobot Gobot: Patch Set 1: Congratulations on opening your first change. Thank you for your contribution! Next steps: Most changes in the Go project go through a few rounds of revision. This can be During May-July and Nov-Jan the Go project is in a code freeze, during which Please don’t reply on this GitHub thread. Visit golang.org/cl/260018. |
Message from Ian Lance Taylor: Patch Set 1: (1 comment) Please don’t reply on this GitHub thread. Visit golang.org/cl/260018. |
Message from Ian Lance Taylor: Patch Set 1: Code-Review-2 Please don’t reply on this GitHub thread. Visit golang.org/cl/260018. |
Message from Go Bot: Patch Set 1: Congratulations on opening your first change. Thank you for your contribution! Next steps: Most changes in the Go project go through a few rounds of revision. This can be During May-July and Nov-Jan the Go project is in a code freeze, during which Please don’t reply on this GitHub thread. Visit golang.org/cl/260018. |
The SearchInts, SearchFloat64s, and SearchStrings functions are
convenience wrappers around the generic Search function, which takes a
function parameter to determine truthfulness.
However, since this passed function is utilized within a for loop, it
cannot currently be inlined by the Go compiler, resulting in some degree
of performance overhead (see #15561).
This trivial commit manually inlines the Search function itself to these
convenience wrappers, avoiding the function call overhead in the hot
loop.
It replaces 1 line of copy-pasted code with 10 lines of copy-pasted
code, however it has a roughly 2x beneficial effect on performance as
seen below:
In the future, generics may enable similar perf gains while
avoiding the minimal copypasta, but for now this small change can
improve standard library performance and give the existing search
"convenience wrappers" performance benefits as well as convenience.
Updates #15561