Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
08b86ef
separate pub io scalar vs vector query
hero78119 Oct 22, 2025
9ce2413
migrate table circuit to gkr-iop
hero78119 Oct 22, 2025
fae6805
wip fix few bug during integration test
hero78119 Oct 24, 2025
64fe7a6
e2e pass
hero78119 Oct 24, 2025
1087fc7
clippy fixed
hero78119 Oct 24, 2025
35b173c
fmt fix
hero78119 Oct 24, 2025
6208b21
check structural witin and pubio
hero78119 Oct 25, 2025
01f048b
fix clippy
hero78119 Oct 25, 2025
2645c5c
all tests pass
hero78119 Oct 25, 2025
fc83e3a
fmt
hero78119 Oct 26, 2025
896ff61
refactor schemes/gpu/mod follow cpu change
hero78119 Oct 26, 2025
225fe5b
clean up
hero78119 Oct 26, 2025
393131d
refactor gkr_iop/src/gpu/mod.rs follow cpu
hero78119 Oct 26, 2025
8cea710
refactor gkr_iop/src/gkr/layer/gpu/mod.rs follow cpu
hero78119 Oct 26, 2025
b4e7499
chores: rename function
hero78119 Oct 26, 2025
119c1e9
fix mock prover
hero78119 Oct 26, 2025
1f0dbe9
chores: fmt and clippy
hero78119 Oct 26, 2025
164a7a6
fix mock prover padding logic
hero78119 Oct 26, 2025
5cd7e4a
merge with master
hero78119 Oct 27, 2025
ea69884
gpu e2e works
hero78119 Oct 27, 2025
e069567
wip resolve conflict with base branch
hero78119 Nov 3, 2025
71fef03
revamp global chip selector with placeholder
hero78119 Nov 3, 2025
185c57e
use rev dependency
hero78119 Nov 3, 2025
a802784
pin gkr-backend to v1.0.0-alpha.13
kunxian-xia Nov 4, 2025
284b176
fmt
kunxian-xia Nov 4, 2025
420d6f2
ceno-cli conntinuation proofs e2e (#1094)
hero78119 Nov 5, 2025
51f8d00
add ecc final profiling (#1113)
hero78119 Nov 5, 2025
84fbff8
#1092 cleanup (#1114)
kunxian-xia Nov 5, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .github/workflows/integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,18 @@ jobs:
RUSTFLAGS: "-C opt-level=3"
run: cargo run --release --package ceno_zkvm --bin e2e -- --platform=ceno --hints=10 --public-io=4191 examples/target/riscv32im-ceno-zkvm-elf/release/examples/fibonacci

- name: Run 3 shards fibonacci (debug)
env:
RUST_LOG: debug
RUSTFLAGS: "-C opt-level=3"
MOCK_PROVING: 1
run: cargo run --package ceno_zkvm --features sanity-check --bin e2e -- --platform=ceno --min-cycle-per-shard=10 --max-cycle-per-shard=20000 --hints=10 --public-io=4191 examples/target/riscv32im-ceno-zkvm-elf/debug/examples/fibonacci

- name: Run 3 shards fibonacci (release)
env:
RUSTFLAGS: "-C opt-level=3"
run: cargo run --release --package ceno_zkvm --features sanity-check --bin e2e -- --platform=ceno --min-cycle-per-shard=10 --max-cycle-per-shard=20000 --hints=10 --public-io=4191 examples/target/riscv32im-ceno-zkvm-elf/release/examples/fibonacci

# note: the global chip does not support goldilocks field yet
# - name: Run fibonacci (release + goldilocks)
# env:
Expand All @@ -81,6 +93,18 @@ jobs:
RUSTFLAGS: "-C opt-level=3"
run: cargo run --release --package ceno_zkvm --bin e2e -- --platform=ceno examples/target/riscv32im-ceno-zkvm-elf/release/examples/ceno_rt_alloc

- name: Run 3 shards Guest Heap Alloc (debug)
env:
RUST_LOG: debug
RUSTFLAGS: "-C opt-level=3"
MOCK_PROVING: 1
run: cargo run --package ceno_zkvm --features sanity-check --bin e2e -- --platform=ceno --min-cycle-per-shard=10 --max-cycle-per-shard=300 examples/target/riscv32im-ceno-zkvm-elf/debug/examples/ceno_rt_alloc

- name: Run 3 shards Guest Heap Alloc (release)
env:
RUSTFLAGS: "-C opt-level=3"
run: cargo run --release --package ceno_zkvm --bin e2e -- --platform=ceno --min-cycle-per-shard=10 --max-cycle-per-shard=1600 examples/target/riscv32im-ceno-zkvm-elf/release/examples/keccak_syscall

# note: the global chip does not support goldilocks field yet
# - name: Run Guest Heap Alloc (release + goldilocks)
# env:
Expand All @@ -92,6 +116,11 @@ jobs:
RUSTFLAGS: "-C opt-level=3"
run: cargo run --release --package ceno_zkvm --bin e2e -- --platform=ceno examples/target/riscv32im-ceno-zkvm-elf/release/examples/keccak_syscall

- name: Run 3 shard keccak_syscall (release)
env:
RUSTFLAGS: "-C opt-level=3"
run: cargo run --release --package ceno_zkvm --bin e2e -- --platform=ceno --min-cycle-per-shard=10 --max-cycle-per-shard=1600 examples/target/riscv32im-ceno-zkvm-elf/release/examples/keccak_syscall

- name: Run secp256k1_add_syscall (release)
env:
RUSTFLAGS: "-C opt-level=3"
Expand Down
26 changes: 13 additions & 13 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 10 additions & 10 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,16 @@ repository = "https://github.com/scroll-tech/ceno"
version = "0.1.0"

[workspace.dependencies]
ff_ext = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "ff_ext", tag = "v1.0.0-alpha.12" }
mpcs = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "mpcs", tag = "v1.0.0-alpha.12" }
multilinear_extensions = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "multilinear_extensions", tag = "v1.0.0-alpha.12" }
p3 = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "p3", tag = "v1.0.0-alpha.12" }
poseidon = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "poseidon", tag = "v1.0.0-alpha.12" }
sp1-curves = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "sp1-curves", tag = "v1.0.0-alpha.12" }
sumcheck = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "sumcheck", tag = "v1.0.0-alpha.12" }
transcript = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "transcript", tag = "v1.0.0-alpha.12" }
whir = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "whir", tag = "v1.0.0-alpha.12" }
witness = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "witness", tag = "v1.0.0-alpha.12" }
ff_ext = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "ff_ext", tag = "v1.0.0-alpha.13" }
mpcs = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "mpcs", tag = "v1.0.0-alpha.13" }
multilinear_extensions = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "multilinear_extensions", tag = "v1.0.0-alpha.13" }
p3 = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "p3", tag = "v1.0.0-alpha.13" }
poseidon = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "poseidon", tag = "v1.0.0-alpha.13" }
sp1-curves = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "sp1-curves", tag = "v1.0.0-alpha.13" }
sumcheck = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "sumcheck", tag = "v1.0.0-alpha.13" }
transcript = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "transcript", tag = "v1.0.0-alpha.13" }
whir = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "whir", tag = "v1.0.0-alpha.13" }
witness = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "witness", tag = "v1.0.0-alpha.13" }

