Skip to content
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

Optimizations #752

Merged
merged 6 commits into from
Jul 6, 2024
Merged

Optimizations #752

merged 6 commits into from
Jul 6, 2024

Conversation

SethDusek
Copy link
Collaborator

For #737 and #738.

Reworked how the interpreter stores data, allowing it to borrow from context or store it in an Arc to avoid cloning for repeated uses of the same environment variable. Also optimized certain interpreter ops to reduce cloning (Coll.size, Coll.indices, etc).

This change also makes context creation much cheaper and re-uses context across inputs, making sigma-rust significantly faster for signing/validating transactions with a large number of inputs. Benchmarks will be posted below

This change reworks how ergotree-interpreter stores data and reduces cloning/heap allocations significantly. Variables can now borrow from their context instead of cloning. Instead of deep-copying types repeatedly we wrap types in Arc<T>. Also optimized certain interpreter ops like Coll.length
@SethDusek
Copy link
Collaborator Author

Signing a P2PK transaction (N inputs, N keys in Wallet):
Figure_1

Validation tests:

TXID upstream optimizations
dbd86fdce57f3a5124e88ec1ee4b7289e450e059e21a74c303bf13bf0b924945 (many P2PK inputs) 3.80s 0.37s
e2a90dc0f3f12d6fdc8437d72ae8cf801c25a8b1734544539eb63907629e0b4b (one input, complex script) 2.48s 0.65s
7aba75ecd50ac7224b5acfe4b6eaa4ca1bd716e7c44a69873df0c0a47f96c231 (many inputs, complex script) 1.79s 0.14s
1cff26af8f36f29d6876c092a70625c725213c668bcc7b67d05d658d2c4281ad (many inputs, complex script) 2.25s 0.67s

@coveralls
Copy link

coveralls commented Jun 10, 2024

Pull Request Test Coverage Report for Build 9447878182

Details

  • 477 of 575 (82.96%) changed or added relevant lines in 119 files are covered.
  • 239 unchanged lines in 63 files lost coverage.
  • Overall coverage decreased (-1.4%) to 78.998%

Changes Missing Coverage Covered Lines Changed/Added Lines %
ergo-lib/src/chain/transaction/ergo_transaction.rs 15 16 93.75%
ergo-lib/src/wallet.rs 0 1 0.0%
ergotree-interpreter/src/eval.rs 10 11 90.91%
ergotree-interpreter/src/eval/apply.rs 4 5 80.0%
ergotree-interpreter/src/eval/coll_map.rs 3 4 75.0%
ergotree-interpreter/src/eval/create_prove_dh_tuple.rs 0 1 0.0%
ergotree-interpreter/src/eval/deserialize_context.rs 2 3 66.67%
ergotree-interpreter/src/eval/env.rs 5 6 83.33%
ergotree-interpreter/src/eval/get_var.rs 2 3 66.67%
ergotree-interpreter/src/eval/sbox.rs 4 5 80.0%
Files with Coverage Reduction New Missed Lines %
ergotree-ir/src/mir/coll_fold.rs 1 82.76%
ergotree-interpreter/src/eval/exponentiate.rs 1 75.0%
ergotree-interpreter/src/eval/byte_array_to_long.rs 1 92.86%
ergotree-ir/src/mir/coll_filter.rs 1 88.24%
ergotree-ir/src/mir/coll_exists.rs 1 88.24%
ergotree-interpreter/src/eval/collection.rs 1 76.47%
ergotree-ir/src/mir/coll_by_index.rs 1 89.19%
ergotree-interpreter/src/eval/method_call.rs 1 80.0%
ergotree-interpreter/src/eval/scontext.rs 1 77.78%
ergotree-ir/src/mir/coll_forall.rs 1 82.35%
Totals Coverage Status
Change from base Build 9427239808: -1.4%
Covered Lines: 10803
Relevant Lines: 13675

💛 - Coveralls

@coveralls
Copy link

coveralls commented Jun 15, 2024

Pull Request Test Coverage Report for Build 9531205479

Details

  • 477 of 575 (82.96%) changed or added relevant lines in 119 files are covered.
  • 241 unchanged lines in 63 files lost coverage.
  • Overall coverage decreased (-1.4%) to 78.954%

