Memcpyopts working with cast ptr#7492
Draft
xunilrj wants to merge 4 commits into
Draft
Conversation
CodSpeed Performance ReportMerging #7492 will not alter performanceComparing Summary
|
d8ce3a7 to
3197688
Compare
8 tasks
ironcev
added a commit
that referenced
this pull request
Jul 15, 2026
## Description This PR optimizes several aspects of dynamic `std` types: - Hashing of string arrays, by properly accommodating initial `Hasher` buffer capacity for the string length prefix. - `Bytes::clear`, by reusing the already allocated buffer, the same way `Vec` is doing it. - Removing expensive double-allocation and memory-copy in the `Bytes::append_raw_slice`. - Adding `from_moved_...` constructors to types that own their buffers, for supporting taking ownership of the content without copying it. - Adding `from_ascii_str_array` constructor to `String` to create a string directly from string array without a need to first copy it to `str` via `from_str_array`. Additionally, the PR: - fixes invalid doc-comment examples on `String` methods, that were using a non-existing `String::push` method. ## Performance Improvements Performance improvements are given in the comment below. Although the PR obviously only removes runtime overhead, we still have some smaller numbers of regressions. Regressions are analyzed and have the same root-cause, the one we already encountered before. The leaner `Bytes::append_raw_slice` now leads to more inlining in hashing code like `sha256` that brings `CastPtr` to caller scope suppressing potential optimizations in the caller. The regressions on real-life o2 code are small and in contract methods that are not frequently used while improvements are bigger and in often use contract methods. Improving this particular issue will be done in #7492. Also, analysis of regressions in `sha256` and `keccak256` calls revealed another potentially high future performance improvement. E.g., hashing a `b256` using `s256` opcode directly costs ~60 gas units, while using `sha256` function will cost ~250 gas units. Similar values for are for `u8`, .., `u256` and even worse for larger structured types. One way to improve our hashing abstractions is to introduce a concept of "trivially hashable types", similar to trivially encodeable and decodeable. ## Checklist - [x] I have linked to any relevant issues. - [x] I have commented my code, particularly in hard-to-understand areas. - [x] I have updated the documentation where relevant (API docs, the reference, and the Sway book). - [ ] If my change requires substantial documentation changes, I have [requested support from the DevRel team](https://github.com/FuelLabs/devrel-requests/issues/new/choose) - [x] I have added tests that prove my fix is effective or that my feature works. - [ ] I have added (or requested a maintainer to add) the necessary `Breaking*` or `New Feature` labels where relevant. - [x] I have done my best to ensure that my PR adheres to [the Fuel Labs Code Review Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md). - [x] I have requested a review from the relevant team or maintainers.
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.
Description
Checklist
Breaking*orNew Featurelabels where relevant.