Skip to content

bench: instrument hash counts for verifier#19

Merged
jonathanpwang merged 40 commits into
mainfrom
feat/instrument_benches
May 27, 2024
Merged

bench: instrument hash counts for verifier#19
jonathanpwang merged 40 commits into
mainfrom
feat/instrument_benches

Conversation

@jonathanpwang
Copy link
Copy Markdown
Contributor

@jonathanpwang jonathanpwang commented May 15, 2024

I was able to find a way to do this without forking Plonky3. The two traits that need to be implemented for PCS hashes are PseudoCompressionFunction and CryptographicHasher. I make a wrapper struct Instrumented that does the normal operation and also updates the counter. For logging / debugging purposes, I store the lengths of inputs by the input type using type_name. To translate into actual counts, some specific logic about the absorb rate, etc of the specific hash (currently poseidon2) are used.

Notes:

  • CryptographicHasher is for flat hashing long arrays of inputs. I think this is mostly used on the merkle leaf.
  • PseudoCompressionFunction is what is used on the other layers of merkle tree, since it's designed so 2-to-1 hashes have same input and output shape.

What is currently benchmarked: given a matrix with height rows and field_width + 1 columns, we make two AIRs:

  1. Just one big trace matrix, and with a receive interaction (this adds 2 virtual columns and gates for logup partial sum) where the receive is on the vector of field_width with count the column 0 value.
  2. Treat the height-by-field_width matrix as a cached trace, so it is committed to separately. The count matrix that is height-by-1 is a separate matrix that is committed.

We run both of these and log the hashes used, where we count based on the number of Poseidon2 permutations done.

  • Add output to a csv so we can just on a bunch and post-process in spreadsheet
  • Modify bench to time stages of proving. This should not be instrumented because the counter is pretty slow.
  • Instrument challenger -- this is where grinding is done

jonathanpwang and others added 22 commits May 9, 2024 20:15
Merge branch 'main' into feat/main_trace_parts
* feat: add backend readme

* fix: link

* fix: link

* fix: latex

* chore: fix typo

* chore: add code references

---------

Co-authored-by: Yi Sun <yi-sun@users.noreply.github.com>
No need for tracing on non-benchmark tests
* fix: `eval_permutation_constraints` must handle partitioned_main

* feat: integration test with cached trace

* fix: forgot to add test files

* chore: rename folder to `partitioned_sum_air`

* chore: add test utils module

* feat: add indexless cached lookup test for partitioned Air with interactions

* chore: fix typo

* feat: `add_main_matrix(width)` placeholder with mat width

* chore: switch from RefCell to Arc Mutex
@jonathanpwang
Copy link
Copy Markdown
Contributor Author

jonathanpwang commented May 15, 2024

Some preliminary stats:

log_blowup_factor: 3, num_queries: 33, proof_of_work_bits: 16
Field width: 1, height: 65536 = 1 << 16
Without cached trace:
Hash: (p3_baby_bear::baby_bear::BabyBear, [p3_baby_bear::baby_bear::BabyBear; 8]), Count: 627
Compress: [p3_baby_bear::baby_bear::BabyBear; 8], Count: 7425
Total Count: 8052
With cached trace:
Hash: (p3_baby_bear::baby_bear::BabyBear, [p3_baby_bear::baby_bear::BabyBear; 8]), Count: 660
Compress: [p3_baby_bear::baby_bear::BabyBear; 8], Count: 8052
Total Count: 8712
(Difference in total count: 660)


Field width: 1, height: 1048576 = 1 << 20
Without cached trace:
Hash: (p3_baby_bear::baby_bear::BabyBear, [p3_baby_bear::baby_bear::BabyBear; 8]), Count: 759
Compress: [p3_baby_bear::baby_bear::BabyBear; 8], Count: 10527
Total Count: 11286
With cached trace:
test cached_lookup::instrumented::bench_cached_trace has been running for over 60 seconds
Hash: (p3_baby_bear::baby_bear::BabyBear, [p3_baby_bear::baby_bear::BabyBear; 8]), Count: 792
Compress: [p3_baby_bear::baby_bear::BabyBear; 8], Count: 11286
Total Count: 12078
(Difference in total count: 792)

@jonathanpwang jonathanpwang requested a review from yi-sun May 15, 2024 15:46
@yi-sun
Copy link
Copy Markdown
Collaborator

