Add MUL and DIV operations for EVM v2 with JMH benchmarks#10178
Closed
parthdagia05 wants to merge 1 commit intobesu-eth:mainfrom
Closed
Add MUL and DIV operations for EVM v2 with JMH benchmarks#10178parthdagia05 wants to merge 1 commit intobesu-eth:mainfrom
parthdagia05 wants to merge 1 commit intobesu-eth:mainfrom
Conversation
Implements MulOperationV2 and DivOperationV2 using the v2 stack data layout, along with corresponding JMH benchmarks showing ~4x performance improvement over v1 implementations. Signed-off-by: Parth Dagia <parth.24bcs10414@sst.scaler.com>
cf4b89e to
1783bfe
Compare
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
Continues the EVM v2 implementation started in #10105 and follows the pattern established in #10154.
This PR adds the
MUL(0x02) andDIV(0x04) arithmetic opcodes to the EVM v2long[]-based stack.Changes
MUL(0x02) andDIV(0x04) opcodes for the EVM v2long[]-based stack, with zero heap allocation on the hot pathMulOperationV2andDivOperationV2operation classes utilizingStackArithmeticfor 256-bit arithmetic directly on the flatlong[]operand stackMulOperationBenchmarkV2,DivOperationBenchmarkV2) for both operationsBenchmarks
Baseline (v1 on main)
Benchmark (caseName) Mode Cnt Score Error Units
MulOperationBenchmark.executeOperation N/A avgt 15 225.036 ± 22.024 ns/op
DivOperationBenchmark.executeOperation DIV_FULL_RANDOM avgt 15 215.429 ± 135.653 ns/op
With this PR (v2)
Benchmark (caseName) Mode Cnt Score Error Units
MulOperationBenchmarkV2.executeOperation N/A avgt 15 58.162 ± 4.659 ns/op
DivOperationBenchmarkV2.executeOperation N/A avgt 15 53.422 ± 3.602 ns/op
Summary
V2 also shows significantly lower variance, indicating more consistent performance.
Thanks for sending a pull request! Have you done the following?
doc-change-requiredlabel to this PR if updates are required.Locally, you can run these tests to catch failures early:
./gradlew spotlessApply./gradlew build./gradlew acceptanceTest./gradlew integrationTest./gradlew ethereum:referenceTests:referenceTests