Skip to content

Commit

Permalink
ci: Add comparative GPU benchmarks on merge_group (#238)
Browse files Browse the repository at this point in the history
* ci: Add comparative benchmarks on `merge_group` (WIP)

* Add other benchmarks and refactor

* Remove caching for now and test action on `pull_request`
  • Loading branch information
samuelburnham authored Jan 9, 2024
1 parent f8771a2 commit 85c04b3
Show file tree
Hide file tree
Showing 11 changed files with 299 additions and 33 deletions.
7 changes: 7 additions & 0 deletions .github/PERF_REGRESSION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
title: ":rotating_light: Performance regression in #{{ env.PR_NUMBER }}"
labels: P-Performance, automated issue
---
Regression >= {{ env.NOISE_THRESHOLD }} found during merge of: #{{ env.PR_NUMBER }}
Commit: {{ env.GIT_SHA }}
Triggered by: {{ env.WORKFLOW_URL }}
6 changes: 6 additions & 0 deletions .github/tables.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[table_comments]

[top_comments]
Overview = """
This benchmark report shows the Arecibo GPU benchmarks.
"""
131 changes: 131 additions & 0 deletions .github/workflows/gpu-bench.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
# Run final tests only when attempting to merge, shown as skipped status checks beforehand
name: GPU benchmark regression test

on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
branches: [dev]
merge_group:

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

jobs:
# Run comparative benchmark against dev, open issue on regression
gpu-benchmark:
if: github.event_name != 'pull_request' || github.event.action == 'enqueued'
name: Run benchmarks on GPU
runs-on: [self-hosted, gpu-bench]
steps:
- uses: actions/checkout@v4
with:
repository: lurk-lab/ci-workflows
- uses: ./.github/actions/gpu-setup
with:
gpu-framework: 'cuda'
- uses: ./.github/actions/ci-env
- uses: actions/checkout@v4
# Install dependencies
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- uses: taiki-e/install-action@v2
with:
tool: [email protected]
- name: Install criterion
run: |
cargo install cargo-criterion
cargo install criterion-table
- name: Set bench output format and base SHA
run: |
echo "ARECIBO_BENCH_OUTPUT=commit-comment" | tee -a $GITHUB_ENV
echo "BASE_COMMIT=${{ github.event.merge_group.base_sha }}" | tee -a $GITHUB_ENV
GPU_NAME=$(nvidia-smi --query-gpu=gpu_name --format=csv,noheader,nounits | tail -n1)
echo "GPU_ID=$(echo $GPU_NAME | awk '{ print $NF }')" | tee -a $GITHUB_ENV
echo "GPU_NAME=$GPU_NAME" | tee -a $GITHUB_ENV
# Checkout base branch for comparative bench
- uses: actions/checkout@v4
with:
ref: dev
path: dev
# Copy the script so the base can bench with the same parameters
- name: Run GPU bench on base branch
run: |
# Copy justfile to dev, overwriting existing config with that of PR branch
cp ../benches/justfile .
# Run benchmark
just gpu-bench-ci recursive-snark recursive-snark-supernova compressed-snark compressed-snark-supernova
# Copy bench output to PR branch
cp *-${{ env.BASE_COMMIT }}.json ..
working-directory: ${{ github.workspace }}/dev
- name: Run GPU bench on PR branch
run: |
just gpu-bench-ci recursive-snark recursive-snark-supernova compressed-snark compressed-snark-supernova
cp *-${{ github.sha }}.json ..
working-directory: ${{ github.workspace }}/benches
- name: copy the benchmark template and prepare it with data
run: |
cp .github/tables.toml .
# Get CPU model
CPU_MODEL=$(grep '^model name' /proc/cpuinfo | head -1 | awk -F ': ' '{ print $2 }')
# Get vCPU count
NUM_VCPUS=$(nproc --all)
# Get total RAM in GB
TOTAL_RAM=$(grep MemTotal /proc/meminfo | awk '{$2=$2/(1024^2); print int($2), "GB RAM";}')
WORKFLOW_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
# Use conditionals to ensure that only non-empty variables are inserted
[[ ! -z "${{ env.GPU_NAME }}" ]] && sed -i "/^\"\"\"$/i ${{ env.GPU_NAME }}" tables.toml
[[ ! -z "$CPU_MODEL" ]] && sed -i "/^\"\"\"$/i $CPU_MODEL" tables.toml
[[ ! -z "$NUM_VCPUS" ]] && sed -i "/^\"\"\"$/i $NUM_VCPUS" tables.toml
[[ ! -z "$TOTAL_RAM" ]] && sed -i "/^\"\"\"$/i $TOTAL_RAM" tables.toml
sed -i "/^\"\"\"$/i Workflow run: $WORKFLOW_URL" tables.toml
echo "WORKFLOW_URL=$WORKFLOW_URL" | tee -a $GITHUB_ENV
working-directory: ${{ github.workspace }}
# Create a `criterion-table` and write in commit comment
- name: Run `criterion-table`
run: |
cat recursive-snark-${{ env.BASE_COMMIT }}.json recursive-snark-${{ github.sha }}.json \
recursive-snark-supernova-${{ env.BASE_COMMIT }}.json recursive-snark-supernova- ${{ github.sha }}.json \
compressed-snark-${{ env.BASE_COMMIT }}.json compressed-snark-${{ github.sha }}.json \
compressed-snark-supernova-${{ env.BASE_COMMIT }}.json compressed-snark-supernova- ${{ github.sha }}.json \
| criterion-table > BENCHMARKS.md
- name: Write bench on commit comment
uses: peter-evans/commit-comment@v3
with:
body-path: BENCHMARKS.md
# Check for a slowdown >= `$ARECIBO_NOISE_THRESHOLD` (fallback is 5%). If so, open an issue but don't block merge
- name: Check for perf regression
id: regression-check
run: |
REGRESSIONS=$(awk -F'[*x]' '/slower/{print $12}' BENCHMARKS.md)
echo $regressions
if [ ! -z "${{ env.ARECIBO_NOISE_THRESHOLD}}" ]; then
NOISE_THRESHOLD=$(echo "1+${{ env.ARECIBO_NOISE_THRESHOLD }}" | bc)
else
NOISE_THRESHOLD=1.05
fi
for r in $REGRESSIONS
do
if (( $(echo "$r >= $NOISE_THRESHOLD" | bc -l) ))
then
exit 1
fi
done
echo "NOISE_THRESHOLD=$NOISE_THRESHOLD" | tee -a $GITHUB_ENV
continue-on-error: true
# Not possible to use ${{ github.event.number }} with the `merge_group` trigger
- name: Get PR number from merge branch
run: |
echo "PR_NUMBER=$(echo ${{ github.event.merge_group.head_ref }} | sed -e 's/.*pr-\(.*\)-.*/\1/')" | tee -a $GITHUB_ENV
- uses: JasonEtco/create-an-issue@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ env.PR_NUMBER }}
GIT_SHA: ${{ github.sha }}
WORKFLOW_URL: ${{ env.WORKFLOW_URL }}
NOISE_THRESHOLD: $${{ env.NOISE_THRESHOLD }}
with:
filename: .github/PERF_REGRESSION.md
4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@ hex = "0.4.3"
sha2 = "0.10.7"
tracing-test = "0.2.4"
expect-test = "1.4.1"
anyhow = "1.0.72"

