-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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
Use closure for init constraints #2939
Merged
Merged
Changes from all commits
Commits
Show all changes
12 commits
Select commit
Hold shift + click to select a range
84a9d8f
use closure for init constraints
CanardMandarin 36a8578
Merge branch 'master' into CanardMandarin/use-closure-for-init-constr…
acheroncrypto ab2b91f
Use closure for the remaining `init`s
acheroncrypto 8e5ecce
Add `#[inline(never)]` before closures
acheroncrypto 0f1afbf
Update CHANGELOG
acheroncrypto ae8d46c
Update bench
acheroncrypto 2efef72
Remove `#[inline(never)]`s
acheroncrypto 068dfe0
Update bench
acheroncrypto 9f515d7
Merge branch 'master' into CanardMandarin/master
acheroncrypto 8c2e6db
Re-add `#[inline(never)]`s
acheroncrypto f243fba
Update bench
acheroncrypto abe47c7
Update notable bench changes
acheroncrypto File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains 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
This file contains 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
This file contains 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
This file contains 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
This file contains 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
Oops, something went wrong.
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I was planning to merge this today, but the bench results show ~38% increase in binary size with this change. Always using closures for
init
constraints might not be what we want. Decreasing stack usage is certainly more important than binary size, but the difference is still massive.Thoughts?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would kinda expect this might happen due to applying
inline(never)
: Closures benefit a lot from being able to inline and remove any redundant logic inside them.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks! I removed the
inline(never)
s, but it had very little effect on the binary size (+300k rather than +305k).What we want is to inline them as long as the
try_accounts
function doesn't use more than 4096 bytes of stack. Not sure if there is a simple way to make the compiler care about the stack limit when deciding whether to inline or not.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if inline had no major contribution in the 38% increase, what else could have caused such a difference ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The bench program is a rather unusual program that has 90
init
s which skews the results. The binary size difference won't be as bad for regular programs.I think we can get this in as is, since decreasing stack usage of
try_accounts
is very valuable currently (at least until we get dynamic stack frames).