From 15c13b0a950259e2a0530d5032716c5b0a53116d Mon Sep 17 00:00:00 2001 From: "sm.wu" Date: Wed, 11 Sep 2024 21:41:38 +0800 Subject: [PATCH 1/2] fix bench --- ceno_zkvm/benches/riscv_add.rs | 25 +++++++++++++++++++------ ceno_zkvm/src/structs.rs | 2 +- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/ceno_zkvm/benches/riscv_add.rs b/ceno_zkvm/benches/riscv_add.rs index aa05b218f..c1bb982f9 100644 --- a/ceno_zkvm/benches/riscv_add.rs +++ b/ceno_zkvm/benches/riscv_add.rs @@ -2,9 +2,10 @@ use std::time::{Duration, Instant}; use ark_std::test_rng; use ceno_zkvm::{ - circuit_builder::{CircuitBuilder, ConstraintSystem}, + self, instructions::{riscv::addsub::AddInstruction, Instruction}, scheme::prover::ZKVMProver, + structs::{ZKVMConstraintSystem, ZKVMFixedTraces}, }; use const_env::from_env; use criterion::*; @@ -62,11 +63,22 @@ fn bench_add(c: &mut Criterion) { RAYON_NUM_THREADS } }; - let mut cs = ConstraintSystem::new(|| "risv_add"); - let mut circuit_builder = CircuitBuilder::::new(&mut cs); - let _ = AddInstruction::construct_circuit(&mut circuit_builder); - let pk = cs.key_gen(None); - let num_witin = pk.get_cs().num_witin; + let mut zkvm_cs = ZKVMConstraintSystem::default(); + let _ = zkvm_cs.register_opcode_circuit::>(); + let mut zkvm_fixed_traces = ZKVMFixedTraces::default(); + zkvm_fixed_traces.register_opcode_circuit::>(&zkvm_cs); + + let pk = zkvm_cs + .clone() + .key_gen(zkvm_fixed_traces) + .expect("keygen failed"); + + let circuit_pk = pk + .circuit_pks + .get(&AddInstruction::::name()) + .unwrap() + .clone(); + let num_witin = circuit_pk.get_cs().num_witin; let prover = ZKVMProver::new(pk); let mut transcript = Transcript::new(b"riscv"); @@ -101,6 +113,7 @@ fn bench_add(c: &mut Criterion) { let timer = Instant::now(); let _ = prover .create_opcode_proof( + &circuit_pk, wits_in, num_instances, max_threads, diff --git a/ceno_zkvm/src/structs.rs b/ceno_zkvm/src/structs.rs index 16af00f7c..a8c8e7ccf 100644 --- a/ceno_zkvm/src/structs.rs +++ b/ceno_zkvm/src/structs.rs @@ -244,7 +244,7 @@ impl ZKVMWitnesses { #[derive(Default)] pub struct ZKVMProvingKey { // pk for opcode and table circuits - pub(crate) circuit_pks: BTreeMap>, + pub circuit_pks: BTreeMap>, } impl ZKVMProvingKey { From 06b43b1c17f57318edd1a611018abcd2ce79de2e Mon Sep 17 00:00:00 2001 From: "sm.wu" Date: Wed, 11 Sep 2024 23:58:18 +0800 Subject: [PATCH 2/2] precise instance counting in example --- ceno_zkvm/examples/riscv_add.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/ceno_zkvm/examples/riscv_add.rs b/ceno_zkvm/examples/riscv_add.rs index a6903c681..0300d82ad 100644 --- a/ceno_zkvm/examples/riscv_add.rs +++ b/ceno_zkvm/examples/riscv_add.rs @@ -27,6 +27,7 @@ const RAYON_NUM_THREADS: usize = 8; // - x2 is initialized to -1, // - x3 is initialized to loop bound. // we use x4 to hold the acc_sum. +#[allow(clippy::unusual_byte_groupings)] const PROGRAM_ADD_LOOP: [u32; 4] = [ // func7 rs2 rs1 f3 rd opcode 0b_0000000_00100_00001_000_00100_0110011, // add x4, x4, x1 <=> addi x4, x4, 1 @@ -106,7 +107,7 @@ fn main() { let verifier = ZKVMVerifier::new(vk); for instance_num_vars in args.start..args.end { - let num_instances = 1 << instance_num_vars; + let step_loop = 1 << (instance_num_vars - 1); // 1 step in loop contribute to 2 add instance let mut vm = VMState::new(CENO_PLATFORM); let pc_start = ByteAddr(CENO_PLATFORM.pc_start()).waddr(); @@ -114,7 +115,7 @@ fn main() { // vm.x4 += vm.x1 vm.init_register_unsafe(1usize, 1); vm.init_register_unsafe(2usize, u32::MAX); // -1 in two's complement - vm.init_register_unsafe(3usize, num_instances as u32); + vm.init_register_unsafe(3usize, step_loop as u32); for (i, inst) in PROGRAM_ADD_LOOP.iter().enumerate() { vm.init_memory(pc_start + i, *inst); } @@ -148,17 +149,17 @@ fn main() { .create_proof(zkvm_witness, max_threads, &mut transcript, &real_challenges) .expect("create_proof failed"); + println!( + "AddInstruction::create_proof, instance_num_vars = {}, time = {}", + instance_num_vars, + timer.elapsed().as_secs_f64() + ); + let mut transcript = Transcript::new(b"riscv"); assert!( verifier .verify_proof(zkvm_proof, &mut transcript, &real_challenges) .expect("verify proof return with error"), ); - - println!( - "AddInstruction::create_proof, instance_num_vars = {}, time = {}", - instance_num_vars, - timer.elapsed().as_secs_f64() - ); } }