Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion workspaces/base_files/sp1/cargo_host
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ sp1-helper = "4.0.0"

[features]
default = []
cuda = ["dep:sp1-cuda"]
cuda = ["dep:sp1-cuda", "sp1-sdk/cuda"]

[dependencies]
sp1-sdk = { git = "https://github.com/succinctlabs/sp1.git", tag = "v3.4.0" }
Expand Down
56 changes: 11 additions & 45 deletions workspaces/base_files/sp1/host
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,6 @@ mod metrics;
use metrics::{MetricsCollector, SP1Metrics};
use tracing::{error, info};

use sp1_core_executor::SP1Context;

// use sp1_core_machine::io::SP1Stdin;
use sp1_prover::{components::DefaultProverComponents, utils::get_cycles, SP1Prover};

#[cfg(feature = "cuda")]
use sp1_cuda::SP1CudaProver;

#[cfg(not(feature = "cuda"))]
use sp1_stark::SP1ProverOpts;

/// The ELF (executable and linkable format) file for the Succinct RISC-V zkVM.
///
/// This file is generated by running `cargo prove build` inside the `program` directory.
Expand All @@ -34,14 +23,8 @@ fn main() {

// INPUT //

#[cfg(feature = "cuda")]
let server = SP1CudaProver::new().expect("Failed to initialize CUDA prover");

let client = ProverClient::new();
let prover = SP1Prover::<DefaultProverComponents>::new();

// Setup the prover
let (pk, vk) = prover.setup(METHOD_ELF);
let (pk, vk) = client.setup(METHOD_ELF);

// First run executor to get cycle count
let (_, report) = client.execute(METHOD_ELF, stdin.clone()).run().unwrap();
Expand All @@ -50,50 +33,30 @@ fn main() {
// Number of segments is the number of cycle tracking entries
metrics.num_segments = report.cycle_tracker.len();

// Setup the prover options.
#[cfg(not(feature = "cuda"))]
let opts = SP1ProverOpts::default();

// Generate uncompressed proof
core_timer.start_timing();

// Set as mutable to allow for template code to access it if needed
// Generate uncompressed proof (CPU)
#[cfg(not(feature = "cuda"))]
let mut proof = client.prove(&pk, stdin.clone()).run().unwrap();

// Generate the core proof (CUDA).
#[cfg(feature = "cuda")]
let proof = server.prove_core(&pk, &stdin.clone()).unwrap();

metrics.core_prove_duration = core_timer.elapsed().unwrap();

// Get uncompressed proof size
let core_bytes = bincode::serialize(&proof).unwrap();
metrics.core_proof_size = core_bytes.len();

// Save public values before moving proof
let public_values = proof.public_values.clone();

// Verify uncompressed proof
core_timer.start_timing();
prover
.verify(&proof.proof, &vk)
client
.verify(&proof, &vk)
.expect("Failed to verify uncompressed proof");
metrics.core_verify_duration = core_timer.elapsed().unwrap();

// Generate compressed proof
compress_timer.start_timing();

#[cfg(not(feature = "cuda"))]
let compressed = client
.prove(&pk, stdin)
.compressed() // Enable compression
.run()
.unwrap();

#[cfg(feature = "cuda")]
let compressed = server.compress(&vk, proof, vec![]).unwrap();

metrics.compress_prove_duration = compress_timer.elapsed().unwrap();

// Get compressed proof size
Expand All @@ -102,8 +65,8 @@ fn main() {

// Verify compressed proof
compress_timer.start_timing();
prover
.verify_compressed(&compressed, &vk)
client
.verify(&compressed, &vk)
.expect("Failed to verify compressed proof");
metrics.compress_verify_duration = compress_timer.elapsed().unwrap();

Expand All @@ -119,8 +82,11 @@ fn main() {
.expect("Failed to save SP1 Proof file");
std::fs::write(current_dir.join("proof_data/sp1/sp1.elf"), METHOD_ELF)
.expect("Failed to create SP1 elf file");
std::fs::write(current_dir.join("proof_data/sp1/sp1.pub"), &public_values)
.expect("Failed to save SP1 public input");
std::fs::write(
current_dir.join("proof_data/sp1/sp1.pub"),
&compressed.public_values,
)
.expect("Failed to save SP1 public input");

// Save metrics
info!("Attempting to save metrics...");
Expand Down
1 change: 1 addition & 0 deletions workspaces/sp1/script/Cargo.lock

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

2 changes: 1 addition & 1 deletion workspaces/sp1/script/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ sp1-helper = "4.0.0"

[features]
default = []
cuda = ["dep:sp1-cuda"]
cuda = ["dep:sp1-cuda", "sp1-sdk/cuda"]

[dependencies]
sp1-sdk = { git = "https://github.com/succinctlabs/sp1.git", tag = "v3.4.0" }
Expand Down
60 changes: 11 additions & 49 deletions workspaces/sp1/script/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,6 @@ mod metrics;
use metrics::{MetricsCollector, SP1Metrics};
use tracing::{error, info};

use sp1_core_executor::SP1Context;

// use sp1_core_machine::io::SP1Stdin;
use sp1_prover::{components::DefaultProverComponents, utils::get_cycles, SP1Prover};

#[cfg(feature = "cuda")]
use sp1_cuda::SP1CudaProver;

#[cfg(not(feature = "cuda"))]
use sp1_stark::SP1ProverOpts;

/// The ELF (executable and linkable format) file for the Succinct RISC-V zkVM.
///
/// This file is generated by running `cargo prove build` inside the `program` directory.
Expand All @@ -34,14 +23,8 @@ fn main() {

// INPUT //

#[cfg(feature = "cuda")]
let server = SP1CudaProver::new().expect("Failed to initialize CUDA prover");

let client = ProverClient::new();
let prover = SP1Prover::<DefaultProverComponents>::new();

// Setup the prover
let (pk, vk) = prover.setup(METHOD_ELF);
let (pk, vk) = client.setup(METHOD_ELF);

// First run executor to get cycle count
let (_, report) = client.execute(METHOD_ELF, stdin.clone()).run().unwrap();
Expand All @@ -50,54 +33,30 @@ fn main() {
// Number of segments is the number of cycle tracking entries
metrics.num_segments = report.cycle_tracker.len();

// Setup the prover options.
#[cfg(not(feature = "cuda"))]
let opts = SP1ProverOpts::default();

// Generate uncompressed proof
core_timer.start_timing();

// Set as mutable to allow for template code to access it if needed
// Generate uncompressed proof (CPU)
#[cfg(not(feature = "cuda"))]
let mut proof = client.prove(&pk, stdin.clone()).run().unwrap();

// Generate the core proof (CUDA).
#[cfg(feature = "cuda")]
let proof = server.prove_core(&pk, &stdin.clone()).unwrap();

metrics.core_prove_duration = core_timer.elapsed().unwrap();

// Get uncompressed proof size
let core_bytes = bincode::serialize(&proof).unwrap();
metrics.core_proof_size = core_bytes.len();

// Save public values before moving proof
let public_values = proof.public_values.clone();

// Verify uncompressed proof
core_timer.start_timing();
prover
.verify(&proof.proof, &vk)
client
.verify(&proof, &vk)
.expect("Failed to verify uncompressed proof");
metrics.core_verify_duration = core_timer.elapsed().unwrap();

// Generate compressed proof
compress_timer.start_timing();

#[cfg(not(feature = "cuda"))]
let compressed = client
.prove(&pk, stdin)
.compressed() // Enable compression
.run()
.unwrap()
.proof
.try_as_compressed()
.unwrap()
.unwrap();

#[cfg(feature = "cuda")]
let compressed = server.compress(&vk, proof, vec![]).unwrap();

metrics.compress_prove_duration = compress_timer.elapsed().unwrap();

// Get compressed proof size
Expand All @@ -106,8 +65,8 @@ fn main() {

// Verify compressed proof
compress_timer.start_timing();
prover
.verify_compressed(&compressed, &vk)
client
.verify(&compressed, &vk)
.expect("Failed to verify compressed proof");
metrics.compress_verify_duration = compress_timer.elapsed().unwrap();

Expand All @@ -123,8 +82,11 @@ fn main() {
.expect("Failed to save SP1 Proof file");
std::fs::write(current_dir.join("proof_data/sp1/sp1.elf"), METHOD_ELF)
.expect("Failed to create SP1 elf file");
std::fs::write(current_dir.join("proof_data/sp1/sp1.pub"), &public_values)
.expect("Failed to save SP1 public input");
std::fs::write(
current_dir.join("proof_data/sp1/sp1.pub"),
&compressed.public_values,
)
.expect("Failed to save SP1 public input");

// Save metrics
info!("Attempting to save metrics...");
Expand Down
Loading