yi-sun commented May 15, 2024

To confirm, in case 2, is the logUp still done?

@jonathanpwang jonathanpwang force-pushed the feat/instrument_benches branch from 4467ed8 to 8163e1c Compare May 15, 2024 17:34
@jonathanpwang
Copy link
Copy Markdown
Contributor Author

@jonathanpwang jonathanpwang marked this pull request as ready for review May 16, 2024 04:49
@yi-sun yi-sun requested a review from nyunyunyunyu May 16, 2024 19:21
Comment thread stark-backend/tests/cached_lookup/prove.rs
* fix: p3-maybe-rayon `parallel` feature was not on

feature is `parallel` not `rayon`

* chore: simplify code
Moved `run_simple_test` into `config::baby_bear_poseidon2` because it
depends on the engine
@jonathanpwang
Copy link
Copy Markdown
Contributor Author

@OsamaAlkhodairy FYI I'm going to merge this one.

I added some stuff to test-utils/src/config to start some tooling. I added a StarkEngine trait with the idea we can make a different engine for each field x hash combo. I moved your run_simple_test function to config::baby_bear_poseidon2 because the test depends on the choice of field (babybear) and hash (poseidon2), so I added it both as a function in StarkEngine trait but also it's still nice to have the do-it-all command you had before, so I simply moved its location.

@jonathanpwang jonathanpwang merged commit cc56990 into main May 27, 2024
@jonathanpwang jonathanpwang deleted the feat/instrument_benches branch May 27, 2024 19:57
luffykai pushed a commit that referenced this pull request Dec 13, 2024
* wip: refactor to use commit pointers

* wip: permutation trace from partitioned main

* wip: fix previous rebase

* wip: show new interface

* chore: rename ChipsetProver to MultiTraceStarkProver

* feat: quotient refactor done

* feat: prover done

* chore: split out prove function into general post-trace part

* feat: finished verifier

* feat: keygen builder

* chore: move fib triple test into same file

