diff --git a/.github/workflows/benchmark-call.yml b/.github/workflows/benchmark-call.yml index f62efa7373..436b00bdec 100644 --- a/.github/workflows/benchmark-call.yml +++ b/.github/workflows/benchmark-call.yml @@ -159,7 +159,6 @@ jobs: echo "FEATURE_FLAGS=${FEATURE_FLAGS},aggregation" >> $GITHUB_ENV - name: Setup e2e (halo2 and arguments) - working-directory: extensions/native/recursion # We only ever run halo2 for recursion run: | E2E_BENCH=${{ inputs.e2e_bench }} echo "E2E_BENCH=${E2E_BENCH}" >> $GITHUB_ENV @@ -169,6 +168,7 @@ jobs: INTERNAL_ARG="--internal_log_blowup ${{ inputs.internal_log_blowup }}" echo "INPUT_ARGS=${ROOT_ARG} ${INTERNAL_ARG} ${INPUT_ARGS}" >> $GITHUB_ENV bash ./extensions/native/recursion/trusted_setup_s3.sh + export PARAMS_DIR=$(pwd)/params fi - name: Set BIN_NAME and CMD_ARGS @@ -185,8 +185,8 @@ jobs: select(.name == $name) | .working_directory ' ./ci/benchmark-config.json) - RELATIVE_PATH=$(python3 -c "import os.path; print(os.path.relpath('.', '$WORKSPACE_DIR'))") - echo "working_dir=$WORKSPACE_DIR" >> $GITHUB_OUTPUT + RELATIVE_PATH=$(python3 -c "import os.path; print(os.path.relpath('.', '$WORKING_DIR'))") + echo "working_dir=$WORKING_DIR" >> $GITHUB_OUTPUT echo "relative_path=$RELATIVE_PATH" >> $GITHUB_OUTPUT # Metric name is unique within a run (matrix) diff --git a/benchmarks/src/bin/fib_e2e.rs b/benchmarks/src/bin/fib_e2e.rs index 463ad4bd69..188119eae1 100644 --- a/benchmarks/src/bin/fib_e2e.rs +++ b/benchmarks/src/bin/fib_e2e.rs @@ -13,6 +13,7 @@ use openvm_rv32im_transpiler::{ use openvm_sdk::{ commit::commit_app_exe, config::{AggConfig, AggStarkConfig, AppConfig, Halo2Config}, + prover::ContinuationProver, Sdk, StdIn, }; use openvm_stark_sdk::{ @@ -87,14 +88,11 @@ async fn main() -> Result<()> { let mut stdin = StdIn::default(); stdin.write(&n); run_with_metric_collection("OUTPUT_PATH", || { - Sdk.generate_evm_proof( - &halo2_params_reader, - app_pk, - app_committed_exe, - full_agg_pk, - stdin, - ) - .unwrap(); + let mut e2e_prover = + ContinuationProver::new(&halo2_params_reader, app_pk, app_committed_exe, full_agg_pk) + .with_profiling(); + e2e_prover.set_program_name("fib_e2e"); + let _proof = e2e_prover.generate_proof_for_evm(stdin); }); Ok(()) diff --git a/benchmarks/src/utils.rs b/benchmarks/src/utils.rs index c2c6ba2646..2751323916 100644 --- a/benchmarks/src/utils.rs +++ b/benchmarks/src/utils.rs @@ -100,11 +100,8 @@ where let committed_exe = time(gauge!("commit_exe_time_ms"), || { commit_app_exe(app_config.app_fri_params, exe) }); - // 3. Executes runtime again without metric collection and generate trace. - time(gauge!("execute_and_trace_gen_time_ms"), || { - vm.execute_and_generate_with_cached_program(committed_exe.clone(), input_stream.clone()) - })?; - // 4. Executes runtime once with full metric collection for flamegraphs (slow). + // 3. Executes runtime once with full metric collection for flamegraphs (slow). + // 4. Executes runtime again without metric collection and generate trace. // 5. Generate STARK proofs for each segment (segmentation is determined by `config`), with timer. // generate_app_proof will emit metrics for proof time of each let vk = app_pk.app_vm_pk.vm_pk.get_vk(); diff --git a/ci/scripts/metric_unify/summarize.py b/ci/scripts/metric_unify/summarize.py index 2f3c5202ac..39f7def71e 100644 --- a/ci/scripts/metric_unify/summarize.py +++ b/ci/scripts/metric_unify/summarize.py @@ -121,7 +121,7 @@ def generate_row(md_file, sections, aggregation_groups, gh_pages_link): group_row = section_by_group.get(section) if group_row is None: res += [format_cell("-", None, None)] * COLS_PER_SECTION - else: + else: res.append(str(group_row.log_blowup)) for cell in group_row.cells: res.append(str(cell)) @@ -154,16 +154,16 @@ def main(): md_files = args.metrics_md_files.split(',') outputs = [] for md_file in md_files: - outputs.append(generate_row(md_file, ["leaf_verifier"], {}, args.gh_pages_link)) + outputs.append(generate_row(md_file, ["leaf"], {}, args.gh_pages_link)) write_md_table(outputs, "Benchmarks", headers, rewrite=True) if args.e2e_md_files and args.e2e_md_files.strip(): outputs = [] md_files = args.e2e_md_files.split(',') for md_file in md_files: - outputs.append(generate_row(md_file, ["root_verifier", "leaf_verifier", "internal_verifier"], {"internal.*": "internal_verifier"}, args.gh_pages_link)) + outputs.append(generate_row(md_file, ["root", "leaf", "internal"], {"internal.*": "internal"}, args.gh_pages_link)) if outputs: write_md_table(outputs, "E2E Benchmarks", e2e_headers) if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/crates/sdk/src/prover/mod.rs b/crates/sdk/src/prover/mod.rs index 1a7c47738f..72b6f1921c 100644 --- a/crates/sdk/src/prover/mod.rs +++ b/crates/sdk/src/prover/mod.rs @@ -61,6 +61,11 @@ impl ContinuationProver { self } + pub fn with_profiling(mut self) -> Self { + self.set_profile(true); + self + } + pub fn set_program_name(&mut self, program_name: impl AsRef) -> &mut Self { self.stark_prover.set_program_name(program_name); self diff --git a/crates/vm/src/system/memory/adapter/mod.rs b/crates/vm/src/system/memory/adapter/mod.rs index 71dcdb4309..652d918cbc 100644 --- a/crates/vm/src/system/memory/adapter/mod.rs +++ b/crates/vm/src/system/memory/adapter/mod.rs @@ -80,6 +80,9 @@ impl AccessAdapterInventory { .map(|chip| chip.current_trace_height()) .collect() } + pub fn get_widths(&self) -> Vec { + self.chips.iter().map(|chip| chip.trace_width()).collect() + } pub fn airs(&self) -> Vec>> where F: PrimeField32, diff --git a/crates/vm/src/system/memory/manager/mod.rs b/crates/vm/src/system/memory/manager/mod.rs index b7bbae0312..33cb989b49 100644 --- a/crates/vm/src/system/memory/manager/mod.rs +++ b/crates/vm/src/system/memory/manager/mod.rs @@ -13,7 +13,6 @@ use itertools::{izip, zip_eq}; pub use memory::{MemoryReadRecord, MemoryWriteRecord}; use openvm_circuit_primitives::{ assert_less_than::{AssertLtSubAir, LessThanAuxCols}, - is_less_than::IsLtSubAir, is_zero::IsZeroSubAir, utils::next_power_of_two_or_zero, var_range::{VariableRangeCheckerBus, VariableRangeCheckerChip}, @@ -36,12 +35,9 @@ use self::interface::MemoryInterface; use super::{merkle::DirectCompressionBus, volatile::VolatileBoundaryChip}; use crate::{ arch::{hasher::HasherChip, MemoryConfig}, - system::memory::{ - adapter::AccessAdapterAir, - offline_checker::{ - MemoryBridge, MemoryBus, MemoryReadAuxCols, MemoryReadOrImmediateAuxCols, - MemoryWriteAuxCols, AUX_LEN, - }, + system::memory::offline_checker::{ + MemoryBridge, MemoryBus, MemoryReadAuxCols, MemoryReadOrImmediateAuxCols, + MemoryWriteAuxCols, AUX_LEN, }, }; @@ -450,14 +446,6 @@ impl MemoryController { self.memory.timestamp() } - fn access_adapter_air(&self) -> AccessAdapterAir { - let lt_air = IsLtSubAir::new(self.range_checker.bus(), self.mem_config.clk_max_bits); - AccessAdapterAir:: { - memory_bus: self.memory_bus, - lt_air, - } - } - /// Returns the final memory state if persistent. pub fn finalize( &mut self, @@ -681,19 +669,9 @@ impl MemoryController { widths.push(BaseAir::::width(&merkle_chip.air)); } }; - self.add_access_adapter_width::<2>(&mut widths); - self.add_access_adapter_width::<4>(&mut widths); - self.add_access_adapter_width::<8>(&mut widths); - self.add_access_adapter_width::<16>(&mut widths); - self.add_access_adapter_width::<32>(&mut widths); - self.add_access_adapter_width::<64>(&mut widths); + widths.extend(self.access_adapters.get_widths()); widths } - fn add_access_adapter_width(&self, widths: &mut Vec) { - if self.mem_config.max_access_adapter_n >= N { - widths.push(BaseAir::::width(&self.access_adapter_air::())); - } - } pub fn current_trace_cells(&self) -> Vec { zip_eq(self.current_trace_heights(), self.trace_widths()) diff --git a/extensions/native/recursion/trusted_setup_s3.sh b/extensions/native/recursion/trusted_setup_s3.sh index c2291b6a7b..a249217b0b 100644 --- a/extensions/native/recursion/trusted_setup_s3.sh +++ b/extensions/native/recursion/trusted_setup_s3.sh @@ -7,7 +7,6 @@ else fi echo "maxk=$maxk" -bash scripts/install_s5cmd.sh mkdir -p params/ cd params for k in $(seq 10 $maxk) @@ -20,4 +19,4 @@ do s5cmd --no-sign-request cp --concurrency 10 "s3://axiom-crypto/challenge_0085/${pkey_file}" . fi done -cd .. \ No newline at end of file +cd ..