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: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ Both branches support Stwo prover opcodes (Blake2s, QM31) since v2.0.0.
#### Upcoming Changes

* Add Stwo cairo runner API [#2351](https://github.com/starkware-libs/cairo-vm/pull/2351)
* feat: create and use CairoRunConfig as ctor arg for CairoRunner ctors [#2367](https://github.com/starkware-libs/cairo-vm/pull/2367)

* feat: move runner_mode to be a field in StwoCairoRunConfig [#2366](https://github.com/starkware-libs/cairo-vm/pull/2366)

* refactor: rename CairoRunConfig to Cairo0RunConfig [#2365](https://github.com/starkware-libs/cairo-vm/pull/2365)
Expand Down
31 changes: 22 additions & 9 deletions bench/criterion_benchmark.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use cairo_vm::{
types::{layout::CairoLayout, layout_name::LayoutName, program::Program},
cairo_run::Cairo0RunConfig,
types::{layout_name::LayoutName, program::Program},
vm::runners::cairo_runner::CairoRunner,
};
use criterion::{black_box, criterion_group, criterion_main, BatchSize, Criterion};
Expand Down Expand Up @@ -29,10 +30,17 @@ fn build_many_runners(c: &mut Criterion) {
_ = black_box(
CairoRunner::new(
black_box(&program),
black_box(CairoLayout::new(LayoutName::starknet_with_keccak, None).unwrap()),
black_box(false),
black_box(false),
black_box(false),
black_box(
&Cairo0RunConfig {
layout: LayoutName::starknet_with_keccak,
proof_mode: false,
trace_enabled: false,
disable_trace_padding: false,
..Default::default()
}
.run_config()
.unwrap(),
),
)
.unwrap(),
);
Expand All @@ -49,10 +57,15 @@ fn load_program_data(c: &mut Criterion) {
|| {
CairoRunner::new(
&program,
CairoLayout::new(LayoutName::starknet_with_keccak, None).unwrap(),
false,
false,
false,
&Cairo0RunConfig {
layout: LayoutName::starknet_with_keccak,
proof_mode: false,
trace_enabled: false,
disable_trace_padding: false,
..Default::default()
}
.run_config()
.unwrap(),
)
.unwrap()
},
Expand Down
28 changes: 19 additions & 9 deletions bench/iai_benchmark.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use cairo_vm::types::layout::CairoLayout;
use cairo_vm::cairo_run::Cairo0RunConfig;
use core::hint::black_box;
use iai_callgrind::library_benchmark;
use iai_callgrind::library_benchmark_group;
Expand Down Expand Up @@ -37,10 +37,15 @@ fn build_runner() {
let program = parse_program_helper();
let runner = CairoRunner::new(
black_box(&program),
CairoLayout::new(LayoutName::starknet_with_keccak, None).unwrap(),
false,
false,
false,
&Cairo0RunConfig {
layout: LayoutName::starknet_with_keccak,
proof_mode: false,
trace_enabled: false,
disable_trace_padding: false,
..Default::default()
}
.run_config()
.unwrap(),
)
.unwrap();
core::mem::drop(black_box(runner));
Expand All @@ -54,10 +59,15 @@ fn build_runner_helper() -> CairoRunner {
let program = Program::from_bytes(program.as_slice(), Some("main")).unwrap();
CairoRunner::new(
&program,
CairoLayout::new(LayoutName::starknet_with_keccak, None).unwrap(),
false,
false,
false,
&Cairo0RunConfig {
layout: LayoutName::starknet_with_keccak,
proof_mode: false,
trace_enabled: false,
disable_trace_padding: false,
..Default::default()
}
.run_config()
.unwrap(),
)
.unwrap()
}
Expand Down
18 changes: 11 additions & 7 deletions cairo-vm-cli/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -269,9 +269,8 @@ mod tests {
use super::*;
use assert_matches::assert_matches;
use cairo_vm::{
hint_processor::hint_processor_definition::HintProcessor,
types::{layout::CairoLayout, program::Program},
vm::runners::cairo_runner::CairoRunner,
cairo_run::Cairo0RunConfig, hint_processor::hint_processor_definition::HintProcessor,
types::program::Program, vm::runners::cairo_runner::CairoRunner,
};
use rstest::rstest;

Expand All @@ -283,10 +282,15 @@ mod tests {
let program = Program::from_bytes(program_content, Some("main")).unwrap();
let mut cairo_runner = CairoRunner::new(
&program,
CairoLayout::new(LayoutName::all_cairo, None).unwrap(),
false,
true,
false,
&Cairo0RunConfig {
layout: LayoutName::all_cairo,
proof_mode: false,
trace_enabled: true,
disable_trace_padding: false,
..Default::default()
}
.run_config()
.unwrap(),
)
.unwrap();
let end = cairo_runner
Expand Down
33 changes: 16 additions & 17 deletions cairo1-run/src/cairo_run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ use cairo_lang_sierra_type_size::get_type_size_map;
use cairo_lang_utils::{
bigint::BigIntAsHex, casts::IntoOrPanic, unordered_hash_map::UnorderedHashMap,
};
use cairo_vm::vm::runners::cairo_runner::CairoRunConfig;
use std::{collections::HashMap, iter::Peekable};

use cairo_vm::{
Expand Down Expand Up @@ -137,6 +138,20 @@ impl Cairo1RunConfig<'_> {
fn copy_to_output(&self) -> bool {
self.append_return_values || self.proof_mode
}

pub fn run_config(&self) -> Result<CairoRunConfig, RunnerError> {
let runner_mode = if self.proof_mode {
RunnerMode::ProofModeCairo1
} else {
RunnerMode::ExecutionMode
};
CairoRunConfig::new(
CairoLayout::new(self.layout, self.dynamic_layout_params.clone())?,
self.trace_enabled,
self.disable_trace_padding,
runner_mode,
)
}
}

/// Runs a Cairo 1 program
Expand Down Expand Up @@ -262,23 +277,7 @@ pub fn cairo_run_program(
)?
};

let runner_mode = if cairo_run_config.proof_mode {
RunnerMode::ProofModeCairo1
} else {
RunnerMode::ExecutionMode
};

let mut runner = CairoRunner::new_v2(
&program,
CairoLayout::new(
cairo_run_config.layout,
cairo_run_config.dynamic_layout_params.clone(),
)
.map_err(RunnerError::from)?,
runner_mode,
cairo_run_config.trace_enabled,
cairo_run_config.disable_trace_padding,
);
let mut runner = CairoRunner::new_v2(&program, &cairo_run_config.run_config()?);
let end = runner.initialize(cairo_run_config.proof_mode)?;
load_arguments(&mut runner, &cairo_run_config, main_func)?;

Expand Down
81 changes: 38 additions & 43 deletions vm/src/cairo_run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use crate::{
},
runners::{
cairo_pie::CairoPie,
cairo_runner::{CairoRunner, RunnerMode},
cairo_runner::{CairoRunConfig, CairoRunner, RunnerMode},
},
security::verify_secure_runner,
trace::trace_entry::RelocatedTraceEntry,
Expand Down Expand Up @@ -72,6 +72,23 @@ impl Default for Cairo0RunConfig<'_> {
}
}

impl Cairo0RunConfig<'_> {
pub fn run_config(&self) -> Result<CairoRunConfig, RunnerError> {
let runner_mode = if self.proof_mode {
RunnerMode::ProofModeCanonical
} else {
RunnerMode::ExecutionMode
};
CairoRunConfig::new(
CairoLayout::new(self.layout, self.dynamic_layout_params.clone())?,
self.trace_enabled,
self.disable_trace_padding,
runner_mode,
)
}
}

#[derive(Clone)]
pub struct StwoCairoRunConfig {
pub trace_enabled: bool,
pub relocate_mem: bool,
Expand All @@ -96,6 +113,17 @@ impl Default for StwoCairoRunConfig {
}
}

impl StwoCairoRunConfig {
pub fn run_config(&self) -> Result<CairoRunConfig, RunnerError> {
CairoRunConfig::new(
CairoLayout::all_cairo_stwo_instance(),
self.trace_enabled,
self.disable_trace_padding,
self.runner_mode.clone(),
)
}
}

#[allow(clippy::result_large_err)]
pub fn cairo_run_stwo(
program: &Program,
Expand All @@ -107,12 +135,7 @@ pub fn cairo_run_stwo(
let _span = span!(Level::INFO, "cairo run stwo").entered();

let proof_mode = cairo_run_config.runner_mode != RunnerMode::ExecutionMode;
let mut cairo_runner = CairoRunner::new_stwo(
program,
cairo_run_config.runner_mode.clone(),
cairo_run_config.trace_enabled,
cairo_run_config.disable_trace_padding,
)?;
let mut cairo_runner = CairoRunner::new_stwo(program, &cairo_run_config.run_config()?)?;
cairo_runner.exec_scopes = exec_scopes;

let end = cairo_runner.initialize_stwo(allowed_builtins)?;
Expand Down Expand Up @@ -166,17 +189,7 @@ pub fn cairo_run_program_with_initial_scope(
.allow_missing_builtins
.unwrap_or(cairo_run_config.proof_mode);

let mut cairo_runner = CairoRunner::new(
program,
CairoLayout::new(
cairo_run_config.layout,
cairo_run_config.dynamic_layout_params.clone(),
)
.map_err(RunnerError::from)?,
cairo_run_config.proof_mode,
cairo_run_config.trace_enabled,
cairo_run_config.disable_trace_padding,
)?;
let mut cairo_runner = CairoRunner::new(program, &cairo_run_config.run_config()?)?;

cairo_runner.exec_scopes = exec_scopes;

Expand Down Expand Up @@ -276,17 +289,7 @@ pub fn cairo_run_pie(
let allow_missing_builtins = cairo_run_config.allow_missing_builtins.unwrap_or_default();

let program = Program::from_stripped_program(&pie.metadata.program);
let mut cairo_runner = CairoRunner::new(
&program,
CairoLayout::new(
cairo_run_config.layout,
cairo_run_config.dynamic_layout_params.clone(),
)
.map_err(RunnerError::from)?,
false,
cairo_run_config.trace_enabled,
cairo_run_config.disable_trace_padding,
)?;
let mut cairo_runner = CairoRunner::new(&program, &cairo_run_config.run_config()?)?;

let end = cairo_runner.initialize(allow_missing_builtins)?;
cairo_runner.vm.finalize_segments_by_cairo_pie(pie);
Expand Down Expand Up @@ -363,9 +366,11 @@ pub fn cairo_run_pie_stwo(
let program = Program::from_stripped_program(&pie.metadata.program);
let mut cairo_runner = CairoRunner::new_stwo(
&program,
RunnerMode::ExecutionMode,
cairo_run_config.trace_enabled,
cairo_run_config.disable_trace_padding,
&StwoCairoRunConfig {
runner_mode: RunnerMode::ExecutionMode,
..cairo_run_config.clone()
}
.run_config()?,
)?;

let end = cairo_runner.initialize_stwo(allowed_builtins)?;
Expand Down Expand Up @@ -437,17 +442,7 @@ pub fn cairo_run_fuzzed_program(
.allow_missing_builtins
.unwrap_or(cairo_run_config.proof_mode);

let mut cairo_runner = CairoRunner::new(
&program,
CairoLayout::new(
cairo_run_config.layout,
cairo_run_config.dynamic_layout_params.clone(),
)
.map_err(RunnerError::from)?,
cairo_run_config.proof_mode,
cairo_run_config.trace_enabled,
cairo_run_config.disable_trace_padding,
)?;
let mut cairo_runner = CairoRunner::new(&program, &cairo_run_config.run_config()?)?;

let _end = cairo_runner.initialize(allow_missing_builtins)?;

Expand Down
15 changes: 2 additions & 13 deletions vm/src/tests/cairo_run_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ use crate::{tests::*, types::layout_name::LayoutName};

#[cfg(feature = "mod_builtin")]
use crate::{
types::layout::CairoLayout,
utils::test_utils::Program,
vm::{
runners::{builtin_runner::BuiltinRunner, cairo_runner::CairoRunner},
Expand Down Expand Up @@ -1070,18 +1069,8 @@ fn run_program_with_custom_mod_builtin_params(
};
let mut hint_processor = BuiltinHintProcessor::new_empty();
let program = Program::from_bytes(data, Some(cairo_run_config.entrypoint)).unwrap();
let mut cairo_runner = CairoRunner::new(
&program,
CairoLayout::new(
cairo_run_config.layout,
cairo_run_config.dynamic_layout_params,
)
.unwrap(),
cairo_run_config.proof_mode,
cairo_run_config.trace_enabled,
cairo_run_config.disable_trace_padding,
)
.unwrap();
let mut cairo_runner =
CairoRunner::new(&program, &cairo_run_config.run_config().unwrap()).unwrap();

let end = cairo_runner.initialize(false).unwrap();
// Modify add_mod & mul_mod params
Expand Down
Loading
Loading