[build-dependencies]
vergen = { version = "8", features = ["build", "git", "gitcl"] }

[[bench]]
name = "recursive-snark"
Expand Down
43 changes: 43 additions & 0 deletions benches/common/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
use anyhow::anyhow;
use criterion::BenchmarkId;

// TODO: Why Copy and &'static str over String?
#[derive(Clone, Debug, Copy)]
pub(crate) struct BenchParams {
pub step_size: usize,
pub date: &'static str,
pub sha: &'static str,
}
impl BenchParams {
pub(crate) fn bench_id(&self, name: &str) -> BenchmarkId {
let output_type = bench_output_env().unwrap_or("stdout".into());
match output_type.as_ref() {
"pr-comment" => BenchmarkId::new(name, format!("StepCircuitSize-{}", self.step_size)),
"commit-comment" => BenchmarkId::new(
format!("ref={}", self.sha),
format!("{}-StepCircuitSize-{}", name, self.step_size),
),
// TODO: refine "gh-pages"
_ => BenchmarkId::new(
name,
format!(
"StepCircuitSize-{}-{}-{}",
self.step_size, self.sha, self.date
),
),
}
}
}

fn bench_output_env() -> anyhow::Result<String> {
std::env::var("ARECIBO_BENCH_OUTPUT").map_err(|e| anyhow!("Bench output env var isn't set: {e}"))
}