* feat: preliminary docs on STARK backend scope/support (#16)

* feat: add backend readme

* fix: link

* fix: link

* fix: latex

* chore: fix typo

* chore: add code references

---------

Co-authored-by: Yi Sun <yi-sun@users.noreply.github.com>

* chore: make DebugBuilder `after_challenge` consistent with other builders

* chore: clean up if statement

* chore: fix fmt

* chore: fix previous merge and remove tracing

No need for tracing on non-benchmark tests

* chore: fix lint

* feat: Partitioned Air Builder (#17)

* fix: `eval_permutation_constraints` must handle partitioned_main

* feat: integration test with cached trace

* fix: forgot to add test files

* chore: rename folder to `partitioned_sum_air`

* chore: add test utils module

* feat: add indexless cached lookup test for partitioned Air with interactions

* chore: fix typo

* feat: `add_main_matrix(width)` placeholder with mat width

* chore: switch from RefCell to Arc Mutex

* chore: address review comment

* chore: rename `MatrixCommitmentPointers`

* feat: add instrumented hash/compress

* chore: return instrument counters since fields are private

* feat: prelim verifier instrumentation

* feat: full benchmark writing to csv

* chore: turn off instrumenting during proving

* fix: instrument not properly on

* fix: flush writer

* chore: clean up config module

* chore(chips): remove old test config module

* feat: add `StarkEngine` for convenience

* feat: add cached_lookup prover benchmark

* fix: p3-maybe-rayon `parallel` feature was not on (#28)

* fix: p3-maybe-rayon `parallel` feature was not on

feature is `parallel` not `rayon`

* chore: simplify code

---------

Co-authored-by: Yi Sun <yi-sun@users.noreply.github.com>
jonathanpwang added a commit that referenced this pull request Mar 9, 2025
jonathanpwang added a commit that referenced this pull request Mar 9, 2025
…ications (#29)

* [fix] Fix P256 `GENERATOR` and `double_impl` (#2)

* fix p256-generator

* add host tests for ecc

* Use private repo for stark-backend (#11)

* temp(ci): switch riscv AMI for runner (#14)

* [chore] Update DSL verify to match plonky3 (#5)

* Update DSL verify to match plonky3

* fix: transpose state for p3-keccak tracegen

* chore: add comment linking plonky3 issue

* Update stark-backend commit

---------

Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>

* Use full commit in openvm-stark-backend revision (#18)

* chore: update `stark-backend` commit (#19)

* [fix] `Rv32BaseAluAdapterAir` unconstrained register reads (#25)

* Create pull_request_template.md (#26)

* [fix] Poseidon2 verify_batch opcode can send to execution bus for invalid rows (#17)

* [fix] Rust memory allocation overflow (#13)

* Fix and add test

* Fix lint error

* Update crates/toolchain/platform/src/memory.rs

---------

Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>

* [fix] Constrain `final_hash` in sha256 air to address audit finding (#12)

* [fix] properly constrain final_hash in sha256 air

* Add negative test for underconstrained final_hash. It was manually checked that this new test would have passed before the change.

* [fix] IsLtArraySubAir (#9)

* add fix

* add tests

* remove diff_val

* chore: update comment

* chore: no try_inverse

---------

Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>

* [fix] `Rv32BaseAluAdapterAir` immediate limbs not range-checked (#8)

* fix local_as2

* range check imm limbs

* add count for range check

* add test for unconstrained imm limb

* fix MemoryTester chip trace height

* add test for unconstrained rs2 read

* Revert "fix local_as2"

This reverts commit ef83121bf1796874affaca4682dbb4f9f051b079.

* Revert "add count for range check"

This reverts commit 5252444dfeaf41e7c336648ad92c4736f48ead9d.

* Revert "range check imm limbs"

This reverts commit 2e2937536069ae66849fdf7bba9ea509065d17fe.

* fix unconstrained imm limbs

* fix local_rs2_as test

* fix lint

* Update extensions/rv32im/circuit/src/base_alu/tests.rs

---------

Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>

* fix: fixed SHA2 subair trace generation and the testing (#28)

* fix: loadstore sign of immediate (#4)

* [fix] Fix P256 `GENERATOR` and `double_impl` (#2)

* fix p256-generator

* add host tests for ecc

* fix: loadstore sign of immediate

* fix: prints and test

* fix: load_sign_extend tests

* Update docs/specs/ISA.md

* clarify notation and sign extension in ISA spec

* fix reveal transpiler spec

---------

Co-authored-by: Manh Dinh <manh9203@gmail.com>
Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>

* fix transpiler

* fix loadstore adapter

* fix store transpiler

* fix tests

* add e2e test

* fix docs

* fix: jalr imm_sign (#30)

* optimize record struct packing

* chore: use from_bool

* chore: derive_more feature in bench

* fix bench

* fix

---------

Co-authored-by: Xinding Wei <weixinding@gmail.com>
Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>
Co-authored-by: Golovanov399 <Golovanov12345@gmail.com>
Co-authored-by: Avaneesh-axiom <avaneeshk@intrinsictech.xyz>
Co-authored-by: Arayi Khalatyan <127004086+arayikhalatyan@users.noreply.github.com>
jonathanpwang added a commit that referenced this pull request Mar 9, 2025
* [fix] Fix P256 `GENERATOR` and `double_impl` (#2)

* fix p256-generator

* add host tests for ecc

* fix: hintstore mem_ptr and rem_words overflow

* fix: is_buffer_start constrain

* Use private repo for stark-backend (#11)

* temp(ci): switch riscv AMI for runner (#14)

* [chore] Update DSL verify to match plonky3 (#5)

* Update DSL verify to match plonky3

* fix: transpose state for p3-keccak tracegen

* chore: add comment linking plonky3 issue

* Update stark-backend commit

---------

Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>

* Use full commit in openvm-stark-backend revision (#18)

* chore: update `stark-backend` commit (#19)

* [fix] `Rv32BaseAluAdapterAir` unconstrained register reads (#25)

* Create pull_request_template.md (#26)

* [fix] Poseidon2 verify_batch opcode can send to execution bus for invalid rows (#17)

* [fix] Rust memory allocation overflow (#13)

* Fix and add test

* Fix lint error

* Update crates/toolchain/platform/src/memory.rs

---------

Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>

* [fix] Constrain `final_hash` in sha256 air to address audit finding (#12)

* [fix] properly constrain final_hash in sha256 air

* Add negative test for underconstrained final_hash. It was manually checked that this new test would have passed before the change.

* [fix] IsLtArraySubAir (#9)

* add fix

* add tests

* remove diff_val

* chore: update comment

* chore: no try_inverse

---------

Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>

* [fix] `Rv32BaseAluAdapterAir` immediate limbs not range-checked (#8)

* fix local_as2

* range check imm limbs

* add count for range check

* add test for unconstrained imm limb

* fix MemoryTester chip trace height

* add test for unconstrained rs2 read

* Revert "fix local_as2"

This reverts commit ef83121bf1796874affaca4682dbb4f9f051b079.

* Revert "add count for range check"

This reverts commit 5252444dfeaf41e7c336648ad92c4736f48ead9d.

* Revert "range check imm limbs"

This reverts commit 2e2937536069ae66849fdf7bba9ea509065d17fe.

* fix unconstrained imm limbs

* fix local_rs2_as test

* fix lint

* Update extensions/rv32im/circuit/src/base_alu/tests.rs

---------

Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>

* fix: fixed SHA2 subair trace generation and the testing (#28)

* fix: loadstore sign of immediate (#4)

* [fix] Fix P256 `GENERATOR` and `double_impl` (#2)

* fix p256-generator

* add host tests for ecc

* fix: loadstore sign of immediate

* fix: prints and test

* fix: load_sign_extend tests

* Update docs/specs/ISA.md

* clarify notation and sign extension in ISA spec

* fix reveal transpiler spec

---------

Co-authored-by: Manh Dinh <manh9203@gmail.com>
Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>

* seperate the fixes

* fix naming

* fix: lints

---------

Co-authored-by: Manh Dinh <manh9203@gmail.com>
Co-authored-by: Xinding Wei <weixinding@gmail.com>
Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>
Co-authored-by: Golovanov399 <Golovanov12345@gmail.com>
Co-authored-by: Avaneesh-axiom <avaneeshk@intrinsictech.xyz>
jonathanpwang added a commit that referenced this pull request Mar 9, 2025
jonathanpwang added a commit that referenced this pull request Mar 9, 2025
…ications (#29)

* [fix] Fix P256 `GENERATOR` and `double_impl` (#2)

* fix p256-generator

* add host tests for ecc

* Use private repo for stark-backend (#11)

* temp(ci): switch riscv AMI for runner (#14)

* [chore] Update DSL verify to match plonky3 (#5)

* Update DSL verify to match plonky3

* fix: transpose state for p3-keccak tracegen

* chore: add comment linking plonky3 issue

* Update stark-backend commit

---------

Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>

* Use full commit in openvm-stark-backend revision (#18)

* chore: update `stark-backend` commit (#19)

* [fix] `Rv32BaseAluAdapterAir` unconstrained register reads (#25)

* Create pull_request_template.md (#26)

* [fix] Poseidon2 verify_batch opcode can send to execution bus for invalid rows (#17)

* [fix] Rust memory allocation overflow (#13)

* Fix and add test

* Fix lint error

* Update crates/toolchain/platform/src/memory.rs

---------

Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>

* [fix] Constrain `final_hash` in sha256 air to address audit finding (#12)

* [fix] properly constrain final_hash in sha256 air

* Add negative test for underconstrained final_hash. It was manually checked that this new test would have passed before the change.

* [fix] IsLtArraySubAir (#9)

* add fix

* add tests

* remove diff_val

* chore: update comment

* chore: no try_inverse

---------

Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>

* [fix] `Rv32BaseAluAdapterAir` immediate limbs not range-checked (#8)

* fix local_as2

* range check imm limbs

* add count for range check

* add test for unconstrained imm limb

* fix MemoryTester chip trace height

* add test for unconstrained rs2 read

* Revert "fix local_as2"

This reverts commit ef83121bf1796874affaca4682dbb4f9f051b079.

* Revert "add count for range check"

This reverts commit 5252444dfeaf41e7c336648ad92c4736f48ead9d.

* Revert "range check imm limbs"

This reverts commit 2e2937536069ae66849fdf7bba9ea509065d17fe.

* fix unconstrained imm limbs

* fix local_rs2_as test

* fix lint

* Update extensions/rv32im/circuit/src/base_alu/tests.rs

---------

Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>

* fix: fixed SHA2 subair trace generation and the testing (#28)

* fix: loadstore sign of immediate (#4)

* [fix] Fix P256 `GENERATOR` and `double_impl` (#2)

* fix p256-generator

* add host tests for ecc

* fix: loadstore sign of immediate

* fix: prints and test

* fix: load_sign_extend tests

* Update docs/specs/ISA.md

* clarify notation and sign extension in ISA spec

* fix reveal transpiler spec

---------

Co-authored-by: Manh Dinh <manh9203@gmail.com>
Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>

* fix transpiler

* fix loadstore adapter

* fix store transpiler

* fix tests

* add e2e test

* fix docs

* fix: jalr imm_sign (#30)

* optimize record struct packing

* chore: use from_bool

* chore: derive_more feature in bench

* fix bench

* fix

---------

Co-authored-by: Xinding Wei <weixinding@gmail.com>
Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>
Co-authored-by: Golovanov399 <Golovanov12345@gmail.com>
Co-authored-by: Avaneesh-axiom <avaneeshk@intrinsictech.xyz>
Co-authored-by: Arayi Khalatyan <127004086+arayikhalatyan@users.noreply.github.com>
jonathanpwang added a commit that referenced this pull request Mar 9, 2025
* [fix] Fix P256 `GENERATOR` and `double_impl` (#2)

* fix p256-generator

* add host tests for ecc

* fix: hintstore mem_ptr and rem_words overflow

* fix: is_buffer_start constrain

* Use private repo for stark-backend (#11)

* temp(ci): switch riscv AMI for runner (#14)

* [chore] Update DSL verify to match plonky3 (#5)

* Update DSL verify to match plonky3

* fix: transpose state for p3-keccak tracegen

* chore: add comment linking plonky3 issue

* Update stark-backend commit

---------

Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>

* Use full commit in openvm-stark-backend revision (#18)

* chore: update `stark-backend` commit (#19)

* [fix] `Rv32BaseAluAdapterAir` unconstrained register reads (#25)

* Create pull_request_template.md (#26)

* [fix] Poseidon2 verify_batch opcode can send to execution bus for invalid rows (#17)

* [fix] Rust memory allocation overflow (#13)

* Fix and add test

* Fix lint error

* Update crates/toolchain/platform/src/memory.rs

---------

Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>

* [fix] Constrain `final_hash` in sha256 air to address audit finding (#12)

* [fix] properly constrain final_hash in sha256 air

* Add negative test for underconstrained final_hash. It was manually checked that this new test would have passed before the change.

* [fix] IsLtArraySubAir (#9)

* add fix

* add tests

* remove diff_val

* chore: update comment

* chore: no try_inverse

---------

Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>

* [fix] `Rv32BaseAluAdapterAir` immediate limbs not range-checked (#8)

* fix local_as2

* range check imm limbs

* add count for range check

* add test for unconstrained imm limb

* fix MemoryTester chip trace height

* add test for unconstrained rs2 read

* Revert "fix local_as2"

This reverts commit ef83121bf1796874affaca4682dbb4f9f051b079.

* Revert "add count for range check"

This reverts commit 5252444dfeaf41e7c336648ad92c4736f48ead9d.

* Revert "range check imm limbs"

This reverts commit 2e2937536069ae66849fdf7bba9ea509065d17fe.

* fix unconstrained imm limbs

* fix local_rs2_as test

* fix lint

* Update extensions/rv32im/circuit/src/base_alu/tests.rs

---------

Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>

* fix: fixed SHA2 subair trace generation and the testing (#28)

* fix: loadstore sign of immediate (#4)

* [fix] Fix P256 `GENERATOR` and `double_impl` (#2)

* fix p256-generator

* add host tests for ecc

* fix: loadstore sign of immediate

* fix: prints and test

* fix: load_sign_extend tests

* Update docs/specs/ISA.md

* clarify notation and sign extension in ISA spec

* fix reveal transpiler spec

---------

Co-authored-by: Manh Dinh <manh9203@gmail.com>
Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>

* seperate the fixes

* fix naming

* fix: lints

---------

Co-authored-by: Manh Dinh <manh9203@gmail.com>
Co-authored-by: Xinding Wei <weixinding@gmail.com>
Co-authored-by: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com>
Co-authored-by: Golovanov399 <Golovanov12345@gmail.com>
Co-authored-by: Avaneesh-axiom <avaneeshk@intrinsictech.xyz>
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.

2 participants