alloy-primitives = "1.3"
anyhow = { version = "1.0", default-features = false }
Expand Down
31 changes: 22 additions & 9 deletions ceno_cli/src/commands/common_args/ceno.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,13 +78,21 @@ pub struct CenoOptions {
#[arg(long)]
pub out_vk: Option<PathBuf>,

/// shard id
/// prover id
#[arg(long, default_value = "0")]
shard_id: u32,
prover_id: u32,

/// number of total shards.
/// number of available prover.
#[arg(long, default_value = "1")]
max_num_shards: u32,
num_provers: u32,

// min cycle per shard
#[arg(long, default_value = "16777216")] // 16777216 = 2^24
min_cycle_per_shard: u64,

// max cycle per shard
#[arg(long, default_value = "536870912")] // 536870912 = 2^29
max_cycle_per_shard: u64,

/// Profiling granularity.
/// Setting any value restricts logs to profiling information
Expand Down Expand Up @@ -345,7 +353,12 @@ fn run_elf_inner<
std::fs::read(elf_path).context(format!("failed to read {}", elf_path.display()))?;
let program = Program::load_elf(&elf_bytes, u32::MAX).context("failed to load elf")?;
print_cargo_message("Loaded", format_args!("{}", elf_path.display()));
let shards = Shards::new(options.shard_id as usize, options.max_num_shards as usize);
let multi_prover = MultiProver::new(
options.prover_id as usize,
options.num_provers as usize,
options.min_cycle_per_shard,
options.max_cycle_per_shard,
);

let public_io = options
.read_public_io()
Expand Down Expand Up @@ -394,7 +407,7 @@ fn run_elf_inner<
create_prover(backend.clone()),
program,
platform,
shards,
multi_prover,
&hints,
&public_io,
options.max_steps,
Expand Down Expand Up @@ -439,12 +452,12 @@ fn prove_inner<
checkpoint: Checkpoint,
) -> anyhow::Result<()> {
let result = run_elf_inner::<E, PCS, P>(args, compilation_options, elf_path, checkpoint)?;
let zkvm_proof = result.proof.expect("PrepSanityCheck should yield proof.");
let zkvm_proofs = result.proofs.expect("PrepSanityCheck should yield proof.");
let vk = result.vk.expect("PrepSanityCheck should yield vk.");

let start = std::time::Instant::now();
let verifier = ZKVMVerifier::new(vk);
if let Err(e) = verify(&zkvm_proof, &verifier) {
if let Err(e) = verify(zkvm_proofs.clone(), &verifier) {
bail!("Verification failed: {e:?}");
}
print_cargo_message(
Expand All @@ -457,7 +470,7 @@ fn prove_inner<
print_cargo_message("Writing", format_args!("proof to {}", path.display()));
let proof_file =
File::create(&path).context(format!("failed to create {}", path.display()))?;
bincode::serialize_into(proof_file, &zkvm_proof)
bincode::serialize_into(proof_file, &zkvm_proofs)
.context("failed to serialize zkvm proof")?;
}
if let Some(out_vk) = args.out_vk.as_ref() {
Expand Down
4 changes: 2 additions & 2 deletions ceno_cli/src/commands/verify.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ fn run_inner<E: ExtensionField, PCS: PolynomialCommitmentScheme<E> + Serialize>(
) -> anyhow::Result<()> {
let start = std::time::Instant::now();

let zkvm_proof: ZKVMProof<E, PCS> =
let zkvm_proofs: Vec<ZKVMProof<E, PCS>> =
bincode::deserialize_from(File::open(&args.proof).context("Failed to open proof file")?)
.context("Failed to deserialize proof file")?;
print_cargo_message(
Expand All @@ -80,7 +80,7 @@ fn run_inner<E: ExtensionField, PCS: PolynomialCommitmentScheme<E> + Serialize>(

let start = std::time::Instant::now();
let verifier = ZKVMVerifier::new(vk);
if let Err(e) = verify(&zkvm_proof, &verifier) {
if let Err(e) = verify(zkvm_proofs, &verifier) {
bail!("Verification failed: {e:?}");
}

Expand Down
11 changes: 7 additions & 4 deletions ceno_zkvm/benches/fibonacci.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ use criterion::*;
use ff_ext::BabyBearExt4;
use gkr_iop::cpu::default_backend_config;

use ceno_zkvm::{e2e::Shards, scheme::verifier::ZKVMVerifier};
use ceno_zkvm::{e2e::MultiProver, scheme::verifier::ZKVMVerifier};
use mpcs::BasefoldDefault;
use transcript::BasicTranscript;

Expand Down Expand Up @@ -54,13 +54,16 @@ fn fibonacci_prove(c: &mut Criterion) {
create_prover(backend.clone()),
program.clone(),
platform.clone(),
Shards::default(),
MultiProver::default(),
&Vec::from(&hints),
&[],
max_steps,
Checkpoint::Complete,
);
let proof = result.proof.expect("PrepSanityCheck do not provide proof");
let proof = result
.proofs
.expect("PrepSanityCheck do not provide proof")
.remove(0);
let vk = result.vk.expect("PrepSanityCheck do not provide verifier");

println!("e2e proof {}", proof);
Expand Down Expand Up @@ -92,7 +95,7 @@ fn fibonacci_prove(c: &mut Criterion) {
create_prover(backend.clone()),
program.clone(),
platform.clone(),
Shards::default(),
MultiProver::default(),
&Vec::from(&hints),
&[],
max_steps,
Expand Down
4 changes: 2 additions & 2 deletions ceno_zkvm/benches/fibonacci_witness.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use std::{fs, path::PathBuf, time::Duration};
mod alloc;
use criterion::*;

use ceno_zkvm::e2e::Shards;
use ceno_zkvm::e2e::MultiProver;
use ff_ext::BabyBearExt4;
use gkr_iop::cpu::default_backend_config;
use mpcs::BasefoldDefault;
Expand Down Expand Up @@ -66,7 +66,7 @@ fn fibonacci_witness(c: &mut Criterion) {
create_prover(backend.clone()),
program.clone(),
platform.clone(),
Shards::default(),
MultiProver::default(),
&Vec::from(&hints),
&[],
max_steps,
Expand Down
4 changes: 2 additions & 2 deletions ceno_zkvm/benches/is_prime.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use ceno_zkvm::{
scheme::{create_backend, create_prover},
};
mod alloc;
use ceno_zkvm::e2e::Shards;
use ceno_zkvm::e2e::MultiProver;
use criterion::*;
use ff_ext::BabyBearExt4;
use gkr_iop::cpu::default_backend_config;
Expand Down Expand Up @@ -63,7 +63,7 @@ fn is_prime_1(c: &mut Criterion) {
create_prover(backend.clone()),
program.clone(),
platform.clone(),
Shards::default(),
MultiProver::default(),
&hints,
&[],
max_steps,
Expand Down
11 changes: 7 additions & 4 deletions ceno_zkvm/benches/keccak.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use ceno_zkvm::{
scheme::{create_backend, create_prover},
};
mod alloc;
use ceno_zkvm::{e2e::Shards, scheme::verifier::ZKVMVerifier};
use ceno_zkvm::{e2e::MultiProver, scheme::verifier::ZKVMVerifier};
use criterion::*;
use ff_ext::BabyBearExt4;
use gkr_iop::cpu::default_backend_config;
Expand Down Expand Up @@ -51,13 +51,16 @@ fn keccak_prove(c: &mut Criterion) {
create_prover(backend.clone()),
program.clone(),
platform.clone(),
Shards::default(),
MultiProver::default(),
&Vec::from(&hints),
&[],
max_steps,
Checkpoint::Complete,
);
let proof = result.proof.expect("PrepSanityCheck do not provide proof");
let proof = result
.proofs
.expect("PrepSanityCheck do not provide proof")
.remove(0);
let vk = result.vk.expect("PrepSanityCheck do not provide verifier");

println!("e2e proof {}", proof);
Expand Down Expand Up @@ -86,7 +89,7 @@ fn keccak_prove(c: &mut Criterion) {
create_prover(backend.clone()),
program.clone(),
platform.clone(),
Shards::default(),
MultiProver::default(),
&Vec::from(&hints),
&[],
max_steps,
Expand Down
Loading