-
Notifications
You must be signed in to change notification settings - Fork 388
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(p/int256): Optimize int256
with two's complement implementation
#2846
Conversation
Codecov ReportAll modified and coverable lines are covered by tests ✅ 📢 Thoughts on this report? Let us know! |
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.
great stuff
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.
A few more comments, apologies
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.
partial, will carry on later
gnolang#2846) # Description This PR optimizes the implementation of `int256` type. Key changes include: - Changed from storing sign and value separately in the Int256 struct to an implementation using two's complement method. - This reduces unnecessary operations and improves overall performance. ## Performance Result - Basic arithmetic operations (addition, subtraction, etc.): About 3x performance improvement (based on Go benchmarks, may differ slightly in gno) - Division operations: Up to 5x performance decrease compared to the previous implementation (can be improved by directly manipulating array fields, but not applied to avoid duplication with p/demo/uint256) ## Additional improvements: - Increased test coverage to 95%. **This change is expected to improve performance for most int256 operations. However, please note the performance degradation in division operations.** ## See Also gnolang#2750 (review) <details><summary>Contributors' checklist...</summary> - [X] Added new tests, or not needed, or not feasible - [ ] Provided an example (e.g. screenshot) to aid review or the PR is self-explanatory - [ ] Updated the official documentation or not needed - [ ] No breaking changes were made, or a `BREAKING CHANGE: xxx` message was included in the description - [ ] Added references to related issues and PRs - [ ] Provided any useful hints for running manual tests - [ ] Added new benchmarks to [generated graphs](https://gnoland.github.io/benchmarks), if any. More info [here](https://github.com/gnolang/gno/blob/master/.benchmarks/README.md). </details> --------- Co-authored-by: Morgan <[email protected]>
#2846) # Description This PR optimizes the implementation of `int256` type. Key changes include: - Changed from storing sign and value separately in the Int256 struct to an implementation using two's complement method. - This reduces unnecessary operations and improves overall performance. ## Performance Result - Basic arithmetic operations (addition, subtraction, etc.): About 3x performance improvement (based on Go benchmarks, may differ slightly in gno) - Division operations: Up to 5x performance decrease compared to the previous implementation (can be improved by directly manipulating array fields, but not applied to avoid duplication with p/demo/uint256) ## Additional improvements: - Increased test coverage to 95%. **This change is expected to improve performance for most int256 operations. However, please note the performance degradation in division operations.** ## See Also #2750 (review) <details><summary>Contributors' checklist...</summary> - [X] Added new tests, or not needed, or not feasible - [ ] Provided an example (e.g. screenshot) to aid review or the PR is self-explanatory - [ ] Updated the official documentation or not needed - [ ] No breaking changes were made, or a `BREAKING CHANGE: xxx` message was included in the description - [ ] Added references to related issues and PRs - [ ] Provided any useful hints for running manual tests - [ ] Added new benchmarks to [generated graphs](https://gnoland.github.io/benchmarks), if any. More info [here](https://github.com/gnolang/gno/blob/master/.benchmarks/README.md). </details> --------- Co-authored-by: Morgan <[email protected]>
Description
This PR optimizes the implementation of
int256
type. Key changes include:Performance Result
Additional improvements:
This change is expected to improve performance for most int256 operations. However, please note the performance degradation in division operations.
See Also
#2750 (review)
Contributors' checklist...
BREAKING CHANGE: xxx
message was included in the description