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.
This PR proposes a new way of handling
Instruction.KECCAK256
, when it's followed by some instructions that are not result dependent (no immediate pop of the value). It does it by moving the computation to a separate component with a separate thread to compute and placing a special marker inEvmStack
, so that when the value needs to be retrieved, it's retrieved from theOffHeapStack
. You can think of it as a CPU pipeline enabler, that does something behind the scenes and materialized value on the stack when ready.The preliminary benchmarks, that compare actual execution with the offloading, show the following difference
This, of course, does not take into consideration the overhead of checking in
EvmStack
whether or not the value is keptOffHeap
and detecting what to do. This is just a rough estimation what could be done.To reflect on a real example,
WrappedEth
was used: https://app.dedaub.com/ethereum/address/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2/disassembled Here are some of the sequences that followed SHA3A terrible case:
Changes
Types of changes
What types of changes does your code introduce?
Testing
Requires testing
If yes, did you write tests?
Notes on testing
Optional. Remove if not applicable.
Documentation
Requires documentation update
If yes, link the PR to the docs update or the issue with the details labeled
docs
. Remove if not applicable.Requires explanation in Release Notes
If yes, fill in the details here. Remove if not applicable.
Remarks
Optional. Remove if not applicable.