pub(crate) fn noise_threshold_env() -> anyhow::Result<f64> {
std::env::var("ARECIBO_BENCH_NOISE_THRESHOLD")
.map_err(|e| anyhow!("Noise threshold env var isn't set: {e}"))
.and_then(|nt| {
nt.parse::<f64>()
.map_err(|e| anyhow!("Failed to parse noise threshold: {e}"))
})
}
32 changes: 19 additions & 13 deletions benches/compressed-snark-supernova.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,17 @@ use criterion::{measurement::WallTime, *};
use ff::PrimeField;
use std::time::Duration;

mod common;
use common::{noise_threshold_env, BenchParams};

type E1 = arecibo::provider::PallasEngine;
type E2 = arecibo::provider::VestaEngine;
type EE1 = arecibo::provider::ipa_pc::EvaluationEngine<E1>;
type EE2 = arecibo::provider::ipa_pc::EvaluationEngine<E2>;
// SNARKs without computation commitmnets
// SNARKs without computation commitments
type S1 = arecibo::spartan::batched::BatchedRelaxedR1CSSNARK<E1, EE1>;
type S2 = arecibo::spartan::snark::RelaxedR1CSSNARK<E2, EE2>;
// SNARKs with computation commitmnets
// SNARKs with computation commitments
type SS1 = arecibo::spartan::batched_ppsnark::BatchedRelaxedR1CSSNARK<E1, EE1>;
type SS2 = arecibo::spartan::ppsnark::RelaxedR1CSSNARK<E2, EE2>;

Expand Down Expand Up @@ -162,8 +165,14 @@ fn bench_compressed_snark_internal_with_arity<

let (prover_key, verifier_key) = CompressedSNARK::<_, _, _, _, S1, S2>::setup(&pp).unwrap();

let bench_params = BenchParams {
step_size: num_cons,
date: env!("VERGEN_GIT_COMMIT_DATE"),
sha: env!("VERGEN_GIT_SHA"),
};

