Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
1aaf9ae
feat: new keccak (#2303)
GunaDD Feb 27, 2026
4e04ac6
feat(new-keccak): add xorin cuda tracegen (#2326)
GunaDD Feb 27, 2026
4755ec9
feat(new-keccak): add keccakf cuda tracegen (#2327)
shuklaayush Dec 19, 2025
c9de2da
perf: new keccak run reth (#2328)
GunaDD Feb 27, 2026
3285248
fix: use tiny-keccak fork in new keccak example
shuklaayush Dec 30, 2025
6d12b88
chore: revert old keccak example
shuklaayush Dec 30, 2025
b9ebe33
fix: avoid xorin funct7 clash with sha512
shuklaayush Jan 5, 2026
39ebfae
feat(new-keccak): split keccakf into two AIRs (#2353)
jonathanpwang Feb 28, 2026
0ab82a2
feat(new-keccak): optimize guest to skip first xorin (#2360)
jonathanpwang Jan 16, 2026
e30c951
chore: update openvm `tiny-keccak` patch (#2362)
jonathanpwang Jan 20, 2026
b136f5b
feat: SHA-2 incremental hasher design (#2182)
Avaneesh-axiom Feb 28, 2026
357b842
fix: sha2 guest library implementation (#2374)
gdmlcjs Jan 28, 2026
7159f4e
test: add test suite for sha2 guest (#2368)
jonathanpwang Feb 28, 2026
17f3a9f
fix: prevent overflow by changing type of Sha2 message length field (…
gdmlcjs Jan 30, 2026
1676328
feat: implement Hasher trait for Keccak guest library (#2386)
gdmlcjs Feb 4, 2026
ceb5045
test: add test suite for Keccak guest (#2388)
gdmlcjs Feb 6, 2026
cf88e41
test: run sha2 test vectors together (#2397)
gdmlcjs Feb 6, 2026
f82823e
chore: feature gate dependency on external sha2 crate (#2395)
gdmlcjs Feb 8, 2026
9e800a5
feat: remove memory access adapters: CPU Boundary AIR, initialize/fin…
Maillew Feb 28, 2026
395c932
feat: access adapter removal bigint (#2369)
876pol Jan 29, 2026
c344a4d
feat: access adapter removal sha2 (#2375)
Tuanlinh12312 Jan 29, 2026
ef0ac97
feat: remove cuda from algebra and ecc extensions (#2379)
Tuanlinh12312 Jan 30, 2026
7cf257a
feat: update algebra and ecc extensions to use BLOCK_SIZE=4 (#2370)
Tuanlinh12312 Jan 30, 2026
6ffc720
feat: verify metered execution works properly in tests (#2376)
876pol Jan 30, 2026
95be4c1
fix: exclude VolatileBoundaryAir from metering tester (#2385)
876pol Jan 30, 2026
9c41171
feat: access adapter removal keccak256 (#2384)
Tuanlinh12312 Jan 30, 2026
c53e146
feat: add gpu tracegen for boundary chip (#2378)
876pol Feb 6, 2026
8b4da75
fix(cuda): convert initial memory values to Montgomery form in Persis…
jonathanpwang Feb 21, 2026
177dbda
fix(cuda): optional access adapter fix (#2454)
jonathanpwang Feb 21, 2026
7ce0e0c
feat: add on_height_change for SHA2 block hasher periphery chip (#2449)
jonathanpwang Feb 21, 2026
417acd6
fix: keccak cuda tests
jonathanpwang Feb 28, 2026
4a52804
fix: set constant trace heights for lookup AIRs in metered execution …
Tuanlinh12312 Mar 4, 2026
f379a96
refactor: remove access adapter completely (#2485)
876pol Mar 7, 2026
04ee203
docs: update ISA docs for new keccak opcodes (#2515)
jonathanpwang Mar 9, 2026
c2c9372
chore(cuda): stack usage reduce (#2524)
gaxiom Mar 10, 2026
dbf3fb3
chore(v2): remove vestiges of access adapters (#2549)
shuklaayush Mar 13, 2026
9accde8
feat: change new SHA2 AIRs to have v2 max constraint degree <= 3 (#2550)
876pol Mar 16, 2026
f2ebc8d
fix: rebase conflicts
shuklaayush Mar 16, 2026
93a64de
fix(v2-rc.1): simplify memory subsystem after access adapter removal …
shuklaayush Mar 17, 2026
2dd93e5
fix: update sha tests to have new constraint degree (#2566)
876pol Mar 17, 2026
0fb6314
fix(v2-rc1): remove `block_size` from config (#2572)
shuklaayush Mar 18, 2026
2644850
fix: rebase artifacts
shuklaayush Mar 19, 2026
7f7f610
fix: implement constant_trace_height for DeferralCircuitCountChip
shuklaayush Mar 19, 2026
7a91450
chore: fix lock file
shuklaayush Mar 19, 2026
6638d93
fix: limit cuda threads in xorin
shuklaayush Mar 20, 2026
fb8a5c1
chore: bump aws crates
shuklaayush Mar 22, 2026
8fb4c5a
perf(v2-rc.1): optimize keccakf cuda kernel (#2599)
shuklaayush Mar 23, 2026
e629b6a
fix(deferral): remove volatile and MEMORY_OP_SIZE
shuklaayush Mar 23, 2026
edf2ca9
fix(deferral): read deferral as in block size of 4 in tests
shuklaayush Mar 23, 2026
ab7d7c6
fix: add constant_trace_height for gpu deferral count chip
shuklaayush Mar 23, 2026
68c8663
fix(v2-rc.1): load deferral as elems as felts in memory kernels (#2607)
shuklaayush Mar 23, 2026
1c3ffcf
chore: rebase fixes
shuklaayush Mar 25, 2026
0d3cf06
chore(v2-rc.1): update benchmark guest programs (#2623)
shuklaayush Mar 25, 2026
67783c0
chore: fix aws deps
shuklaayush Mar 26, 2026
0391b54
chore: downgrade generic-array dep
shuklaayush Mar 26, 2026
cfd377f
fix(cuda): Poseidon2 dedup aliasing, buffer capacity, and zero-record…
jonathanpwang Mar 31, 2026
93ce7a1
fix: resolve deferral extension CUDA audit fixes (#2630)
stephenh-axiom-xyz Mar 31, 2026
56c28be
fix: resolve proof shape module CUDA audit items (#2631)
stephenh-axiom-xyz Mar 31, 2026
7add8bc
style: sha2 cuda add clarification comment (#2632)
876pol Mar 31, 2026
0828950
feat: initial mod-builder CUDA tracegen implementation
stephenh-axiom-xyz Mar 25, 2026
4a23fba
chore: switch mod-builder extensions to new CUDA tracegen
stephenh-axiom-xyz Mar 25, 2026
25518ad
perf: pass adapter records by reference instead of value
stephenh-axiom-xyz Mar 27, 2026
ed0b905
perf: linear lazy eval + initial pass to find live nodes
stephenh-axiom-xyz Mar 27, 2026
48908f4
perf: coalesce bigint scratch buffer more
stephenh-axiom-xyz Mar 27, 2026
26424a0
perf: re-use scratch slots
stephenh-axiom-xyz Mar 27, 2026
71c5202
perf: less temp values in mod_inverse
stephenh-axiom-xyz Mar 27, 2026
e1e92bf
perf: binary inverse mod_inverse
stephenh-axiom-xyz Mar 27, 2026
4b7c708
perf: split core and adapter tracegen kernels
stephenh-axiom-xyz Mar 27, 2026
10cb6a3
perf: split constraint and compute into different kernels
stephenh-axiom-xyz Mar 27, 2026
97c444b
perf: no rem on div_quotient
stephenh-axiom-xyz Mar 27, 2026
514ca73
chore: some cleanup
stephenh-axiom-xyz Mar 27, 2026
8d41b0f
test: more tracegen unit tests
stephenh-axiom-xyz Mar 27, 2026
744452a
feat: specialized tracegen for algebra and ecc
stephenh-axiom-xyz Mar 31, 2026
a790275
fix: ecc tracegen kernels now pass tests
stephenh-axiom-xyz Mar 31, 2026
ff5596f
perf: split ecc double constraint kernel
stephenh-axiom-xyz Apr 1, 2026
bd2622d
perf: remove full-size int64_t buffer
stephenh-axiom-xyz Apr 1, 2026
a52f63d
perf: split large constraint kernels to reduce stack
stephenh-axiom-xyz Apr 2, 2026
379b253
perf: store prime ahead of time
stephenh-axiom-xyz Apr 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
193 changes: 97 additions & 96 deletions .github/workflows/benchmarks-execute.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ name: "Execution benchmarks"

on:
workflow_call:
push:
branches: ["main"]
# TODO: re-enable after benchmarks are ported to v2 (native extensions removed)
# push:
# branches: ["main"]
# pull_request:
# types: [opened, synchronize, reopened, labeled]
# branches: ["**"]
Expand All @@ -29,97 +30,97 @@ env:
JEMALLOC_SYS_WITH_MALLOC_CONF: "retain:true,background_thread:true,metadata_thp:always,thp:always,dirty_decay_ms:10000,muzzy_decay_ms:10000,abort_conf:true"
TOOLCHAIN: "+nightly-2025-08-19"

jobs: {}
# codspeed-walltime-benchmarks:
# name: Run codspeed walltime benchmarks
# runs-on:
# - runs-on=${{ github.run_id }}
# - family=m5a.16xlarge # 2.5Ghz clock speed
# - image=ubuntu24-full-x64
# - extras=s3-cache
#
# env:
# CODSPEED_RUNNER_MODE: walltime
# CODSPEED_PROFILING: "false"
#
# steps:
# - uses: runs-on/action@v2
# - uses: actions/checkout@v5
# - uses: dtolnay/rust-toolchain@stable
# - uses: Swatinem/rust-cache@v2
# with:
# cache-on-failure: true
#
# - name: Install architecture specific tools
# run: |
# source ci/scripts/utils.sh
# install_s5cmd
#
# - name: Pull fixtures from S3
# run: |
# mkdir -p benchmarks/fixtures
# s5cmd cp "${{ env.S3_FIXTURES_PATH }}/*" benchmarks/fixtures/ || echo "No fixtures found in S3"
#
# - name: Install cargo-binstall
# uses: cargo-bins/cargo-binstall@main
# - name: Install codspeed
# run: cargo binstall --no-confirm --force cargo-codspeed
#
# - name: Build benchmarks
# working-directory: benchmarks/execute
# run: cargo $TOOLCHAIN codspeed build --profile maxperf --features aot --bench execute
# - name: Run benchmarks
# uses: CodSpeedHQ/action@v3
# with:
# working-directory: benchmarks/execute
# run: cargo $TOOLCHAIN codspeed run
# token: ${{ secrets.CODSPEED_TOKEN }}
#
# codspeed-instrumentation-benchmarks:
# name: Run codspeed instrumentation benchmarks
# runs-on:
# - runs-on=${{ github.run_id }}/family=m5a.xlarge/image=ubuntu24-full-x64/extras=s3-cache
# if: github.event_name != 'pull_request'
#
# env:
# CODSPEED_RUNNER_MODE: instrumentation
#
# steps:
# - uses: runs-on/action@v2
# - uses: actions/checkout@v5
# - uses: dtolnay/rust-toolchain@stable
# - uses: Swatinem/rust-cache@v2
# with:
# cache-on-failure: true
#
# - name: Install architecture specific tools
# run: |
# source ci/scripts/utils.sh
# install_s5cmd
#
# - name: Pull fixtures from S3
# run: |
# mkdir -p benchmarks/fixtures
# s5cmd cp "${{ env.S3_FIXTURES_PATH }}/*" benchmarks/fixtures/ || echo "No fixtures found in S3"
#
# - name: Install cargo-binstall
# uses: cargo-bins/cargo-binstall@main
# - name: Install codspeed
# run: cargo binstall --no-confirm --force cargo-codspeed
#
# - name: Create codspeed-post-bench symlink
# run: |
# # codspeed-post-bench is just a sym-link
# which codspeed-post-bench || echo "codspeed-post-bench not found"
# sudo ln -sf ~/.cargo/bin/cargo-codspeed /usr/local/bin/codspeed-post-bench
# ls -la /usr/local/bin/codspeed-post-bench
#
# - name: Build benchmarks
# working-directory: benchmarks/execute
# run: cargo $TOOLCHAIN codspeed build --features aot --bench execute
# - name: Run benchmarks
# uses: CodSpeedHQ/action@v3
# with:
# working-directory: benchmarks/execute
# run: cargo $TOOLCHAIN codspeed run
# token: ${{ secrets.CODSPEED_TOKEN }}
jobs:
codspeed-walltime-benchmarks:
name: Run codspeed walltime benchmarks
runs-on:
- runs-on=${{ github.run_id }}
- family=m5a.16xlarge # 2.5Ghz clock speed
- image=ubuntu24-full-x64
- extras=s3-cache

env:
CODSPEED_RUNNER_MODE: walltime
CODSPEED_PROFILING: "false"

steps:
- uses: runs-on/action@v2
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
cache-on-failure: true

- name: Install architecture specific tools
run: |
source ci/scripts/utils.sh
install_s5cmd

- name: Pull fixtures from S3
run: |
mkdir -p benchmarks/fixtures
s5cmd cp "${{ env.S3_FIXTURES_PATH }}/*" benchmarks/fixtures/ || echo "No fixtures found in S3"

- name: Install cargo-binstall
uses: cargo-bins/cargo-binstall@main
- name: Install codspeed
run: cargo binstall --no-confirm --force cargo-codspeed

- name: Build benchmarks
working-directory: benchmarks/execute
run: cargo $TOOLCHAIN codspeed build --profile maxperf --features aot --bench execute
- name: Run benchmarks
uses: CodSpeedHQ/action@v3
with:
working-directory: benchmarks/execute
run: cargo $TOOLCHAIN codspeed run
token: ${{ secrets.CODSPEED_TOKEN }}

codspeed-instrumentation-benchmarks:
name: Run codspeed instrumentation benchmarks
runs-on:
- runs-on=${{ github.run_id }}/family=m5a.xlarge/image=ubuntu24-full-x64/extras=s3-cache
if: github.event_name != 'pull_request'

env:
CODSPEED_RUNNER_MODE: instrumentation

steps:
- uses: runs-on/action@v2
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
cache-on-failure: true

- name: Install architecture specific tools
run: |
source ci/scripts/utils.sh
install_s5cmd

- name: Pull fixtures from S3
run: |
mkdir -p benchmarks/fixtures
s5cmd cp "${{ env.S3_FIXTURES_PATH }}/*" benchmarks/fixtures/ || echo "No fixtures found in S3"

- name: Install cargo-binstall
uses: cargo-bins/cargo-binstall@main
- name: Install codspeed
run: cargo binstall --no-confirm --force cargo-codspeed

- name: Create codspeed-post-bench symlink
run: |
# codspeed-post-bench is just a sym-link
which codspeed-post-bench || echo "codspeed-post-bench not found"
sudo ln -sf ~/.cargo/bin/cargo-codspeed /usr/local/bin/codspeed-post-bench
ls -la /usr/local/bin/codspeed-post-bench

- name: Build benchmarks
working-directory: benchmarks/execute
run: cargo $TOOLCHAIN codspeed build --features aot --bench execute
- name: Run benchmarks
uses: CodSpeedHQ/action@v3
with:
working-directory: benchmarks/execute
run: cargo $TOOLCHAIN codspeed run
token: ${{ secrets.CODSPEED_TOKEN }}
10 changes: 5 additions & 5 deletions .github/workflows/extension-tests.cuda.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:
matrix:
extensions: # group extensions on the same runner based on test time
- "rv32im"
- "keccak256 sha256 bigint algebra ecc pairing deferral"
- "keccak256 sha2 bigint algebra ecc pairing deferral"
runs-on:
- runs-on=${{ github.run_id }}-extension-tests-cuda-${{ github.run_attempt }}-${{ strategy.job-index }}/runner=${{ github.event_name == 'workflow_dispatch' && github.event.inputs.machine_type || 'test-gpu-nvidia/family=g6.*+g6e' }}

Expand All @@ -54,8 +54,8 @@ jobs:
- "extensions/rv32im/**"
keccak256:
- "extensions/keccak256/**"
sha256:
- "extensions/sha256/**"
sha2:
- "extensions/sha2/**"
bigint:
- "extensions/bigint/**"
algebra:
Expand All @@ -77,7 +77,7 @@ jobs:
# Check if any extension in the current matrix group changed
ANY_EXT_CHANGED=false
for ext in ${{ matrix.extensions }}; do
ext_changed=$(echo $FILTER_OUTPUTS | jq -r .$ext)
ext_changed=$(echo $FILTER_OUTPUTS | jq -r --arg ext "$ext" '.[$ext]')
if [[ "$ext_changed" == "true" ]]; then
ANY_EXT_CHANGED=true
break
Expand Down Expand Up @@ -112,7 +112,7 @@ jobs:
COMMON_CHANGED=$(echo $FILTER_OUTPUTS | jq -r .common)

for ext in ${{ matrix.extensions }}; do
ext_changed=$(echo $FILTER_OUTPUTS | jq -r .$ext)
ext_changed=$(echo $FILTER_OUTPUTS | jq -r --arg ext "$ext" '.[$ext]')
if [[ "$COMMON_CHANGED" == "true" || "$ext_changed" == "true" ]]; then
echo "::group::Running tests for $ext"

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/extension-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,15 @@ jobs:
extension:
- { name: "rv32im", path: "rv32im", aot: false }
- { name: "keccak256", path: "keccak256", aot: false }
- { name: "sha256", path: "sha256", aot: false }
- { name: "sha2", path: "sha2", aot: false }
- { name: "bigint", path: "bigint", aot: false }
- { name: "algebra", path: "algebra", aot: false }
- { name: "ecc", path: "ecc", aot: false }
- { name: "pairing", path: "pairing", aot: false }
- { name: "deferral", path: "deferral", aot: false }
- { name: "rv32im", path: "rv32im", aot: true }
- { name: "keccak256", path: "keccak256", aot: true }
- { name: "sha256", path: "sha256", aot: true }
- { name: "sha2", path: "sha2", aot: true }
- { name: "bigint", path: "bigint", aot: true }
- { name: "algebra", path: "algebra", aot: true }
- { name: "ecc", path: "ecc", aot: true }
Expand Down
8 changes: 6 additions & 2 deletions .github/workflows/guest-lib-tests.cuda.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ jobs:
strategy:
matrix:
crates: # group crates on the same runner based on test time
- { names: "sha2 keccak256 verify-stark" }
- { names: "sha2 keccak256" }
- { names: "verify-stark" }
- { names: "ruint k256 p256" }
- { names: "ff_derive pairing" }
runs-on:
Expand All @@ -51,7 +52,7 @@ jobs:
- ".github/workflows/guest-lib-tests.cuda.yml"
- "crates/sdk/guest/fib/**"
sha2:
- "extensions/sha256/**"
- "extensions/sha2/**"
- "guest-libs/sha2/**"
keccak256:
- "extensions/keccak256/**"
Expand Down Expand Up @@ -144,6 +145,9 @@ jobs:
elif [[ "$crate" == "ruint" ]]; then
# only run integration tests because other tests are not OpenVM related
SPECIAL_ARGS="test_matrix_power"
elif [[ "$crate" == "sha2" || "$crate" == "keccak256" ]]; then
# also run proving tests
SPECIAL_ARGS="--run-ignored=all"
fi

${{ env.NEXTEST_ENV }} cargo nextest run --cargo-profile=fast ${{ env.FEATURE_ARGS }} $SPECIAL_ARGS --no-tests=pass --test-threads=1
Expand Down
10 changes: 6 additions & 4 deletions .github/workflows/guest-lib-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,10 @@ jobs:
working-directory: guest-libs/${{ matrix.crate.path }}
run: |
rustup component add rust-src --toolchain nightly-2025-08-02
PAIRING_FEATURE_ARGS=""
if [[ "${{ matrix.crate.name }}" == "pairing" ]]; then
PAIRING_FEATURE_ARGS="--features=bn254,bls12_381,aot"
FEATURE_ARGS=""
if [[ "${{ matrix.crate.name }}" == "sha2" || "${{ matrix.crate.name }}" == "keccak256" ]]; then
FEATURE_ARGS="--features=aot"
elif [[ "${{ matrix.crate.name }}" == "pairing" ]]; then
FEATURE_ARGS="--features=bn254,bls12_381,aot"
fi
cargo nextest run --cargo-profile=fast $PAIRING_FEATURE_ARGS --no-tests=pass --test-threads=1
cargo nextest run --cargo-profile=fast $FEATURE_ARGS --no-tests=pass --test-threads=1
9 changes: 5 additions & 4 deletions .github/workflows/pr-title.yml
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,11 @@ jobs:
if: steps.lint_pr_title.outcome == 'failure'
run: exit 1

execute-benchmarks:
name: Execute benchmarks
uses: ./.github/workflows/benchmarks-execute.yml
secrets: inherit
# TODO: re-enable after benchmarks are ported to v2 (native extensions removed)
# execute-benchmarks:
# name: Execute benchmarks
# uses: ./.github/workflows/benchmarks-execute.yml
# secrets: inherit

extension-tests:
name: Extension tests
Expand Down
14 changes: 7 additions & 7 deletions .github/workflows/primitives.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:
paths:
- "crates/circuits/primitives/**"
- "crates/circuits/poseidon2-air/**"
- "crates/circuits/sha256-air/**"
- "crates/circuits/sha2-air/**"
- "crates/circuits/mod-builder/**"
- "Cargo.toml"
- ".github/workflows/primitives.yml"
Expand Down Expand Up @@ -64,12 +64,12 @@ jobs:
run: |
cargo nextest run ${{ env.NEXTEST_ARGS }}

# No gpu tests in these crates
- name: Run tests for sha256-air
if: ${{ !contains(matrix.platform.runner, 'gpu') }}
working-directory: crates/circuits/sha256-air
run: |
cargo nextest run ${{ env.NEXTEST_ARGS }}
# sha2-air has no tests; skipping to avoid upstream openvm-cpu-backend parallel compilation issue
# - name: Run tests for sha2-air
# if: ${{ !contains(matrix.platform.runner, 'gpu') }}
# working-directory: crates/circuits/sha2-air
# run: |
# cargo nextest run ${{ env.NEXTEST_ARGS }}

- name: Run tests for mod-builder
if: ${{ !contains(matrix.platform.runner, 'gpu') }}
Expand Down
Loading