Skip to content

Commit 490a0b4

Browse files
committed
Compute low and high values buffer in loop
1 parent c7146c1 commit 490a0b4

File tree

1 file changed

+15
-28
lines changed

1 file changed

+15
-28
lines changed

src/basefold_verifier/query_phase.rs

Lines changed: 15 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -311,8 +311,6 @@ pub struct PackedCodeword<C: Config> {
311311
#[derive(DslVariable, Clone)]
312312
pub struct RoundContextVariable<C: Config> {
313313
pub(crate) opened_values_buffer: Array<C, Array<C, Felt<C::F>>>,
314-
pub(crate) low_values_buffer: Array<C, Array<C, Felt<C::F>>>,
315-
pub(crate) high_values_buffer: Array<C, Array<C, Felt<C::F>>>,
316314
pub(crate) log2_heights: Array<C, Var<C::N>>,
317315
pub(crate) minus_alpha_offsets: Array<C, Ext<C::F, C::EF>>,
318316
pub(crate) all_zero_slices: Array<C, Array<C, Ext<C::F, C::EF>>>,
@@ -400,10 +398,6 @@ pub(crate) fn batch_verifier_query_phase<C: Config>(
400398
let round = builder.iter_ptr_get(&input.rounds, ptr_vec[0]);
401399
let opened_values_buffer: Array<C, Array<C, Felt<C::F>>> =
402400
builder.dyn_array(round.openings.len());
403-
let low_values_buffer: Array<C, Array<C, Felt<C::F>>> =
404-
builder.dyn_array(round.openings.len());
405-
let high_values_buffer: Array<C, Array<C, Felt<C::F>>> =
406-
builder.dyn_array(round.openings.len());
407401
let log2_heights = builder.dyn_array(round.openings.len());
408402
let minus_alpha_offsets = builder.dyn_array(round.openings.len());
409403
let all_zero_slices = builder.dyn_array(round.openings.len());
@@ -414,8 +408,6 @@ pub(crate) fn batch_verifier_query_phase<C: Config>(
414408
opened_values_buffer,
415409
log2_heights,
416410
round.openings,
417-
low_values_buffer,
418-
high_values_buffer,
419411
minus_alpha_offsets,
420412
all_zero_slices,
421413
dimensions,
@@ -434,11 +426,6 @@ pub(crate) fn batch_verifier_query_phase<C: Config>(
434426
ptr_vec[0],
435427
opened_value_buffer.clone(),
436428
);
437-
let low_values = opened_value_buffer.slice(builder, 0, width.clone());
438-
let high_values =
439-
opened_value_buffer.slice(builder, width.clone(), opened_value_buffer.len());
440-
builder.iter_ptr_set(&low_values_buffer, ptr_vec[3], low_values.clone());
441-
builder.iter_ptr_set(&high_values_buffer, ptr_vec[4], high_values.clone());
442429

443430
let alpha_offset = builder.get(&input.batch_coeffs, batch_coeffs_offset.clone());
444431
// Will need to negate the values of low and high
@@ -447,11 +434,11 @@ pub(crate) fn batch_verifier_query_phase<C: Config>(
447434
// We want \sum_i alpha^(i + offset) opened_value[i]
448435
// Let's negate it here.
449436
builder.assign(&alpha_offset, -alpha_offset);
450-
builder.iter_ptr_set(&minus_alpha_offsets, ptr_vec[5], alpha_offset);
437+
builder.iter_ptr_set(&minus_alpha_offsets, ptr_vec[3], alpha_offset);
451438
builder.assign(&batch_coeffs_offset, batch_coeffs_offset + width.clone());
452439

453440
let all_zero_slice = all_zeros.slice(builder, 0, width);
454-
builder.iter_ptr_set(&all_zero_slices, ptr_vec[6], all_zero_slice);
441+
builder.iter_ptr_set(&all_zero_slices, ptr_vec[4], all_zero_slice);
455442
});
456443

457444
// TODO: ensure that perm is indeed a permutation of 0, ..., opened_values.len()-1
@@ -471,8 +458,6 @@ pub(crate) fn batch_verifier_query_phase<C: Config>(
471458

472459
let round_context = RoundContextVariable {
473460
opened_values_buffer,
474-
low_values_buffer,
475-
high_values_buffer,
476461
log2_heights,
477462
minus_alpha_offsets,
478463
all_zero_slices,
@@ -526,27 +511,29 @@ pub(crate) fn batch_verifier_query_phase<C: Config>(
526511
// TODO: optimize this procedure
527512
iter_zip!(
528513
builder,
529-
round_context.low_values_buffer,
530-
round_context.high_values_buffer,
531514
round_context.log2_heights,
532515
round_context.minus_alpha_offsets,
533516
round_context.all_zero_slices,
534517
round_context.opened_values_buffer,
535518
round.perm,
519+
round.openings,
536520
)
537521
.for_each(|ptr_vec, builder| {
538-
let low_values =
539-
builder.iter_ptr_get(&round_context.low_values_buffer, ptr_vec[0]);
540-
let high_values =
541-
builder.iter_ptr_get(&round_context.high_values_buffer, ptr_vec[1]);
522+
let opened_values_buffer =
523+
builder.iter_ptr_get(&round_context.opened_values_buffer, ptr_vec[3]);
542524
let log2_height: Var<C::N> =
543-
builder.iter_ptr_get(&round_context.log2_heights, ptr_vec[2]);
525+
builder.iter_ptr_get(&round_context.log2_heights, ptr_vec[0]);
544526
// The linear combination is by (alpha^offset, ..., alpha^(offset+width-1)), which is equal to
545527
// alpha^offset * (1, ..., alpha^(width-1))
546528
let minus_alpha_offset =
547-
builder.iter_ptr_get(&round_context.minus_alpha_offsets, ptr_vec[3]);
529+
builder.iter_ptr_get(&round_context.minus_alpha_offsets, ptr_vec[1]);
548530
let all_zeros_slice =
549-
builder.iter_ptr_get(&round_context.all_zero_slices, ptr_vec[4]);
531+
builder.iter_ptr_get(&round_context.all_zero_slices, ptr_vec[2]);
532+
let opening = builder.iter_ptr_get(&round.openings, ptr_vec[5]);
533+
let width = opening.point_and_evals.evals.len();
534+
let low_values = opened_values_buffer.slice(builder, 0, width.clone());
535+
let high_values =
536+
opened_values_buffer.slice(builder, width, opened_values_buffer.len());
550537

551538
let low = builder.fri_single_reduced_opening_eval(
552539
alpha,
@@ -576,8 +563,8 @@ pub(crate) fn batch_verifier_query_phase<C: Config>(
576563

577564
// reorder opened values according to the permutation
578565
let mat_j =
579-
builder.iter_ptr_get(&round_context.opened_values_buffer, ptr_vec[5]);
580-
let permuted_j = builder.iter_ptr_get(&round.perm, ptr_vec[6]);
566+
builder.iter_ptr_get(&round_context.opened_values_buffer, ptr_vec[3]);
567+
let permuted_j = builder.iter_ptr_get(&round.perm, ptr_vec[4]);
581568
// let permuted_j = j;
582569
builder.set_value(&perm_opened_values, permuted_j, mat_j);
583570
});

0 commit comments

Comments
 (0)