// Benchmark the prove time
group.bench_function("Prove", |b| {
group.bench_function(bench_params.bench_id("Prove"), |b| {
b.iter(|| {
assert!(CompressedSNARK::<_, _, _, _, S1, S2>::prove(
black_box(&pp),
Expand All @@ -180,7 +189,7 @@ fn bench_compressed_snark_internal_with_arity<
let compressed_snark = res.unwrap();

// Benchmark the verification time
group.bench_function("Verify", |b| {
group.bench_function(bench_params.bench_id("Verify"), |b| {
b.iter(|| {
assert!(black_box(&compressed_snark)
.verify(
Expand Down Expand Up @@ -211,10 +220,9 @@ fn bench_one_augmented_circuit_compressed_snark(c: &mut Criterion) {
// number of constraints in the step circuit
let num_cons = num_cons_in_augmented_circuit - NUM_CONS_VERIFIER_CIRCUIT_PRIMARY;

let mut group = c.benchmark_group(format!(
"CompressedSNARKSuperNova-1circuit-StepCircuitSize-{num_cons}"
));
let mut group = c.benchmark_group("CompressedSNARKSuperNova-1circuit");
group.sample_size(NUM_SAMPLES);
group.noise_threshold(noise_threshold_env().unwrap_or(0.05));

bench_compressed_snark_internal_with_arity::<S1, S2>(&mut group, 1, num_cons);

Expand All @@ -239,10 +247,9 @@ fn bench_two_augmented_circuit_compressed_snark(c: &mut Criterion) {
// number of constraints in the step circuit
let num_cons = num_cons_in_augmented_circuit - NUM_CONS_VERIFIER_CIRCUIT_PRIMARY;

let mut group = c.benchmark_group(format!(
"CompressedSNARKSuperNova-2circuit-StepCircuitSize-{num_cons}"
));
let mut group = c.benchmark_group("CompressedSNARKSuperNova-2circuit");
group.sample_size(NUM_SAMPLES);
group.noise_threshold(noise_threshold_env().unwrap_or(0.05));

bench_compressed_snark_internal_with_arity::<S1, S2>(&mut group, 2, num_cons);

Expand All @@ -267,10 +274,9 @@ fn bench_two_augmented_circuit_compressed_snark_with_computational_commitments(c
// number of constraints in the step circuit
let num_cons = num_cons_in_augmented_circuit - NUM_CONS_VERIFIER_CIRCUIT_PRIMARY;

let mut group = c.benchmark_group(format!(
"CompressedSNARKSuperNova-Commitments-2circuit-StepCircuitSize-{num_cons}"
));
let mut group = c.benchmark_group("CompressedSNARKSuperNova-Commitments-2circuit");
group.sample_size(NUM_SAMPLES);
group.noise_threshold(noise_threshold_env().unwrap_or(0.05));

bench_compressed_snark_internal_with_arity::<SS1, SS2>(&mut group, 2, num_cons);

Expand Down
26 changes: 17 additions & 9 deletions benches/compressed-snark.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ use criterion::{measurement::WallTime, *};
use ff::PrimeField;
use std::time::Duration;

mod common;
use common::{noise_threshold_env, BenchParams};

type E1 = PallasEngine;
type E2 = VestaEngine;
type EE1 = arecibo::provider::ipa_pc::EvaluationEngine<E1>;
Expand Down Expand Up @@ -101,8 +104,14 @@ fn bench_compressed_snark_internal<S1: RelaxedR1CSSNARKTrait<E1>, S2: RelaxedR1C
assert!(res.is_ok());
}

let bench_params = BenchParams {
step_size: num_cons,
date: env!("VERGEN_GIT_COMMIT_DATE"),
sha: env!("VERGEN_GIT_SHA"),
};

// Bench time to produce a compressed SNARK
group.bench_function("Prove", |b| {
group.bench_function(bench_params.bench_id("Prove"), |b| {
b.iter(|| {
assert!(CompressedSNARK::<_, _, _, _, S1, S2>::prove(
black_box(&pp),
Expand All @@ -117,7 +126,7 @@ fn bench_compressed_snark_internal<S1: RelaxedR1CSSNARKTrait<E1>, S2: RelaxedR1C
let compressed_snark = res.unwrap();

// Benchmark the verification time
group.bench_function("Verify", |b| {
group.bench_function(bench_params.bench_id("Verify"), |b| {
b.iter(|| {
assert!(black_box(&compressed_snark)
.verify(
Expand Down Expand Up @@ -148,8 +157,9 @@ fn bench_compressed_snark(c: &mut Criterion) {
// number of constraints in the step circuit
let num_cons = num_cons_in_augmented_circuit - NUM_CONS_VERIFIER_CIRCUIT_PRIMARY;

let mut group = c.benchmark_group(format!("CompressedSNARK-StepCircuitSize-{num_cons}"));
let mut group = c.benchmark_group("CompressedSNARK");
group.sample_size(NUM_SAMPLES);
group.noise_threshold(noise_threshold_env().unwrap_or(0.05));

bench_compressed_snark_internal::<S1, S2>(&mut group, num_cons);

Expand All @@ -172,12 +182,10 @@ fn bench_compressed_snark_with_computational_commitments(c: &mut Criterion) {
// number of constraints in the step circuit
let num_cons = num_cons_in_augmented_circuit - NUM_CONS_VERIFIER_CIRCUIT_PRIMARY;

let mut group = c.benchmark_group(format!(
"CompressedSNARK-Commitments-StepCircuitSize-{num_cons}"
));
group
.sampling_mode(SamplingMode::Flat)
.sample_size(NUM_SAMPLES);
let mut group = c.benchmark_group("CompressedSNARK-Commitments");
group.sampling_mode(SamplingMode::Flat);
group.sample_size(NUM_SAMPLES);
group.noise_threshold(noise_threshold_env().unwrap_or(0.05));

bench_compressed_snark_internal::<SS1, SS2>(&mut group, num_cons);

Expand Down
36 changes: 36 additions & 0 deletions benches/justfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Install with `cargo install just`
# Usage: `just <bench|gpu-bench|gpu-bench-ci> <args>`
set dotenv-load
set dotenv-filename := "bench.env"
set ignore-comments := true

commit := `git rev-parse HEAD`

# Run CPU benchmarks
bench +benches:
#!/bin/sh
for bench in {{benches}}; do
cargo criterion --bench $bench
done

gpu-env:
# The `compute`/`sm` number corresponds to the Nvidia GPU architecture
# In this case, the self-hosted machine uses the Ampere architecture, but we want this to be configurable
# See https://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/
export CUDA_ARCH := `nvidia-smi --query-gpu=compute_cap --format=csv,noheader | sed 's/\.//g'`
export EC_GPU_CUDA_NVCC_ARGS := "--fatbin --gpu-architecture=sm_$CUDA_ARCH --generate-code=arch=compute_$CUDA_ARCH,code=sm_$CUDA_ARCH"
export EC_GPU_FRAMEWORK := "cuda"

# Run CUDA benchmarks on GPU
gpu-bench +benches: gpu-env
#!/bin/sh
for bench in {{benches}}; do
cargo criterion --bench $bench --features "cuda"
done

# Run CUDA benchmarks on GPU, tuned for CI
gpu-bench-ci +benches:
#!/bin/sh
for bench in {{benches}}; do
cargo criterion --bench $bench --features "cuda" --message-format=json > "$bench-{{commit}}".json
done
Loading

1 comment on commit 85c04b3

@github-actions
Copy link
Contributor

Choose a reason for hiding this comment

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

Benchmarks

Table of Contents

Overview

This benchmark report shows the Arecibo GPU benchmarks.
NVIDIA L4
Intel(R) Xeon(R) CPU @ 2.20GHz
32
125 GB RAM
Workflow run: https://github.com/lurk-lab/arecibo/actions/runs/7455258487

Benchmark Results

RecursiveSNARK-StepCircuitSize-0

Prove Verify
44.28 ms (✅ 1.00x) 22.49 ms (🚀 1.97x faster)

RecursiveSNARK-StepCircuitSize-6559

Prove Verify
52.22 ms (✅ 1.00x) 28.67 ms (🚀 1.82x faster)

RecursiveSNARK-StepCircuitSize-22943

Prove Verify
71.53 ms (✅ 1.00x) 44.05 ms (✅ 1.62x faster)

RecursiveSNARK-StepCircuitSize-55711

Prove Verify
89.66 ms (✅ 1.00x) 47.09 ms (🚀 1.90x faster)

RecursiveSNARK-StepCircuitSize-121247

Prove Verify
70.42 ms (✅ 1.00x) 29.88 ms (🚀 2.36x faster)

RecursiveSNARK-StepCircuitSize-252319

Prove Verify
99.49 ms (✅ 1.00x) 44.07 ms (🚀 2.26x faster)

RecursiveSNARK-StepCircuitSize-514463

Prove Verify
184.16 ms (✅ 1.00x) 54.90 ms (🚀 3.35x faster)

RecursiveSNARK-StepCircuitSize-1038751

Prove Verify
321.13 ms (✅ 1.00x) 97.15 ms (🚀 3.31x faster)

RecursiveSNARK

ref=85c04b3ab1d8446b0a8337ad738ea11aa94f45b4
Prove-StepCircuitSize-0 44.38 ms (✅ 1.00x)
Verify-StepCircuitSize-0 22.41 ms (✅ 1.00x)
Prove-StepCircuitSize-6559 52.13 ms (✅ 1.00x)
Verify-StepCircuitSize-6559 28.69 ms (✅ 1.00x)
Prove-StepCircuitSize-22943 71.66 ms (✅ 1.00x)
Verify-StepCircuitSize-22943 43.99 ms (✅ 1.00x)
Prove-StepCircuitSize-55711 89.12 ms (✅ 1.00x)
Verify-StepCircuitSize-55711 47.43 ms (✅ 1.00x)
Prove-StepCircuitSize-121247 70.09 ms (✅ 1.00x)
Verify-StepCircuitSize-121247 29.68 ms (✅ 1.00x)
Prove-StepCircuitSize-252319 98.32 ms (✅ 1.00x)
Verify-StepCircuitSize-252319 43.87 ms (✅ 1.00x)
Prove-StepCircuitSize-514463 176.41 ms (✅ 1.00x)
Verify-StepCircuitSize-514463 53.69 ms (✅ 1.00x)
Prove-StepCircuitSize-1038751 303.34 ms (✅ 1.00x)
Verify-StepCircuitSize-1038751 97.96 ms (✅ 1.00x)

RecursiveSNARKSuperNova-1circuit-StepCircuitSize-0

Prove Verify
47.73 ms (✅ 1.00x) 26.84 ms (✅ 1.78x faster)

RecursiveSNARKSuperNova-1circuit-StepCircuitSize-6540

Prove Verify
55.26 ms (✅ 1.00x) 33.40 ms (✅ 1.65x faster)

RecursiveSNARKSuperNova-1circuit-StepCircuitSize-22924

Prove Verify
74.58 ms (✅ 1.00x) 49.45 ms (✅ 1.51x faster)

RecursiveSNARKSuperNova-1circuit-StepCircuitSize-55692

Prove Verify
91.75 ms (✅ 1.00x) 54.48 ms (✅ 1.68x faster)

RecursiveSNARKSuperNova-1circuit-StepCircuitSize-121228

Prove Verify
76.93 ms (✅ 1.00x) 43.00 ms (✅ 1.79x faster)

RecursiveSNARKSuperNova-1circuit-StepCircuitSize-252300

Prove Verify
104.53 ms (✅ 1.00x) 63.48 ms (✅ 1.65x faster)

RecursiveSNARKSuperNova-1circuit-StepCircuitSize-514444

Prove Verify
204.41 ms (✅ 1.00x) 142.22 ms (✅ 1.44x faster)

RecursiveSNARKSuperNova-1circuit-StepCircuitSize-1038732

Prove Verify
384.81 ms (✅ 1.00x) 298.40 ms (✅ 1.29x faster)

RecursiveSNARKSuperNova-2circuit-StepCircuitSize-0

Prove Verify
47.62 ms (✅ 1.00x) 26.80 ms (✅ 1.78x faster)

RecursiveSNARKSuperNova-2circuit-StepCircuitSize-6540

Prove Verify
55.30 ms (✅ 1.00x) 33.40 ms (✅ 1.66x faster)

RecursiveSNARKSuperNova-2circuit-StepCircuitSize-22924

Prove Verify
74.64 ms (✅ 1.00x) 49.16 ms (✅ 1.52x faster)

RecursiveSNARKSuperNova-2circuit-StepCircuitSize-55692

Prove Verify
91.58 ms (✅ 1.00x) 54.13 ms (✅ 1.69x faster)

RecursiveSNARKSuperNova-2circuit-StepCircuitSize-121228

Prove Verify
76.87 ms (✅ 1.00x) 42.69 ms (🚀 1.80x faster)

RecursiveSNARKSuperNova-2circuit-StepCircuitSize-252300

Prove Verify
104.46 ms (✅ 1.00x) 63.52 ms (✅ 1.64x faster)

RecursiveSNARKSuperNova-2circuit-StepCircuitSize-514444

Prove Verify
214.83 ms (✅ 1.00x) 152.77 ms (✅ 1.41x faster)

RecursiveSNARKSuperNova-2circuit-StepCircuitSize-1038732

Prove Verify
382.07 ms (✅ 1.00x) 297.13 ms (✅ 1.29x faster)

CompressedSNARK-StepCircuitSize-0

Prove Verify
550.55 ms (✅ 1.00x) 29.51 ms (🚀 18.66x faster)

CompressedSNARK-StepCircuitSize-6559

Prove Verify
564.42 ms (✅ 1.00x) 29.66 ms (🚀 19.03x faster)

CompressedSNARK-StepCircuitSize-22943

Prove Verify
816.71 ms (✅ 1.00x) 39.30 ms (🚀 20.78x faster)

CompressedSNARK-StepCircuitSize-55711

Prove Verify
1.37 s (✅ 1.00x) 24.80 ms (🚀 55.39x faster)

CompressedSNARK-StepCircuitSize-121247

Prove Verify
2.33 s (✅ 1.00x) 36.10 ms (🚀 64.55x faster)

CompressedSNARK-StepCircuitSize-252319

Prove Verify
4.31 s (✅ 1.00x) 53.29 ms (🚀 80.87x faster)

CompressedSNARK-StepCircuitSize-514463

Prove Verify
8.36 s (✅ 1.00x) 88.36 ms (🚀 94.65x faster)

CompressedSNARK-StepCircuitSize-1038751

Prove Verify
16.27 s (✅ 1.00x) 212.11 ms (🚀 76.69x faster)

CompressedSNARK-Commitments-StepCircuitSize-0

Prove Verify
4.43 s (✅ 1.00x) 30.20 ms (🚀 146.75x faster)

CompressedSNARK-Commitments-StepCircuitSize-6559

Prove Verify
8.20 s (✅ 1.00x) 39.01 ms (🚀 210.07x faster)

CompressedSNARK-Commitments-StepCircuitSize-22943

Prove Verify
7.35 s (✅ 1.00x) 38.87 ms (🚀 189.23x faster)

CompressedSNARK-Commitments-StepCircuitSize-55711

Prove Verify
14.61 s (✅ 1.00x) 63.02 ms (🚀 231.91x faster)

CompressedSNARK-Commitments-StepCircuitSize-121247

Prove Verify
10.98 s (✅ 1.00x) 63.85 ms (🚀 172.02x faster)

CompressedSNARK-Commitments-StepCircuitSize-252319

Prove Verify
21.86 s (✅ 1.00x) 147.37 ms (🚀 148.32x faster)

CompressedSNARK

ref=85c04b3ab1d8446b0a8337ad738ea11aa94f45b4
Prove-StepCircuitSize-0 544.44 ms (✅ 1.00x)
Verify-StepCircuitSize-0 29.58 ms (✅ 1.00x)
Prove-StepCircuitSize-6559 561.90 ms (✅ 1.00x)
Verify-StepCircuitSize-6559 29.75 ms (✅ 1.00x)
Prove-StepCircuitSize-22943 811.53 ms (✅ 1.00x)
Verify-StepCircuitSize-22943 39.13 ms (✅ 1.00x)
Prove-StepCircuitSize-55711 1.36 s (✅ 1.00x)
Verify-StepCircuitSize-55711 25.66 ms (✅ 1.00x)
Prove-StepCircuitSize-121247 2.32 s (✅ 1.00x)
Verify-StepCircuitSize-121247 36.83 ms (✅ 1.00x)
Prove-StepCircuitSize-252319 4.27 s (✅ 1.00x)
Verify-StepCircuitSize-252319 53.03 ms (✅ 1.00x)
Prove-StepCircuitSize-514463 8.27 s (✅ 1.00x)
Verify-StepCircuitSize-514463 87.86 ms (✅ 1.00x)
Prove-StepCircuitSize-1038751 16.12 s (✅ 1.00x)
Verify-StepCircuitSize-1038751 210.99 ms (✅ 1.00x)

CompressedSNARK-Commitments

ref=85c04b3ab1d8446b0a8337ad738ea11aa94f45b4
Prove-StepCircuitSize-0 4.40 s (✅ 1.00x)
Verify-StepCircuitSize-0 29.99 ms (✅ 1.00x)
Prove-StepCircuitSize-6559 8.08 s (✅ 1.00x)
Verify-StepCircuitSize-6559 38.87 ms (✅ 1.00x)
Prove-StepCircuitSize-22943 7.34 s (✅ 1.00x)
Verify-StepCircuitSize-2294... 39.10 ms (✅ 1.00x)
Prove-StepCircuitSize-55711 14.63 s (✅ 1.00x)
Verify-StepCircuitSize-5571... 62.38 ms (✅ 1.00x)
Prove-StepCircuitSize-12124... 11.03 s (✅ 1.00x)
Verify-StepCircuitSize-1212... 61.80 ms (✅ 1.00x)
Prove-StepCircuitSize-25231... 21.64 s (✅ 1.00x)
Verify-StepCircuitSize-2523... 145.71 ms (✅ 1.00x)

CompressedSNARKSuperNova-1circuit-StepCircuitSize-0

Prove Verify
631.35 ms (✅ 1.00x) 41.60 ms (🚀 15.18x faster)

CompressedSNARKSuperNova-1circuit-StepCircuitSize-6540

Prove Verify
627.13 ms (✅ 1.00x) 41.83 ms (🚀 14.99x faster)

CompressedSNARKSuperNova-1circuit-StepCircuitSize-22924

Prove Verify
889.70 ms (✅ 1.00x) 52.14 ms (🚀 17.06x faster)

CompressedSNARKSuperNova-1circuit-StepCircuitSize-55692

Prove Verify
1.43 s (✅ 1.00x) 39.45 ms (🚀 36.17x faster)

CompressedSNARKSuperNova-1circuit-StepCircuitSize-121228

Prove Verify
2.41 s (✅ 1.00x) 49.07 ms (🚀 49.13x faster)

CompressedSNARKSuperNova-1circuit-StepCircuitSize-252300

Prove Verify
4.44 s (✅ 1.00x) 66.00 ms (🚀 67.21x faster)

CompressedSNARKSuperNova-1circuit-StepCircuitSize-514444

Prove Verify
8.30 s (✅ 1.00x) 121.44 ms (🚀 68.38x faster)

CompressedSNARKSuperNova-1circuit-StepCircuitSize-1038732

Prove Verify
16.11 s (✅ 1.00x) 254.93 ms (🚀 63.19x faster)

CompressedSNARKSuperNova-2circuit-StepCircuitSize-0

Prove Verify
629.65 ms (✅ 1.00x) 43.43 ms (🚀 14.50x faster)

CompressedSNARKSuperNova-2circuit-StepCircuitSize-6540

Prove Verify
640.03 ms (✅ 1.00x) 43.64 ms (🚀 14.67x faster)

CompressedSNARKSuperNova-2circuit-StepCircuitSize-22924

Prove Verify
890.85 ms (✅ 1.00x) 55.57 ms (🚀 16.03x faster)

CompressedSNARKSuperNova-2circuit-StepCircuitSize-55692

Prove Verify
1.42 s (✅ 1.00x) 45.52 ms (🚀 31.30x faster)

CompressedSNARKSuperNova-2circuit-StepCircuitSize-121228

Prove Verify
2.46 s (✅ 1.00x) 57.82 ms (🚀 42.50x faster)

CompressedSNARKSuperNova-2circuit-StepCircuitSize-252300

Prove Verify
4.57 s (✅ 1.00x) 77.71 ms (🚀 58.83x faster)

CompressedSNARKSuperNova-2circuit-StepCircuitSize-514444

Prove Verify
8.69 s (✅ 1.00x) 155.16 ms (🚀 56.00x faster)

CompressedSNARKSuperNova-2circuit-StepCircuitSize-1038732

Prove Verify
16.21 s (✅ 1.00x) 341.11 ms (🚀 47.52x faster)

CompressedSNARKSuperNova-Commitments-2circuit-StepCircuitSize-0

Prove Verify
8.18 s (✅ 1.00x) 68.10 ms (🚀 120.14x faster)

CompressedSNARKSuperNova-Commitments-2circuit-StepCircuitSize-6540

Prove Verify
14.12 s (✅ 1.00x) 82.46 ms (🚀 171.28x faster)

CompressedSNARKSuperNova-Commitments-2circuit-StepCircuitSize-22924

Prove Verify
12.58 s (✅ 1.00x) 81.91 ms (🚀 153.60x faster)

CompressedSNARKSuperNova-Commitments-2circuit-StepCircuitSize-55692

Prove Verify
22.57 s (✅ 1.00x) 127.41 ms (🚀 177.14x faster)

CompressedSNARKSuperNova-Commitments-2circuit-StepCircuitSize-121228

Prove Verify
15.77 s (✅ 1.00x) 128.00 ms (🚀 123.24x faster)

CompressedSNARKSuperNova-Commitments-2circuit-StepCircuitSize-252300

Prove Verify
29.83 s (✅ 1.00x) 245.26 ms (🚀 121.62x faster)

CompressedSNARKSuperNova-Commitments-2circuit-StepCircuitSize-514444

Prove Verify
58.21 s (✅ 1.00x) 421.23 ms (🚀 138.18x faster)

CompressedSNARKSuperNova-Commitments-2circuit-StepCircuitSize-1038732

Prove Verify
111.86 s (✅ 1.00x) 778.01 ms (🚀 143.77x faster)

Made with criterion-table

Please sign in to comment.