Skip to content

Commit d5639db

Browse files
REPL more info on iterations
1 parent a772954 commit d5639db

3 files changed

Lines changed: 27 additions & 9 deletions

File tree

src/lair/execute.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,23 @@ impl<F: PrimeField32> QueryRecord<F> {
316316
pub fn expect_public_values(&self) -> &[F] {
317317
self.public_values.as_ref().expect("Public values not set")
318318
}
319+
320+
pub fn stats<H: Chipset<F>>(&self, toplevel: &Toplevel<F, H>) -> (usize, usize) {
321+
let mut steps = 0;
322+
let mut width = 0;
323+
for (i, queries) in self.func_queries.iter().enumerate() {
324+
steps += queries.len();
325+
let func = toplevel.get_by_index(i);
326+
let func_width = func.compute_layout_sizes(toplevel).total();
327+
width += queries.len() * func_width;
328+
}
329+
for (i, queries) in self.mem_queries.iter().enumerate() {
330+
steps += queries.len();
331+
let mem_width = 4 + mem_index_to_len(i);
332+
width += queries.len() * mem_width;
333+
}
334+
(steps, width)
335+
}
319336
}
320337

321338
impl<F: PrimeField32, H: Chipset<F>> Toplevel<F, H> {

src/lair/func_chip.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub type LayoutSizes = ColumnLayout<usize, usize>;
1818

1919
impl LayoutSizes {
2020
#[inline]
21-
fn total(&self) -> usize {
21+
pub fn total(&self) -> usize {
2222
self.nonce + self.input + self.aux + self.sel
2323
}
2424
}

src/lurk/cli/repl.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ pub(crate) struct Repl<F: PrimeField32, H: Chipset<F>> {
4242
pub(crate) queries: QueryRecord<F>,
4343
pub(crate) toplevel: Toplevel<F, H>,
4444
pub(crate) lurk_main_idx: usize,
45-
eval_idx: usize,
4645
pub(crate) env: ZPtr<F>,
4746
state: StateRcCell,
4847
pwd_path: Utf8PathBuf,
@@ -54,14 +53,12 @@ impl Repl<BabyBear, LurkChip> {
5453
let (toplevel, mut zstore) = build_lurk_toplevel();
5554
let queries = QueryRecord::new(&toplevel);
5655
let lurk_main_idx = toplevel.get_by_name("lurk_main").index;
57-
let eval_idx = toplevel.get_by_name("eval").index;
5856
let env = zstore.intern_empty_env();
5957
Self {
6058
zstore,
6159
queries,
6260
toplevel,
6361
lurk_main_idx,
64-
eval_idx,
6562
env,
6663
state: State::init_lurk_state().rccell(),
6764
pwd_path: current_dir().expect("Couldn't get current directory"),
@@ -70,11 +67,15 @@ impl Repl<BabyBear, LurkChip> {
7067
}
7168
}
7269

73-
fn pretty_iterations_display(iterations: usize) -> String {
70+
fn pretty_iterations_display(iterations: usize, width: usize) -> String {
7471
if iterations != 1 {
75-
format!("{iterations} iterations")
72+
let average_width = width as f64 / iterations as f64;
73+
format!(
74+
"{iterations} iterations, average step size {:.2}",
75+
average_width
76+
)
7677
} else {
77-
"1 iteration".into()
78+
format!("1 iteration, width {width}")
7879
}
7980
}
8081

@@ -163,10 +164,10 @@ impl<F: PrimeField32, H: Chipset<F>> Repl<F, H> {
163164
self.queries.get_inv_queries("hash_32_8", &self.toplevel),
164165
self.queries.get_inv_queries("hash_48_8", &self.toplevel),
165166
);
166-
let iterations = self.queries.func_queries[self.eval_idx].len();
167+
let (iterations, width) = self.queries.stats(&self.toplevel);
167168
println!(
168169
"[{}] => {}",
169-
pretty_iterations_display(iterations),
170+
pretty_iterations_display(iterations, width),
170171
self.fmt(&output)
171172
);
172173
}

0 commit comments

Comments
 (0)