@@ -8,13 +8,12 @@ use eyre::Result;
88use itertools:: Itertools ;
99use openvm_build:: { build_guest_package, find_unique_executable, get_package, TargetFilter } ;
1010use openvm_circuit:: arch:: execution_mode:: metered:: segment_ctx:: SegmentationLimits ;
11- use openvm_circuit:: arch:: execution_mode:: Segment ;
1211use openvm_circuit:: arch:: instructions:: exe:: VmExe ;
1312use openvm_circuit:: arch:: {
1413 debug_proving_ctx, AirInventory , AirInventoryError , ChipInventory , ChipInventoryError ,
1514 ExecutorInventory , ExecutorInventoryError , InitFileGenerator , MatrixRecordArena ,
16- PreflightExecutionOutput , RowMajorMatrixArena , SystemConfig , VmBuilder , VmChipComplex ,
17- VmCircuitConfig , VmCircuitExtension , VmExecutionConfig , VmInstance , VmProverExtension ,
15+ RowMajorMatrixArena , SystemConfig , VmBuilder , VmChipComplex , VmCircuitConfig ,
16+ VmCircuitExtension , VmExecutionConfig , VmProverExtension ,
1817} ;
1918use openvm_circuit:: system:: SystemChipInventory ;
2019use openvm_circuit:: { circuit_derive:: Chip , derive:: AnyEnum } ;
@@ -23,7 +22,6 @@ use openvm_sdk::config::SdkVmCpuBuilder;
2322
2423use openvm_instructions:: program:: { Program , DEFAULT_PC_STEP } ;
2524use openvm_sdk:: config:: TranspilerConfig ;
26- use openvm_sdk:: prover:: vm:: new_local_prover;
2725use openvm_sdk:: prover:: { verify_app_proof, AggStarkProver } ;
2826use openvm_sdk:: GenericSdk ;
2927use openvm_sdk:: {
@@ -63,7 +61,8 @@ use std::{
6361use crate :: customize_exe:: OpenVmApcCandidate ;
6462pub use crate :: customize_exe:: Prog ;
6563use crate :: powdr_extension:: chip:: PowdrAir ;
66- use tracing:: { info_span, Level } ;
64+ use crate :: trace_generation:: do_with_trace;
65+ use tracing:: Level ;
6766
6867#[ cfg( test) ]
6968use crate :: extraction_utils:: AirWidthsDiff ;
@@ -77,6 +76,7 @@ pub mod cuda_abi;
7776pub mod extraction_utils;
7877pub mod opcode;
7978pub mod symbolic_instruction_builder;
79+ pub mod trace_generation;
8080mod utils;
8181pub use opcode:: instruction_allowlist;
8282pub use powdr_autoprecompiles:: DegreeBound ;
@@ -874,56 +874,9 @@ pub fn prove(
874874 #[ cfg( not( feature = "cuda" ) ) ]
875875 let sdk = PowdrSdkCpu :: new ( app_config) . unwrap ( ) ;
876876 if mock {
877- // Build owned vm instance, so we can mutate it later
878- let vm_builder = sdk. app_vm_builder ( ) . clone ( ) ;
879- let vm_pk = sdk. app_pk ( ) . app_vm_pk . clone ( ) ;
880- let exe = sdk. convert_to_exe ( exe. clone ( ) ) ?;
881- let mut vm_instance: VmInstance < _ , _ > = new_local_prover ( vm_builder, & vm_pk, exe. clone ( ) ) ?;
882-
883- vm_instance. reset_state ( inputs. clone ( ) ) ;
884- let metered_ctx = vm_instance. vm . build_metered_ctx ( & exe) ;
885- let metered_interpreter = vm_instance. vm . metered_interpreter ( vm_instance. exe ( ) ) ?;
886- let ( segments, _) = metered_interpreter. execute_metered ( inputs. clone ( ) , metered_ctx) ?;
887- let mut state = vm_instance. state_mut ( ) . take ( ) ;
888-
889- // Get reusable inputs for `debug_proving_ctx`, the mock prover API from OVM.
890- let vm = & mut vm_instance. vm ;
891- let air_inv = vm. config ( ) . create_airs ( ) . unwrap ( ) ;
892- #[ cfg( feature = "cuda" ) ]
893- let pk = air_inv. keygen :: < GpuBabyBearPoseidon2Engine > ( & vm. engine ) ;
894- #[ cfg( not( feature = "cuda" ) ) ]
895- let pk = air_inv. keygen :: < BabyBearPoseidon2Engine > ( & vm. engine ) ;
896-
897- for ( seg_idx, segment) in segments. into_iter ( ) . enumerate ( ) {
898- let _segment_span = info_span ! ( "prove_segment" , segment = seg_idx) . entered ( ) ;
899- // We need a separate span so the metric label includes "segment" from _segment_span
900- let _prove_span = info_span ! ( "total_proof" ) . entered ( ) ;
901- let Segment {
902- instret_start,
903- num_insns,
904- trace_heights,
905- } = segment;
906- assert_eq ! ( state. as_ref( ) . unwrap( ) . instret( ) , instret_start) ;
907- let from_state = Option :: take ( & mut state) . unwrap ( ) ;
908- vm. transport_init_memory_to_device ( & from_state. memory ) ;
909- let PreflightExecutionOutput {
910- system_records,
911- record_arenas,
912- to_state,
913- } = vm. execute_preflight (
914- & mut vm_instance. interpreter ,
915- from_state,
916- Some ( num_insns) ,
917- & trace_heights,
918- ) ?;
919- state = Some ( to_state) ;
920-
921- // Generate proving context for each segment
922- let ctx = vm. generate_proving_ctx ( system_records, record_arenas) ?;
923-
924- // Run the mock prover for each segment
925- debug_proving_ctx ( vm, & pk, & ctx) ;
926- }
877+ do_with_trace ( program, inputs, |vm, pk, ctx| {
878+ debug_proving_ctx ( vm, pk, & ctx) ;
879+ } ) ;
927880 } else {
928881 let mut app_prover = sdk. app_prover ( exe. clone ( ) ) ?;
929882
0 commit comments