diff --git a/Cargo.toml b/Cargo.toml index c809013..fd6a7be 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,6 +25,9 @@ ark-std = { version = "^0.4.0", default-features = false, optional = true } # concurrency rayon = "1.8" +# cuda +cuda-sumcheck = { git = "https://github.com/pseXperiments/cuda-sumcheck.git", tag = "v0.1.0", package = "sumcheck" } + [dev-dependencies] criterion = { version = "0.4", features = ["html_reports"] } diff --git a/src/sumcheck/cuda.rs b/src/sumcheck/cuda.rs new file mode 100644 index 0000000..272d38f --- /dev/null +++ b/src/sumcheck/cuda.rs @@ -0,0 +1,53 @@ +use super::{SumCheck, VirtualPolynomial}; +use crate::utils::ProtocolError; +use ff::PrimeField; + +#[derive(Clone, Debug)] +pub struct CudaSumcheck; + +#[derive(Clone, Debug)] +pub struct CudaSumcheckProverParam { + num_vars: usize, + max_degree: usize, +} +#[derive(Clone, Debug)] +pub struct CudaSumcheckVerifierParam { + num_vars: usize, + max_degree: usize, +} + +impl SumCheck for CudaSumcheck { + type ProverParam = CudaSumcheckProverParam; + type VerifierParam = CudaSumcheckVerifierParam; + + fn generate_pp(num_vars: usize, max_degree: usize) -> Result { + todo!() + } + + fn generate_vp( + num_vars: usize, + max_degree: usize, + ) -> Result { + todo!() + } + + fn prove( + pp: &Self::ProverParam, + combine_function: &impl Fn(&Vec) -> F, + sum: F, + virtual_poly: VirtualPolynomial, + transcript: &mut impl crate::utils::transcript::FieldTranscriptWrite, + ) -> Result<(Vec, Vec), ProtocolError> { + todo!() + } + + fn verify( + vp: &Self::VerifierParam, + degree: usize, + sum: F, + num_polys: usize, + transcript: &mut impl crate::utils::transcript::FieldTranscriptRead, + ) -> Result<(F, Vec, Vec), ProtocolError> { + todo!() + } +} diff --git a/src/sumcheck/mod.rs b/src/sumcheck/mod.rs index 508ed0d..50157cd 100644 --- a/src/sumcheck/mod.rs +++ b/src/sumcheck/mod.rs @@ -13,6 +13,7 @@ use crate::{ }; pub mod classic; +pub mod cuda; pub mod parallel; pub fn eq_xy_eval(x: &[F], y: &[F]) -> F {