From 530c90b5be3ee99a0df81fc623cc2120a6c4cacf Mon Sep 17 00:00:00 2001 From: "sm.wu" Date: Fri, 7 Nov 2025 10:02:56 +0800 Subject: [PATCH 1/9] gpu process sumcheck in dag form --- Cargo.lock | 89 ++++++++++++++++++++---- Cargo.toml | 60 ++++++++-------- gkr_iop/src/gkr/layer.rs | 10 +++ gkr_iop/src/gkr/layer/gpu/mod.rs | 57 ++++++++++----- gkr_iop/src/gkr/layer/zerocheck_layer.rs | 9 ++- 5 files changed, 163 insertions(+), 62 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f8e7a0523..ca36cc62a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1368,6 +1368,8 @@ name = "cuda_hal" version = "0.1.0" dependencies = [ "anyhow", + "cudarc", + "downcast-rs", "ff_ext", "itertools 0.13.0", "mpcs", @@ -1375,8 +1377,10 @@ dependencies = [ "p3", "rand 0.8.5", "rayon", + "sppark", + "sppark_plug", "sumcheck", - "thiserror 2.0.12", + "thiserror 1.0.69", "tracing", "transcript", "witness", @@ -1904,7 +1908,6 @@ dependencies = [ [[package]] name = "ff_ext" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" dependencies = [ "once_cell", "p3", @@ -2186,6 +2189,15 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "home" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" +dependencies = [ + "windows-sys 0.61.1", +] + [[package]] name = "iana-time-zone" version = "0.1.64" @@ -2642,6 +2654,12 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + [[package]] name = "linux-raw-sys" version = "0.9.4" @@ -2716,7 +2734,6 @@ dependencies = [ [[package]] name = "mpcs" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" dependencies = [ "bincode", "clap", @@ -2740,7 +2757,6 @@ dependencies = [ [[package]] name = "multilinear_extensions" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" dependencies = [ "either", "ff_ext", @@ -3061,7 +3077,6 @@ dependencies = [ [[package]] name = "p3" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" dependencies = [ "p3-air", "p3-baby-bear", @@ -3498,7 +3513,6 @@ dependencies = [ [[package]] name = "poseidon" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" dependencies = [ "ff_ext", "p3", @@ -4118,6 +4132,19 @@ dependencies = [ "semver 1.0.26", ] +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + [[package]] name = "rustix" version = "1.0.7" @@ -4127,7 +4154,7 @@ dependencies = [ "bitflags", "errno", "libc", - "linux-raw-sys", + "linux-raw-sys 0.9.4", "windows-sys 0.59.0", ] @@ -4482,7 +4509,6 @@ dependencies = [ [[package]] name = "sp1-curves" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" dependencies = [ "cfg-if", "dashu", @@ -4517,6 +4543,25 @@ dependencies = [ "der", ] +[[package]] +name = "sppark" +version = "0.1.11" +dependencies = [ + "cc", + "which", +] + +[[package]] +name = "sppark_plug" +version = "0.1.0" +dependencies = [ + "cc", + "ff_ext", + "itertools 0.13.0", + "p3", + "sppark", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -4604,7 +4649,6 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "sumcheck" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" dependencies = [ "either", "ff_ext", @@ -4622,7 +4666,6 @@ dependencies = [ [[package]] name = "sumcheck_macro" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" dependencies = [ "itertools 0.13.0", "p3", @@ -4703,7 +4746,7 @@ dependencies = [ "fastrand", "getrandom 0.3.2", "once_cell", - "rustix", + "rustix 1.0.7", "windows-sys 0.59.0", ] @@ -5017,7 +5060,6 @@ dependencies = [ [[package]] name = "transcript" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" dependencies = [ "ff_ext", "itertools 0.13.0", @@ -5286,10 +5328,21 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix 0.38.44", +] + [[package]] name = "whir" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" dependencies = [ "bincode", "clap", @@ -5417,6 +5470,15 @@ dependencies = [ "windows-targets 0.53.4", ] +[[package]] +name = "windows-sys" +version = "0.61.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-targets" version = "0.52.6" @@ -5576,7 +5638,6 @@ dependencies = [ [[package]] name = "witness" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" dependencies = [ "ff_ext", "multilinear_extensions", diff --git a/Cargo.toml b/Cargo.toml index 43f2aea9a..bc217f6da 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,15 +1,15 @@ [workspace] members = [ - "ceno_cli", - "ceno_emul", - "ceno_host", - "ceno_rt", - "ceno_syscall", - "ceno_zkvm", - "derive", - "examples-builder", - "examples", - "guest_libs/*", + "ceno_cli", + "ceno_emul", + "ceno_host", + "ceno_rt", + "ceno_syscall", + "ceno_zkvm", + "derive", + "examples-builder", + "examples", + "guest_libs/*", ] resolver = "2" @@ -62,11 +62,11 @@ secp = "0.4.1" serde = { version = "1.0", features = ["derive", "rc"] } serde_json = "1.0" smallvec = { version = "1.13.2", features = [ - "const_generics", - "const_new", - "serde", - "union", - "write", + "const_generics", + "const_new", + "serde", + "union", + "write", ] } strum = "0.26" strum_macros = "0.26" @@ -75,13 +75,13 @@ thiserror = "2" thread_local = "1.1" tiny-keccak = { version = "2.0.2", features = ["keccak"] } tracing = { version = "0.1", features = [ - "attributes", + "attributes", ] } tracing-forest = { version = "0.1.6" } tracing-subscriber = { version = "0.3", features = ["env-filter"] } uint = "0.8" -ceno_gpu = { path = "utils/cuda_hal", package = "cuda_hal" } +ceno_gpu = { git = "ssh://git@github.com/scroll-tech/ceno-gpu.git", package = "cuda_hal", branch = "main", default-features = false, features = ["bb31"] } [profile.dev] lto = "thin" @@ -96,17 +96,17 @@ opt-level = 3 [profile.release] lto = "thin" -# [patch."ssh://git@github.com/scroll-tech/ceno-gpu.git"] -# ceno_gpu = { path = "../ceno-gpu/cuda_hal", package = "cuda_hal", default-features = false, features=["bb31"] } +[patch."ssh://git@github.com/scroll-tech/ceno-gpu.git"] +ceno_gpu = { path = "../ceno-gpu/cuda_hal", package = "cuda_hal", default-features = false, features = ["bb31"] } -# [patch."https://github.com/scroll-tech/gkr-backend"] -# ff_ext = { path = "../gkr-backend/crates/ff_ext", package = "ff_ext" } -# mpcs = { path = "../gkr-backend/crates/mpcs", package = "mpcs" } -# multilinear_extensions = { path = "../gkr-backend/crates/multilinear_extensions", package = "multilinear_extensions" } -# p3 = { path = "../gkr-backend/crates/p3", package = "p3" } -# poseidon = { path = "../gkr-backend/crates/poseidon", package = "poseidon" } -# sp1-curves = { path = "../gkr-backend/crates/curves", package = "sp1-curves" } -# sumcheck = { path = "../gkr-backend/crates/sumcheck", package = "sumcheck" } -# transcript = { path = "../gkr-backend/crates/transcript", package = "transcript" } -# whir = { path = "../gkr-backend/crates/whir", package = "whir" } -# witness = { path = "../gkr-backend/crates/witness", package = "witness" } +[patch."https://github.com/scroll-tech/gkr-backend"] +ff_ext = { path = "../gkr-backend/crates/ff_ext", package = "ff_ext" } +mpcs = { path = "../gkr-backend/crates/mpcs", package = "mpcs" } +multilinear_extensions = { path = "../gkr-backend/crates/multilinear_extensions", package = "multilinear_extensions" } +p3 = { path = "../gkr-backend/crates/p3", package = "p3" } +poseidon = { path = "../gkr-backend/crates/poseidon", package = "poseidon" } +sp1-curves = { path = "../gkr-backend/crates/curves", package = "sp1-curves" } +sumcheck = { path = "../gkr-backend/crates/sumcheck", package = "sumcheck" } +transcript = { path = "../gkr-backend/crates/transcript", package = "transcript" } +whir = { path = "../gkr-backend/crates/whir", package = "whir" } +witness = { path = "../gkr-backend/crates/witness", package = "witness" } diff --git a/gkr_iop/src/gkr/layer.rs b/gkr_iop/src/gkr/layer.rs index 64eb747be..eb330c0f2 100644 --- a/gkr_iop/src/gkr/layer.rs +++ b/gkr_iop/src/gkr/layer.rs @@ -103,6 +103,15 @@ pub struct Layer { pub main_sumcheck_expression_monomial_terms: Option, Expression>>>, pub main_sumcheck_expression: Option>, + // flatten computation dag + pub main_sumcheck_expression_dag: Option<( + Vec, + Vec, + Vec>, + Vec>, + (usize, usize), + )>, + // rotation sumcheck expression, only optionally valid for zerocheck // store in 2 forms: expression & monomial pub rotation_sumcheck_expression_monomial_terms: @@ -175,6 +184,7 @@ impl Layer { expr_names, main_sumcheck_expression_monomial_terms: None, main_sumcheck_expression: None, + main_sumcheck_expression_dag: None, rotation_sumcheck_expression_monomial_terms: None, rotation_sumcheck_expression: None, }; diff --git a/gkr_iop/src/gkr/layer/gpu/mod.rs b/gkr_iop/src/gkr/layer/gpu/mod.rs index 5840111e7..85aaecd44 100644 --- a/gkr_iop/src/gkr/layer/gpu/mod.rs +++ b/gkr_iop/src/gkr/layer/gpu/mod.rs @@ -18,6 +18,7 @@ use multilinear_extensions::{ Expression, mle::{MultilinearExtension, Point}, monomial::Term, + utils::eval_by_expr_constant, }; use rayon::{ iter::{IndexedParallelIterator, IntoParallelRefIterator, ParallelIterator}, @@ -232,23 +233,45 @@ impl> ZerocheckLayerProver layer.n_fixed, layer.n_instance, ); + + let ( + dag, + instance_scalar_expr, + challenges_expr, + constant_expr, + (max_degree, max_dag_depth), + ) = layer.main_sumcheck_expression_dag.as_ref().unwrap(); + + // format: pub_io ++ challenge ++ constant + let term_coefficients = instance_scalar_expr + .iter() + .map(|s| pub_io_evals[s.id]) + .copied() + .chain( + challenges_expr + .iter() + .map(|c| eval_by_expr_constant(pub_io_evals, challenges, c)) + .chain(constant_expr.iter().copied()) + .map(|either_v| match either_v { + Either::Left(base_field_val) => E::from(base_field_val), + Either::Right(ext_field_val) => ext_field_val, + }), + ) + .chain() + .collect_vec(); + // Calculate max_num_var and max_degree from the extracted relationships - let (term_coefficients, mle_indices_per_term, mle_size_info) = - extract_mle_relationships_from_monomial_terms( - &layer - .main_sumcheck_expression_monomial_terms - .clone() - .unwrap(), - &all_witins_gpu, - &pub_io_evals.iter().map(|v| Either::Right(*v)).collect_vec(), - &main_sumcheck_challenges, - ); + // let (term_coefficients, mle_indices_per_term, mle_size_info) = + // extract_mle_relationships_from_monomial_terms( + // &layer + // .main_sumcheck_expression_monomial_terms + // .clone() + // .unwrap(), + // &all_witins_gpu, + // &pub_io_evals.iter().map(|v| Either::Right(*v)).collect_vec(), + // &main_sumcheck_challenges, + // ); let max_num_var = max_num_variables; - let max_degree = mle_indices_per_term - .iter() - .map(|indices| indices.len()) - .max() - .unwrap_or(0); // Convert types for GPU function Call let basic_tr: &mut BasicTranscript = @@ -262,10 +285,10 @@ impl> ZerocheckLayerProver .sumcheck .prove_generic_sumcheck_gpu( &cuda_hal, + dag, + max_dag_depth, all_witins_gpu_type_gl64, - &mle_size_info, &term_coefficients_gl64, - &mle_indices_per_term, max_num_var, max_degree, basic_tr, diff --git a/gkr_iop/src/gkr/layer/zerocheck_layer.rs b/gkr_iop/src/gkr/layer/zerocheck_layer.rs index 95069b5e9..9277ba64c 100644 --- a/gkr_iop/src/gkr/layer/zerocheck_layer.rs +++ b/gkr_iop/src/gkr/layer/zerocheck_layer.rs @@ -5,7 +5,9 @@ use multilinear_extensions::{ macros::{entered_span, exit_span}, mle::{IntoMLE, Point}, monomialize_expr_to_wit_terms, - utils::{eval_by_expr, eval_by_expr_with_instance, expr_convert_to_witins}, + utils::{ + eval_by_expr, eval_by_expr_with_instance, expr_compression_to_dag, expr_convert_to_witins, + }, virtual_poly::VPAuxInfo, }; use p3::field::{FieldAlgebra, dot_product}; @@ -166,6 +168,11 @@ impl ZerocheckLayer for Layer { self.n_instance, ); self.main_sumcheck_expression = Some(zero_expr); + self.main_sumcheck_expression_dag = Some(expr_compression_to_dag( + self.main_sumcheck_expression.as_ref().unwrap(), + self.n_instance, + self.n_instance + 2, // global challenges: alpha, beta + )); self.main_sumcheck_expression_monomial_terms = self .main_sumcheck_expression .as_ref() From 3d27546c48ae8e3b544a113645be6b698d0ff762 Mon Sep 17 00:00:00 2001 From: "sm.wu" Date: Fri, 7 Nov 2025 16:27:20 +0800 Subject: [PATCH 2/9] build pass --- gkr_iop/src/gkr/layer/gpu/mod.rs | 20 ++++++++++++-------- gkr_iop/src/gkr/layer/zerocheck_layer.rs | 4 +++- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/gkr_iop/src/gkr/layer/gpu/mod.rs b/gkr_iop/src/gkr/layer/gpu/mod.rs index 85aaecd44..8430b8f19 100644 --- a/gkr_iop/src/gkr/layer/gpu/mod.rs +++ b/gkr_iop/src/gkr/layer/gpu/mod.rs @@ -15,7 +15,7 @@ use ff_ext::ExtensionField; use itertools::{Itertools, chain}; use mpcs::PolynomialCommitmentScheme; use multilinear_extensions::{ - Expression, + Expression, Instance, mle::{MultilinearExtension, Point}, monomial::Term, utils::eval_by_expr_constant, @@ -245,19 +245,23 @@ impl> ZerocheckLayerProver // format: pub_io ++ challenge ++ constant let term_coefficients = instance_scalar_expr .iter() - .map(|s| pub_io_evals[s.id]) - .copied() + .map(|Instance(id)| pub_io_evals[*id]) .chain( challenges_expr .iter() - .map(|c| eval_by_expr_constant(pub_io_evals, challenges, c)) + .map(|c| { + eval_by_expr_constant( + &pub_io_evals.iter().map(|v| Either::Right(*v)).collect_vec(), + &main_sumcheck_challenges, + c, + ) + }) .chain(constant_expr.iter().copied()) .map(|either_v| match either_v { Either::Left(base_field_val) => E::from(base_field_val), Either::Right(ext_field_val) => ext_field_val, }), ) - .chain() .collect_vec(); // Calculate max_num_var and max_degree from the extracted relationships @@ -283,14 +287,14 @@ impl> ZerocheckLayerProver let all_witins_gpu_type_gl64 = all_witins_gpu_gl64.iter().map(|mle| &mle.mle).collect_vec(); let (proof_gpu, evals_gpu, challenges_gpu) = cuda_hal .sumcheck - .prove_generic_sumcheck_gpu( + .prove_generic_sumcheck_gpu_v2( &cuda_hal, dag, - max_dag_depth, + *max_dag_depth, all_witins_gpu_type_gl64, &term_coefficients_gl64, max_num_var, - max_degree, + *max_degree, basic_tr, ) .unwrap(); diff --git a/gkr_iop/src/gkr/layer/zerocheck_layer.rs b/gkr_iop/src/gkr/layer/zerocheck_layer.rs index 9277ba64c..8b78e1e22 100644 --- a/gkr_iop/src/gkr/layer/zerocheck_layer.rs +++ b/gkr_iop/src/gkr/layer/zerocheck_layer.rs @@ -171,7 +171,9 @@ impl ZerocheckLayer for Layer { self.main_sumcheck_expression_dag = Some(expr_compression_to_dag( self.main_sumcheck_expression.as_ref().unwrap(), self.n_instance, - self.n_instance + 2, // global challenges: alpha, beta + self.n_instance + + 2 /* global challenges: alpha, beta */ + + alpha_pows_expr.len(), )); self.main_sumcheck_expression_monomial_terms = self .main_sumcheck_expression From 126722ae2e9b07e51b03e55205f0e9206132cb81 Mon Sep 17 00:00:00 2001 From: "sm.wu" Date: Fri, 7 Nov 2025 19:52:29 +0800 Subject: [PATCH 3/9] e2e pass --- gkr_iop/src/gkr/layer/gpu/mod.rs | 11 ----------- gkr_iop/src/gkr/layer/zerocheck_layer.rs | 4 ---- 2 files changed, 15 deletions(-) diff --git a/gkr_iop/src/gkr/layer/gpu/mod.rs b/gkr_iop/src/gkr/layer/gpu/mod.rs index 8430b8f19..df32a5073 100644 --- a/gkr_iop/src/gkr/layer/gpu/mod.rs +++ b/gkr_iop/src/gkr/layer/gpu/mod.rs @@ -264,17 +264,6 @@ impl> ZerocheckLayerProver ) .collect_vec(); - // Calculate max_num_var and max_degree from the extracted relationships - // let (term_coefficients, mle_indices_per_term, mle_size_info) = - // extract_mle_relationships_from_monomial_terms( - // &layer - // .main_sumcheck_expression_monomial_terms - // .clone() - // .unwrap(), - // &all_witins_gpu, - // &pub_io_evals.iter().map(|v| Either::Right(*v)).collect_vec(), - // &main_sumcheck_challenges, - // ); let max_num_var = max_num_variables; // Convert types for GPU function Call diff --git a/gkr_iop/src/gkr/layer/zerocheck_layer.rs b/gkr_iop/src/gkr/layer/zerocheck_layer.rs index 8b78e1e22..a5338bda0 100644 --- a/gkr_iop/src/gkr/layer/zerocheck_layer.rs +++ b/gkr_iop/src/gkr/layer/zerocheck_layer.rs @@ -170,10 +170,6 @@ impl ZerocheckLayer for Layer { self.main_sumcheck_expression = Some(zero_expr); self.main_sumcheck_expression_dag = Some(expr_compression_to_dag( self.main_sumcheck_expression.as_ref().unwrap(), - self.n_instance, - self.n_instance - + 2 /* global challenges: alpha, beta */ - + alpha_pows_expr.len(), )); self.main_sumcheck_expression_monomial_terms = self .main_sumcheck_expression From dd59acb388dcddc78a0f7377f638f378033383b7 Mon Sep 17 00:00:00 2001 From: "sm.wu" Date: Fri, 7 Nov 2025 21:41:14 +0800 Subject: [PATCH 4/9] show dag stats --- gkr_iop/src/gkr/layer/zerocheck_layer.rs | 46 ++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/gkr_iop/src/gkr/layer/zerocheck_layer.rs b/gkr_iop/src/gkr/layer/zerocheck_layer.rs index a5338bda0..9aac44904 100644 --- a/gkr_iop/src/gkr/layer/zerocheck_layer.rs +++ b/gkr_iop/src/gkr/layer/zerocheck_layer.rs @@ -168,9 +168,49 @@ impl ZerocheckLayer for Layer { self.n_instance, ); self.main_sumcheck_expression = Some(zero_expr); - self.main_sumcheck_expression_dag = Some(expr_compression_to_dag( - self.main_sumcheck_expression.as_ref().unwrap(), - )); + self.main_sumcheck_expression_dag = Some({ + let ( + dag, + instance_scalar_expr, + challenges_expr, + constant_expr, + (max_degree, max_dag_depth), + ) = expr_compression_to_dag(self.main_sumcheck_expression.as_ref().unwrap()); + + let mut traverse_dag_id = 0; + let mut num_add = 0; + let mut num_mul = 0; + while traverse_dag_id < dag.len() { + match dag[traverse_dag_id] { + 0 => traverse_dag_id += 2, // skip wit index + 1 => traverse_dag_id += 2, // skip scalar index + 2 => { + num_add += 1; + traverse_dag_id += 1; + } + 3 => { + num_mul += 1; + traverse_dag_id += 1; + } + _ => unreachable!(), + } + } + + tracing::debug!( + "layer name {} dag got num_add {num_add} num_mul {num_mul} max_degree {max_degree} \ + max_dag_depth {max_dag_depth} num_scalar {}", + self.name, + instance_scalar_expr.len() + challenges_expr.len() + constant_expr.len(), + ); + + ( + dag, + instance_scalar_expr, + challenges_expr, + constant_expr, + (max_degree, max_dag_depth), + ) + }); self.main_sumcheck_expression_monomial_terms = self .main_sumcheck_expression .as_ref() From dcec3117f8bd2fd5306ef69ad3e0c7bcbf1fae33 Mon Sep 17 00:00:00 2001 From: "sm.wu" Date: Sun, 9 Nov 2025 23:19:35 +0800 Subject: [PATCH 5/9] optimize Dag with Node struct --- gkr_iop/src/gkr/layer.rs | 4 +++- gkr_iop/src/gkr/layer/gpu/mod.rs | 2 ++ gkr_iop/src/gkr/layer/zerocheck_layer.rs | 4 +++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/gkr_iop/src/gkr/layer.rs b/gkr_iop/src/gkr/layer.rs index eb330c0f2..cb3deb7ce 100644 --- a/gkr_iop/src/gkr/layer.rs +++ b/gkr_iop/src/gkr/layer.rs @@ -6,6 +6,7 @@ use multilinear_extensions::{ Expression, Instance, StructuralWitIn, ToExpr, mle::{Point, PointAndEval}, monomial::Term, + utils::Node, }; use p3::field::FieldAlgebra; use rayon::iter::{IntoParallelIterator, IntoParallelRefIterator}; @@ -105,10 +106,11 @@ pub struct Layer { // flatten computation dag pub main_sumcheck_expression_dag: Option<( - Vec, + Vec, Vec, Vec>, Vec>, + u32, (usize, usize), )>, diff --git a/gkr_iop/src/gkr/layer/gpu/mod.rs b/gkr_iop/src/gkr/layer/gpu/mod.rs index df32a5073..8309584df 100644 --- a/gkr_iop/src/gkr/layer/gpu/mod.rs +++ b/gkr_iop/src/gkr/layer/gpu/mod.rs @@ -239,6 +239,7 @@ impl> ZerocheckLayerProver instance_scalar_expr, challenges_expr, constant_expr, + stack_top, (max_degree, max_dag_depth), ) = layer.main_sumcheck_expression_dag.as_ref().unwrap(); @@ -284,6 +285,7 @@ impl> ZerocheckLayerProver &term_coefficients_gl64, max_num_var, *max_degree, + *stack_top, basic_tr, ) .unwrap(); diff --git a/gkr_iop/src/gkr/layer/zerocheck_layer.rs b/gkr_iop/src/gkr/layer/zerocheck_layer.rs index 9aac44904..f3fa4a4b2 100644 --- a/gkr_iop/src/gkr/layer/zerocheck_layer.rs +++ b/gkr_iop/src/gkr/layer/zerocheck_layer.rs @@ -174,6 +174,7 @@ impl ZerocheckLayer for Layer { instance_scalar_expr, challenges_expr, constant_expr, + stack_top, (max_degree, max_dag_depth), ) = expr_compression_to_dag(self.main_sumcheck_expression.as_ref().unwrap()); @@ -181,7 +182,7 @@ impl ZerocheckLayer for Layer { let mut num_add = 0; let mut num_mul = 0; while traverse_dag_id < dag.len() { - match dag[traverse_dag_id] { + match dag[traverse_dag_id].op { 0 => traverse_dag_id += 2, // skip wit index 1 => traverse_dag_id += 2, // skip scalar index 2 => { @@ -208,6 +209,7 @@ impl ZerocheckLayer for Layer { instance_scalar_expr, challenges_expr, constant_expr, + stack_top, (max_degree, max_dag_depth), ) }); From 98f5d9ec734f0538efce9b7ac9fd7e74ff671934 Mon Sep 17 00:00:00 2001 From: "sm.wu" Date: Mon, 10 Nov 2025 21:16:18 +0800 Subject: [PATCH 6/9] dag version only on larger circuit --- gkr_iop/src/gkr/layer/gpu/mod.rs | 149 +++++++++++++++-------- gkr_iop/src/gkr/layer/zerocheck_layer.rs | 14 +-- 2 files changed, 103 insertions(+), 60 deletions(-) diff --git a/gkr_iop/src/gkr/layer/gpu/mod.rs b/gkr_iop/src/gkr/layer/gpu/mod.rs index 8309584df..f8a8805dc 100644 --- a/gkr_iop/src/gkr/layer/gpu/mod.rs +++ b/gkr_iop/src/gkr/layer/gpu/mod.rs @@ -234,61 +234,106 @@ impl> ZerocheckLayerProver layer.n_instance, ); - let ( - dag, - instance_scalar_expr, - challenges_expr, - constant_expr, - stack_top, - (max_degree, max_dag_depth), - ) = layer.main_sumcheck_expression_dag.as_ref().unwrap(); + let (proof_gpu, evals_gpu, challenges_gpu) = if layer.exprs.len() > 200 { + let ( + dag, + instance_scalar_expr, + challenges_expr, + constant_expr, + stack_top, + (max_degree, max_dag_depth), + ) = layer.main_sumcheck_expression_dag.as_ref().unwrap(); - // format: pub_io ++ challenge ++ constant - let term_coefficients = instance_scalar_expr - .iter() - .map(|Instance(id)| pub_io_evals[*id]) - .chain( - challenges_expr - .iter() - .map(|c| { - eval_by_expr_constant( - &pub_io_evals.iter().map(|v| Either::Right(*v)).collect_vec(), - &main_sumcheck_challenges, - c, - ) - }) - .chain(constant_expr.iter().copied()) - .map(|either_v| match either_v { - Either::Left(base_field_val) => E::from(base_field_val), - Either::Right(ext_field_val) => ext_field_val, - }), - ) - .collect_vec(); + // format: pub_io ++ challenge ++ constant + let term_coefficients = instance_scalar_expr + .iter() + .map(|Instance(id)| pub_io_evals[*id]) + .chain( + challenges_expr + .iter() + .map(|c| { + eval_by_expr_constant( + &pub_io_evals.iter().map(|v| Either::Right(*v)).collect_vec(), + &main_sumcheck_challenges, + c, + ) + }) + .chain(constant_expr.iter().copied()) + .map(|either_v| match either_v { + Either::Left(base_field_val) => E::from(base_field_val), + Either::Right(ext_field_val) => ext_field_val, + }), + ) + .collect_vec(); - let max_num_var = max_num_variables; + let max_num_var = max_num_variables; + + // Convert types for GPU function Call + let basic_tr: &mut BasicTranscript = + unsafe { &mut *(transcript as *mut _ as *mut BasicTranscript) }; + let term_coefficients_gl64: Vec = + unsafe { std::mem::transmute(term_coefficients) }; + let all_witins_gpu_gl64: Vec<&MultilinearExtensionGpu> = + unsafe { std::mem::transmute(all_witins_gpu) }; + let all_witins_gpu_type_gl64 = + all_witins_gpu_gl64.iter().map(|mle| &mle.mle).collect_vec(); + cuda_hal + .sumcheck + .prove_generic_sumcheck_gpu_v2( + &cuda_hal, + dag, + *max_dag_depth, + all_witins_gpu_type_gl64, + &term_coefficients_gl64, + max_num_var, + *max_degree, + *stack_top, + basic_tr, + ) + .unwrap() + } else { + // Calculate max_num_var and max_degree from the extracted relationships + let (term_coefficients, mle_indices_per_term, mle_size_info) = + extract_mle_relationships_from_monomial_terms( + &layer + .main_sumcheck_expression_monomial_terms + .clone() + .unwrap(), + &all_witins_gpu, + &pub_io_evals.iter().map(|v| Either::Right(*v)).collect_vec(), + &main_sumcheck_challenges, + ); + let max_num_var = max_num_variables; + let max_degree = mle_indices_per_term + .iter() + .map(|indices| indices.len()) + .max() + .unwrap_or(0); + + // Convert types for GPU function Call + let basic_tr: &mut BasicTranscript = + unsafe { &mut *(transcript as *mut _ as *mut BasicTranscript) }; + let term_coefficients_gl64: Vec = + unsafe { std::mem::transmute(term_coefficients) }; + let all_witins_gpu_gl64: Vec<&MultilinearExtensionGpu> = + unsafe { std::mem::transmute(all_witins_gpu) }; + let all_witins_gpu_type_gl64 = + all_witins_gpu_gl64.iter().map(|mle| &mle.mle).collect_vec(); + cuda_hal + .sumcheck + .prove_generic_sumcheck_gpu( + &cuda_hal, + all_witins_gpu_type_gl64, + &mle_size_info, + &term_coefficients_gl64, + &mle_indices_per_term, + max_num_var, + max_degree, + basic_tr, + ) + .unwrap() + }; - // Convert types for GPU function Call - let basic_tr: &mut BasicTranscript = - unsafe { &mut *(transcript as *mut _ as *mut BasicTranscript) }; - let term_coefficients_gl64: Vec = - unsafe { std::mem::transmute(term_coefficients) }; - let all_witins_gpu_gl64: Vec<&MultilinearExtensionGpu> = - unsafe { std::mem::transmute(all_witins_gpu) }; - let all_witins_gpu_type_gl64 = all_witins_gpu_gl64.iter().map(|mle| &mle.mle).collect_vec(); - let (proof_gpu, evals_gpu, challenges_gpu) = cuda_hal - .sumcheck - .prove_generic_sumcheck_gpu_v2( - &cuda_hal, - dag, - *max_dag_depth, - all_witins_gpu_type_gl64, - &term_coefficients_gl64, - max_num_var, - *max_degree, - *stack_top, - basic_tr, - ) - .unwrap(); let evals_gpu = evals_gpu.into_iter().flatten().collect_vec(); let row_challenges = challenges_gpu.iter().map(|c| c.elements).collect_vec(); diff --git a/gkr_iop/src/gkr/layer/zerocheck_layer.rs b/gkr_iop/src/gkr/layer/zerocheck_layer.rs index f3fa4a4b2..2e6b862eb 100644 --- a/gkr_iop/src/gkr/layer/zerocheck_layer.rs +++ b/gkr_iop/src/gkr/layer/zerocheck_layer.rs @@ -178,22 +178,20 @@ impl ZerocheckLayer for Layer { (max_degree, max_dag_depth), ) = expr_compression_to_dag(self.main_sumcheck_expression.as_ref().unwrap()); - let mut traverse_dag_id = 0; let mut num_add = 0; let mut num_mul = 0; - while traverse_dag_id < dag.len() { - match dag[traverse_dag_id].op { - 0 => traverse_dag_id += 2, // skip wit index - 1 => traverse_dag_id += 2, // skip scalar index + + for node in &dag { + match node.op { + 0 => (), // skip wit index + 1 => (), // skip scalar index 2 => { num_add += 1; - traverse_dag_id += 1; } 3 => { num_mul += 1; - traverse_dag_id += 1; } - _ => unreachable!(), + op => panic!("unknown op {op}"), } } From d09d75b4275bfba7e7265e507c3bffb036239c93 Mon Sep 17 00:00:00 2001 From: "sm.wu" Date: Tue, 11 Nov 2025 14:35:40 +0800 Subject: [PATCH 7/9] switch to new dag api --- gkr_iop/src/gkr/layer.rs | 10 +-- gkr_iop/src/gkr/layer/gpu/mod.rs | 38 +++------ gkr_iop/src/gkr/layer/zerocheck_layer.rs | 101 ++++++++++++----------- 3 files changed, 65 insertions(+), 84 deletions(-) diff --git a/gkr_iop/src/gkr/layer.rs b/gkr_iop/src/gkr/layer.rs index cb3deb7ce..73a7f561d 100644 --- a/gkr_iop/src/gkr/layer.rs +++ b/gkr_iop/src/gkr/layer.rs @@ -105,14 +105,8 @@ pub struct Layer { pub main_sumcheck_expression: Option>, // flatten computation dag - pub main_sumcheck_expression_dag: Option<( - Vec, - Vec, - Vec>, - Vec>, - u32, - (usize, usize), - )>, + // (dag, coeffs, final_out_index, max_dag_depth, max_degree) + pub main_sumcheck_expression_dag: Option<(Vec, Vec>, u32, usize, usize)>, // rotation sumcheck expression, only optionally valid for zerocheck // store in 2 forms: expression & monomial diff --git a/gkr_iop/src/gkr/layer/gpu/mod.rs b/gkr_iop/src/gkr/layer/gpu/mod.rs index f8a8805dc..f77a0dc48 100644 --- a/gkr_iop/src/gkr/layer/gpu/mod.rs +++ b/gkr_iop/src/gkr/layer/gpu/mod.rs @@ -15,7 +15,7 @@ use ff_ext::ExtensionField; use itertools::{Itertools, chain}; use mpcs::PolynomialCommitmentScheme; use multilinear_extensions::{ - Expression, Instance, + Expression, mle::{MultilinearExtension, Point}, monomial::Term, utils::eval_by_expr_constant, @@ -235,35 +235,19 @@ impl> ZerocheckLayerProver ); let (proof_gpu, evals_gpu, challenges_gpu) = if layer.exprs.len() > 200 { - let ( - dag, - instance_scalar_expr, - challenges_expr, - constant_expr, - stack_top, - (max_degree, max_dag_depth), - ) = layer.main_sumcheck_expression_dag.as_ref().unwrap(); + // (dag, coeffs, final_out_index, max_dag_depth, max_degree) + let (dag, coeffs, stack_top, max_dag_depth, max_degree) = + layer.main_sumcheck_expression_dag.as_ref().unwrap(); + let pub_io_eval_scalar = pub_io_evals.iter().map(|v| Either::Right(*v)).collect_vec(); // format: pub_io ++ challenge ++ constant - let term_coefficients = instance_scalar_expr + let term_coefficients = coeffs .iter() - .map(|Instance(id)| pub_io_evals[*id]) - .chain( - challenges_expr - .iter() - .map(|c| { - eval_by_expr_constant( - &pub_io_evals.iter().map(|v| Either::Right(*v)).collect_vec(), - &main_sumcheck_challenges, - c, - ) - }) - .chain(constant_expr.iter().copied()) - .map(|either_v| match either_v { - Either::Left(base_field_val) => E::from(base_field_val), - Either::Right(ext_field_val) => ext_field_val, - }), - ) + .map(|c| eval_by_expr_constant(&pub_io_eval_scalar, &main_sumcheck_challenges, c)) + .map(|either_v| match either_v { + Either::Left(base_field_val) => E::from(base_field_val), + Either::Right(ext_field_val) => ext_field_val, + }) .collect_vec(); let max_num_var = max_num_variables; diff --git a/gkr_iop/src/gkr/layer/zerocheck_layer.rs b/gkr_iop/src/gkr/layer/zerocheck_layer.rs index d5005b557..4986de7f6 100644 --- a/gkr_iop/src/gkr/layer/zerocheck_layer.rs +++ b/gkr_iop/src/gkr/layer/zerocheck_layer.rs @@ -6,7 +6,8 @@ use multilinear_extensions::{ mle::{IntoMLE, Point}, monomialize_expr_to_wit_terms, utils::{ - eval_by_expr, eval_by_expr_with_instance, expr_compression_to_dag, expr_convert_to_witins, + build_factored_dag_commutative, eval_by_expr, eval_by_expr_with_instance, + expr_convert_to_witins, }, virtual_poly::VPAuxInfo, }; @@ -167,61 +168,63 @@ impl ZerocheckLayer for Layer { self.n_fixed as WitnessId, self.n_instance, ); - tracing::debug!("main sumcheck degree: {}", zero_expr.degree()); + let zero_expr_degree = zero_expr.degree(); self.main_sumcheck_expression = Some(zero_expr); - self.main_sumcheck_expression_dag = Some({ - let ( - dag, - instance_scalar_expr, - challenges_expr, - constant_expr, - stack_top, - (max_degree, max_dag_depth), - ) = expr_compression_to_dag(self.main_sumcheck_expression.as_ref().unwrap()); - - let mut num_add = 0; - let mut num_mul = 0; - - for node in &dag { - match node.op { - 0 => (), // skip wit index - 1 => (), // skip scalar index - 2 => { - num_add += 1; - } - 3 => { - num_mul += 1; - } - op => panic!("unknown op {op}"), - } - } - - tracing::debug!( - "layer name {} dag got num_add {num_add} num_mul {num_mul} max_degree {max_degree} \ - max_dag_depth {max_dag_depth} num_scalar {}", - self.name, - instance_scalar_expr.len() + challenges_expr.len() + constant_expr.len(), - ); - - ( - dag, - instance_scalar_expr, - challenges_expr, - constant_expr, - stack_top, - (max_degree, max_dag_depth), - ) - }); self.main_sumcheck_expression_monomial_terms = self .main_sumcheck_expression .as_ref() .map(|expr| expr.get_monomial_terms()); - tracing::debug!( - "main sumcheck monomial terms count: {}", + + { self.main_sumcheck_expression_monomial_terms .as_ref() - .map_or(0, |terms| terms.len()), - ); + .map(|terms| { + let num_mul: usize = terms.iter().map(|term| term.product.len()).sum(); + let num_add = terms.iter().len() - 1; + + tracing::debug!( + "layer name {} monomial num_add: {num_add} num_mul: {num_mul}", + self.name, + ); + }); + } + + self.main_sumcheck_expression_dag = { + self.main_sumcheck_expression_monomial_terms + .as_ref() + .map(|terms| { + // selector are structural witin, which is used to be the largest id. + let (dag, coeffs, Some(final_out_index), max_dag_depth) = build_factored_dag_commutative(terms, false) else { panic!() }; + let stack_top = final_out_index + 1; + let max_degree = zero_expr_degree; + + let mut num_add = 0; + let mut num_mul = 0; + + for node in &dag { + match node.op { + 0 => (), // skip wit index + 1 => (), // skip scalar index + 2 => { + num_add += 1; + } + 3 => { + num_mul += 1; + } + op => panic!("unknown op {op}"), + } + } + + tracing::debug!( + "layer name {} dag got num_add {num_add} num_mul {num_mul} max_degree {max_degree} \ + max_dag_depth {max_dag_depth} num_scalar {} final_out_index {final_out_index}", + self.name, + coeffs.len(), + ); + (dag, coeffs, stack_top, max_dag_depth as usize, zero_expr_degree) + }) + }; + exit_span!(span); } From bb3a88e4a096852d7ac6de92917a4da52249834d Mon Sep 17 00:00:00 2001 From: "sm.wu" Date: Wed, 12 Nov 2025 10:01:24 +0800 Subject: [PATCH 8/9] refactor with generic sumcheck api --- gkr_iop/src/gkr/layer/gpu/mod.rs | 139 +++++++++++++------------------ 1 file changed, 60 insertions(+), 79 deletions(-) diff --git a/gkr_iop/src/gkr/layer/gpu/mod.rs b/gkr_iop/src/gkr/layer/gpu/mod.rs index f77a0dc48..f660ac95b 100644 --- a/gkr_iop/src/gkr/layer/gpu/mod.rs +++ b/gkr_iop/src/gkr/layer/gpu/mod.rs @@ -234,89 +234,66 @@ impl> ZerocheckLayerProver layer.n_instance, ); - let (proof_gpu, evals_gpu, challenges_gpu) = if layer.exprs.len() > 200 { - // (dag, coeffs, final_out_index, max_dag_depth, max_degree) - let (dag, coeffs, stack_top, max_dag_depth, max_degree) = - layer.main_sumcheck_expression_dag.as_ref().unwrap(); + // process dag + // (dag, coeffs, final_out_index, max_dag_depth, max_degree) + let (dag, dag_coeffs, stack_top, max_dag_depth, max_degree) = + layer.main_sumcheck_expression_dag.as_ref().unwrap(); - let pub_io_eval_scalar = pub_io_evals.iter().map(|v| Either::Right(*v)).collect_vec(); - // format: pub_io ++ challenge ++ constant - let term_coefficients = coeffs - .iter() - .map(|c| eval_by_expr_constant(&pub_io_eval_scalar, &main_sumcheck_challenges, c)) - .map(|either_v| match either_v { - Either::Left(base_field_val) => E::from(base_field_val), - Either::Right(ext_field_val) => ext_field_val, - }) - .collect_vec(); + let pub_io_eval_scalar = pub_io_evals.iter().map(|v| Either::Right(*v)).collect_vec(); + // format: pub_io ++ challenge ++ constant + let dag_coeffs = dag_coeffs + .iter() + .map(|c| eval_by_expr_constant(&pub_io_eval_scalar, &main_sumcheck_challenges, c)) + .map(|either_v| match either_v { + Either::Left(base_field_val) => E::from(base_field_val), + Either::Right(ext_field_val) => ext_field_val, + }) + .collect_vec(); - let max_num_var = max_num_variables; + // process monomial terms + // Calculate max_num_var and max_degree from the extracted relationships + let (monomial_coefficients, mle_indices_per_term, mle_size_info) = + extract_mle_relationships_from_monomial_terms( + &layer + .main_sumcheck_expression_monomial_terms + .clone() + .unwrap(), + &all_witins_gpu, + &pub_io_evals.iter().map(|v| Either::Right(*v)).collect_vec(), + &main_sumcheck_challenges, + ); - // Convert types for GPU function Call - let basic_tr: &mut BasicTranscript = - unsafe { &mut *(transcript as *mut _ as *mut BasicTranscript) }; - let term_coefficients_gl64: Vec = - unsafe { std::mem::transmute(term_coefficients) }; - let all_witins_gpu_gl64: Vec<&MultilinearExtensionGpu> = - unsafe { std::mem::transmute(all_witins_gpu) }; - let all_witins_gpu_type_gl64 = - all_witins_gpu_gl64.iter().map(|mle| &mle.mle).collect_vec(); - cuda_hal - .sumcheck - .prove_generic_sumcheck_gpu_v2( - &cuda_hal, - dag, - *max_dag_depth, - all_witins_gpu_type_gl64, - &term_coefficients_gl64, - max_num_var, - *max_degree, - *stack_top, - basic_tr, - ) - .unwrap() - } else { - // Calculate max_num_var and max_degree from the extracted relationships - let (term_coefficients, mle_indices_per_term, mle_size_info) = - extract_mle_relationships_from_monomial_terms( - &layer - .main_sumcheck_expression_monomial_terms - .clone() - .unwrap(), - &all_witins_gpu, - &pub_io_evals.iter().map(|v| Either::Right(*v)).collect_vec(), - &main_sumcheck_challenges, - ); - let max_num_var = max_num_variables; - let max_degree = mle_indices_per_term - .iter() - .map(|indices| indices.len()) - .max() - .unwrap_or(0); + let max_num_var = max_num_variables; + + // Convert types for GPU function Call + let monomial_coefficients: Vec = + unsafe { std::mem::transmute(monomial_coefficients) }; - // Convert types for GPU function Call - let basic_tr: &mut BasicTranscript = - unsafe { &mut *(transcript as *mut _ as *mut BasicTranscript) }; - let term_coefficients_gl64: Vec = - unsafe { std::mem::transmute(term_coefficients) }; - let all_witins_gpu_gl64: Vec<&MultilinearExtensionGpu> = - unsafe { std::mem::transmute(all_witins_gpu) }; - let all_witins_gpu_type_gl64 = - all_witins_gpu_gl64.iter().map(|mle| &mle.mle).collect_vec(); - cuda_hal - .sumcheck - .prove_generic_sumcheck_gpu( - &cuda_hal, - all_witins_gpu_type_gl64, - &mle_size_info, - &term_coefficients_gl64, - &mle_indices_per_term, - max_num_var, - max_degree, - basic_tr, - ) - .unwrap() - }; + // Convert types for GPU function Call + let basic_tr: &mut BasicTranscript = + unsafe { &mut *(transcript as *mut _ as *mut BasicTranscript) }; + let dag_coeffs: Vec = unsafe { std::mem::transmute(dag_coeffs) }; + + let all_witins_gpu_gl64: Vec<&MultilinearExtensionGpu> = + unsafe { std::mem::transmute(all_witins_gpu) }; + let all_witins_gpu_type_gl64 = all_witins_gpu_gl64.iter().map(|mle| &mle.mle).collect_vec(); + let (proof_gpu, evals_gpu, challenges_gpu) = cuda_hal + .sumcheck + .prove_generic_sumcheck_gpu( + &cuda_hal, + all_witins_gpu_type_gl64, + &mle_size_info, + &monomial_coefficients, + &mle_indices_per_term, + max_num_var, + *max_degree, + dag, + *max_dag_depth, + &dag_coeffs, + *stack_top, + basic_tr, + ) + .unwrap(); let evals_gpu = evals_gpu.into_iter().flatten().collect_vec(); let row_challenges = challenges_gpu.iter().map(|c| c.elements).collect_vec(); @@ -436,6 +413,10 @@ pub(crate) fn prove_rotation_gpu Date: Wed, 12 Nov 2025 19:27:18 +0800 Subject: [PATCH 9/9] set gkr-backend dep --- Cargo.lock | 22 +++++++++++----------- Cargo.toml | 20 ++++++++++---------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d319c82f2..0309f5133 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1904,7 +1904,7 @@ dependencies = [ [[package]] name = "ff_ext" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=feat%2Farithmetics#e5f7c87175efd581cf38a86da38b38978b278b2c" dependencies = [ "once_cell", "p3", @@ -2716,7 +2716,7 @@ dependencies = [ [[package]] name = "mpcs" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=feat%2Farithmetics#e5f7c87175efd581cf38a86da38b38978b278b2c" dependencies = [ "bincode", "clap", @@ -2740,7 +2740,7 @@ dependencies = [ [[package]] name = "multilinear_extensions" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=feat%2Farithmetics#e5f7c87175efd581cf38a86da38b38978b278b2c" dependencies = [ "either", "ff_ext", @@ -3061,7 +3061,7 @@ dependencies = [ [[package]] name = "p3" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=feat%2Farithmetics#e5f7c87175efd581cf38a86da38b38978b278b2c" dependencies = [ "p3-air", "p3-baby-bear", @@ -3498,7 +3498,7 @@ dependencies = [ [[package]] name = "poseidon" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=feat%2Farithmetics#e5f7c87175efd581cf38a86da38b38978b278b2c" dependencies = [ "ff_ext", "p3", @@ -4482,7 +4482,7 @@ dependencies = [ [[package]] name = "sp1-curves" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=feat%2Farithmetics#e5f7c87175efd581cf38a86da38b38978b278b2c" dependencies = [ "cfg-if", "dashu", @@ -4604,7 +4604,7 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "sumcheck" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=feat%2Farithmetics#e5f7c87175efd581cf38a86da38b38978b278b2c" dependencies = [ "either", "ff_ext", @@ -4622,7 +4622,7 @@ dependencies = [ [[package]] name = "sumcheck_macro" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=feat%2Farithmetics#e5f7c87175efd581cf38a86da38b38978b278b2c" dependencies = [ "itertools 0.13.0", "p3", @@ -5017,7 +5017,7 @@ dependencies = [ [[package]] name = "transcript" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=feat%2Farithmetics#e5f7c87175efd581cf38a86da38b38978b278b2c" dependencies = [ "ff_ext", "itertools 0.13.0", @@ -5289,7 +5289,7 @@ dependencies = [ [[package]] name = "whir" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=feat%2Farithmetics#e5f7c87175efd581cf38a86da38b38978b278b2c" dependencies = [ "bincode", "clap", @@ -5576,7 +5576,7 @@ dependencies = [ [[package]] name = "witness" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.13#89aa6add9f4d16cd2f10ec81f7c11d4507400c9b" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=feat%2Farithmetics#e5f7c87175efd581cf38a86da38b38978b278b2c" dependencies = [ "ff_ext", "multilinear_extensions", diff --git a/Cargo.toml b/Cargo.toml index a0b824a62..4c56c41bd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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.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" } +ff_ext = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "ff_ext", branch = "feat/arithmetics" } +mpcs = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "mpcs", branch = "feat/arithmetics" } +multilinear_extensions = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "multilinear_extensions", branch = "feat/arithmetics" } +p3 = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "p3", branch = "feat/arithmetics" } +poseidon = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "poseidon", branch = "feat/arithmetics" } +sp1-curves = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "sp1-curves", branch = "feat/arithmetics" } +sumcheck = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "sumcheck", branch = "feat/arithmetics" } +transcript = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "transcript", branch = "feat/arithmetics" } +whir = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "whir", branch = "feat/arithmetics" } +witness = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "witness", branch = "feat/arithmetics" } alloy-primitives = "1.3" anyhow = { version = "1.0", default-features = false }