Skip to content

feat: add instruction count table to openvm-prof#2342

Merged
876pol merged 5 commits into
mainfrom
prof-instruction-count
Jan 12, 2026
Merged

feat: add instruction count table to openvm-prof#2342
876pol merged 5 commits into
mainfrom
prof-instruction-count

Conversation

@876pol

@876pol 876pol commented Jan 6, 2026

Copy link
Copy Markdown
Contributor

Resolves INT-5845.

Only the metric post-processor is edited. To generate the metrics.json with the instruction count information, run with the perf-metrics feature. For instance, to run the fibonacci test and generate the instruction count table, run

OUTPUT_PATH="metrics.json" GUEST_SYMBOLS_PATH="guest.syms" cargo run --release --bin fibonacci --features perf-metrics
openvm-prof --json-paths metrics.json

The generated aggregated table for fibonacci (for n=3000000) looks like:

group opcode frequency
fibonacci_program ADD 27,000,065
fibonacci_program SLTU 9,000,002
fibonacci_program BEQ 3,000,008
fibonacci_program BNE 3,000,005
fibonacci_program JAL 3,000,002
fibonacci_program STOREW 32
fibonacci_program LOADW 21
fibonacci_program LUI 17
fibonacci_program JALR 13
fibonacci_program STOREB 10
fibonacci_program AUIPC 9
fibonacci_program LOADBU 7
fibonacci_program AND 4
fibonacci_program OR 3
fibonacci_program BLT 2
fibonacci_program BLTU 2
fibonacci_program HINT_BUFFER 2
fibonacci_program SUB 1
fibonacci_program PHANTOM 1
fibonacci_program BGEU 1
fibonacci_program HINT_STOREW 1

The detailed table with the breakdown by segment looks like:

group opcode segment frequency
fibonacci_program ADD 0 3,655,773
fibonacci_program SLTU 0 1,218,584
fibonacci_program BEQ 0 406,197
fibonacci_program BNE 0 406,196
fibonacci_program JAL 0 406,195
fibonacci_program LUI 0 11
fibonacci_program STOREW 0 11
fibonacci_program LOADW 0 10
fibonacci_program AUIPC 0 5
fibonacci_program JALR 0 4
fibonacci_program AND 0 3
fibonacci_program OR 0 3
fibonacci_program BLTU 0 2
fibonacci_program HINT_BUFFER 0 2
fibonacci_program BGEU 0 1
fibonacci_program HINT_STOREW 0 1
fibonacci_program PHANTOM 0 1
fibonacci_program SUB 0 1
fibonacci_program ADD 1 3,657,000
fibonacci_program SLTU 1 1,219,000
fibonacci_program BNE 1 406,334
fibonacci_program BEQ 1 406,333
fibonacci_program JAL 1 406,333
fibonacci_program ADD 2 3,656,999
fibonacci_program SLTU 2 1,219,001
fibonacci_program JAL 2 406,334
fibonacci_program BEQ 2 406,333
fibonacci_program BNE 2 406,333
fibonacci_program ADD 3 3,657,001
fibonacci_program SLTU 3 1,218,999
fibonacci_program BEQ 3 406,334
fibonacci_program BNE 3 406,333
fibonacci_program JAL 3 406,333
fibonacci_program ADD 4 3,657,000
fibonacci_program SLTU 4 1,219,000
fibonacci_program BNE 4 406,334
fibonacci_program BEQ 4 406,333
fibonacci_program JAL 4 406,333
fibonacci_program ADD 5 3,656,999
fibonacci_program SLTU 5 1,219,001
fibonacci_program JAL 5 406,334
fibonacci_program BEQ 5 406,333
fibonacci_program BNE 5 406,333
fibonacci_program ADD 6 3,657,001
fibonacci_program SLTU 6 1,218,999
fibonacci_program BEQ 6 406,334
fibonacci_program BNE 6 406,333
fibonacci_program JAL 6 406,333
fibonacci_program ADD 7 1,402,292
fibonacci_program SLTU 7 467,418
fibonacci_program BEQ 7 155,811
fibonacci_program BNE 7 155,809
fibonacci_program JAL 7 155,807
fibonacci_program STOREW 7 21
fibonacci_program LOADW 7 11
fibonacci_program STOREB 7 10
fibonacci_program JALR 7 9
fibonacci_program LOADBU 7 7
fibonacci_program LUI 7 6
fibonacci_program AUIPC 7 4
fibonacci_program BLT 7 2
fibonacci_program AND 7 1

@github-actions

This comment has been minimized.

@876pol 876pol marked this pull request as ready for review January 6, 2026 22:01
@jonathanpwang

Copy link
Copy Markdown
Contributor

Can you provide instructions (in this PR desc for now) on how to generate the metrics.json needed by openvm-prof?
E.g., what feature flags to enable?

Provide explicit commands for one particular case to test.

After it looks good, we can update the benchmark docs

@876pol

876pol commented Jan 7, 2026

Copy link
Copy Markdown
Contributor Author

I've just updated the description with the instructions

@jonathanpwang

Copy link
Copy Markdown
Contributor

Can you remove the dsl_ir column and run it on an example with multiple segments (just a larger fibonacci program would do it)? Then give a top level table where the instruction counts are aggregated across all segments. Then more detailed per-segment instrumentation.

@jonathanpwang

Copy link
Copy Markdown
Contributor

@876pol can you fix the lint? Format on save is likely not being triggered because you need to install Rust nightly: rustup install nightly.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@jonathanpwang jonathanpwang left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

Can you update the documentation for benchmarks to include a section on profiling detailed instruction count?

Comment thread crates/prof/src/main.rs Outdated
@github-actions

github-actions Bot commented Jan 9, 2026

Copy link
Copy Markdown
group app.proof_time_ms app.cycles app.cells_used leaf.proof_time_ms leaf.cycles leaf.cells_used
verify_fibair 224 322,610 2,058,654 - - -
fibonacci (-42 [-4.0%]) 1,007 1,500,209 2,100,402 - - -
regex (+111 [+4.8%]) 2,413 4,137,502 17,695,216 - - -
ecrecover (-25 [-3.3%]) 727 122,859 (+2328 [+0.1%]) 2,265,100 - - -
pairing (+79 [+5.5%]) 1,513 1,745,742 25,408,302 - - -

Commit: afea53d

Benchmark Workflow

@876pol 876pol merged commit 1796504 into main Jan 12, 2026
32 checks passed
@876pol 876pol deleted the prof-instruction-count branch January 12, 2026 16:58
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