Changes Missing Coverage Covered Lines Changed/Added Lines %
ergo-lib/src/chain/transaction/ergo_transaction.rs 15 16 93.75%
ergo-lib/src/wallet.rs 0 1 0.0%
ergotree-interpreter/src/eval.rs 10 11 90.91%
ergotree-interpreter/src/eval/apply.rs 4 5 80.0%
ergotree-interpreter/src/eval/coll_map.rs 3 4 75.0%
ergotree-interpreter/src/eval/create_prove_dh_tuple.rs 0 1 0.0%
ergotree-interpreter/src/eval/deserialize_context.rs 2 3 66.67%
ergotree-interpreter/src/eval/env.rs 5 6 83.33%
ergotree-interpreter/src/eval/get_var.rs 2 3 66.67%
ergotree-interpreter/src/eval/sbox.rs 4 5 80.0%
Files with Coverage Reduction New Missed Lines %
ergotree-ir/src/mir/coll_fold.rs 1 82.76%
ergotree-interpreter/src/eval/exponentiate.rs 1 75.0%
ergotree-interpreter/src/eval/byte_array_to_long.rs 1 92.86%
ergotree-ir/src/mir/coll_filter.rs 1 88.24%
ergotree-ir/src/mir/coll_exists.rs 1 88.24%
ergotree-interpreter/src/eval/collection.rs 1 76.47%
ergotree-ir/src/mir/coll_by_index.rs 1 89.19%
ergotree-interpreter/src/eval/method_call.rs 1 80.0%
ergotree-interpreter/src/eval/scontext.rs 1 77.78%
ergotree-ir/src/mir/coll_forall.rs 1 82.35%
Totals Coverage Status
Change from base Build 9427239808: -1.4%
Covered Lines: 10797
Relevant Lines: 13675

💛 - Coveralls

@coveralls
Copy link

coveralls commented Jun 16, 2024

Pull Request Test Coverage Report for Build 9531717301

Details

  • 478 of 574 (83.28%) changed or added relevant lines in 119 files are covered.
  • 245 unchanged lines in 63 files lost coverage.
  • Overall coverage decreased (-1.5%) to 78.924%

Changes Missing Coverage Covered Lines Changed/Added Lines %
ergo-lib/src/chain/transaction/ergo_transaction.rs 15 16 93.75%
ergo-lib/src/wallet.rs 0 1 0.0%
ergotree-interpreter/src/eval.rs 10 11 90.91%
ergotree-interpreter/src/eval/apply.rs 4 5 80.0%
ergotree-interpreter/src/eval/coll_map.rs 3 4 75.0%
ergotree-interpreter/src/eval/create_prove_dh_tuple.rs 0 1 0.0%
ergotree-interpreter/src/eval/deserialize_context.rs 2 3 66.67%
ergotree-interpreter/src/eval/env.rs 5 6 83.33%
ergotree-interpreter/src/eval/get_var.rs 2 3 66.67%
ergotree-interpreter/src/eval/sbox.rs 4 5 80.0%
Files with Coverage Reduction New Missed Lines %
ergotree-ir/src/mir/coll_fold.rs 1 82.76%
ergotree-interpreter/src/eval/exponentiate.rs 1 75.0%
ergotree-interpreter/src/eval/byte_array_to_long.rs 1 92.86%
ergotree-ir/src/mir/coll_filter.rs 1 88.24%
ergotree-ir/src/mir/coll_exists.rs 1 88.24%
ergotree-interpreter/src/eval/collection.rs 1 76.47%
ergotree-ir/src/mir/coll_by_index.rs 1 89.19%
ergotree-interpreter/src/eval/method_call.rs 1 80.0%
ergotree-interpreter/src/eval/scontext.rs 1 77.78%
ergotree-ir/src/mir/coll_forall.rs 1 82.35%
Totals Coverage Status
Change from base Build 9427239808: -1.5%
Covered Lines: 10792
Relevant Lines: 13674

💛 - Coveralls

@SethDusek SethDusek marked this pull request as ready for review June 18, 2024 09:58
@SethDusek SethDusek requested a review from kushti June 18, 2024 11:52
@SethDusek SethDusek merged commit f0b4136 into ergoplatform:develop Jul 6, 2024
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants