Skip to content

Commit 89964cc

Browse files
committed
rollback suggestions
1 parent b39da0f commit 89964cc

File tree

10 files changed

+43
-53
lines changed

10 files changed

+43
-53
lines changed

barretenberg/cpp/src/barretenberg/eccvm/eccvm_flavor.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include "barretenberg/flavor/flavor_macros.hpp"
99
#include "barretenberg/flavor/relation_definitions.hpp"
1010
#include "barretenberg/flavor/repeated_commitments_data.hpp"
11-
#include "barretenberg/numeric/bitop/division.hpp"
1211
#include "barretenberg/polynomials/polynomial.hpp"
1312
#include "barretenberg/polynomials/univariate.hpp"
1413
#include "barretenberg/relations/ecc_vm/ecc_bools_relation.hpp"
@@ -715,7 +714,8 @@ class ECCVMFlavor {
715714
PartiallyEvaluatedMultivariates(const ProverPolynomials& full_polynomials, size_t circuit_size)
716715
{
717716
for (auto [poly, full_poly] : zip_view(get_all(), full_polynomials.get_all())) {
718-
poly = Polynomial(numeric::div_ceil<size_t>(full_poly.end_index(), 2), circuit_size / 2);
717+
size_t desired_size = std::min(full_poly.end_index(), circuit_size / 2);
718+
poly = Polynomial(desired_size, circuit_size / 2);
719719
}
720720
}
721721
};

barretenberg/cpp/src/barretenberg/numeric/bitop/division.hpp

-10
This file was deleted.

barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/mega_flavor.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
#include "barretenberg/flavor/flavor_macros.hpp"
66
#include "barretenberg/flavor/relation_definitions.hpp"
77
#include "barretenberg/flavor/repeated_commitments_data.hpp"
8-
#include "barretenberg/numeric/bitop/division.hpp"
98
#include "barretenberg/polynomials/univariate.hpp"
109
#include "barretenberg/relations/auxiliary_relation.hpp"
1110
#include "barretenberg/relations/databus_lookup_relation.hpp"
@@ -635,7 +634,8 @@ class MegaFlavor {
635634
PartiallyEvaluatedMultivariates(const ProverPolynomials& full_polynomials, size_t circuit_size)
636635
{
637636
for (auto [poly, full_poly] : zip_view(get_all(), full_polynomials.get_all())) {
638-
poly = Polynomial(numeric::div_ceil<size_t>(full_poly.end_index(), 2), circuit_size / 2);
637+
size_t desired_size = std::min(full_poly.end_index(), circuit_size / 2);
638+
poly = Polynomial(desired_size, circuit_size / 2);
639639
}
640640
}
641641
};

barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_flavor.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
#include "barretenberg/flavor/flavor.hpp"
55
#include "barretenberg/flavor/flavor_macros.hpp"
66
#include "barretenberg/flavor/repeated_commitments_data.hpp"
7-
#include "barretenberg/numeric/bitop/division.hpp"
87
#include "barretenberg/plonk_honk_shared/library/grand_product_delta.hpp"
98
#include "barretenberg/plonk_honk_shared/library/grand_product_library.hpp"
109
#include "barretenberg/polynomials/barycentric.hpp"
@@ -509,7 +508,8 @@ class UltraFlavor {
509508
{
510509
PROFILE_THIS_NAME("PartiallyEvaluatedMultivariates constructor");
511510
for (auto [poly, full_poly] : zip_view(get_all(), full_polynomials.get_all())) {
512-
poly = Polynomial(numeric::div_ceil<size_t>(full_poly.end_index(), 2), circuit_size / 2);
511+
size_t desired_size = std::min(full_poly.end_index(), circuit_size / 2);
512+
poly = Polynomial(desired_size, circuit_size / 2);
513513
}
514514
}
515515
};

barretenberg/cpp/src/barretenberg/sumcheck/partial_evaluation.test.cpp

+13-13
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ TYPED_TEST(PartialEvaluationTests, TwoRoundsSpecial)
6969
FF expected_hi = v01 * (FF(1) - round_challenge_0) + v11 * round_challenge_0;
7070

7171
sumcheck.partially_evaluated_polynomials = typename Flavor::PartiallyEvaluatedMultivariates(multivariate_n);
72-
sumcheck.partially_evaluate(full_polynomials, 0, round_challenge_0);
72+
sumcheck.partially_evaluate(full_polynomials, multivariate_n, round_challenge_0);
7373

7474
auto& first_polynomial = sumcheck.partially_evaluated_polynomials.get_all()[0];
7575
EXPECT_EQ(first_polynomial[0], round_challenge_0);
@@ -78,7 +78,7 @@ TYPED_TEST(PartialEvaluationTests, TwoRoundsSpecial)
7878
FF round_challenge_1 = 2;
7979
FF expected_val = expected_lo * (FF(1) - round_challenge_1) + expected_hi * round_challenge_1;
8080

81-
sumcheck.partially_evaluate(sumcheck.partially_evaluated_polynomials, 1, round_challenge_1);
81+
sumcheck.partially_evaluate(sumcheck.partially_evaluated_polynomials, multivariate_n >> 1, round_challenge_1);
8282
EXPECT_EQ(first_polynomial[0], expected_val);
8383
}
8484

@@ -109,15 +109,15 @@ TYPED_TEST(PartialEvaluationTests, TwoRoundsGeneric)
109109
FF expected_hi = v01 * (FF(1) - round_challenge_0) + v11 * round_challenge_0;
110110

111111
sumcheck.partially_evaluated_polynomials = typename Flavor::PartiallyEvaluatedMultivariates(multivariate_n);
112-
sumcheck.partially_evaluate(full_polynomials, 0, round_challenge_0);
112+
sumcheck.partially_evaluate(full_polynomials, multivariate_n, round_challenge_0);
113113
auto& first_polynomial = sumcheck.partially_evaluated_polynomials.get_all()[0];
114114

115115
EXPECT_EQ(first_polynomial[0], expected_lo);
116116
EXPECT_EQ(first_polynomial[1], expected_hi);
117117

118118
FF round_challenge_1 = FF::random_element();
119119
FF expected_val = expected_lo * (FF(1) - round_challenge_1) + expected_hi * round_challenge_1;
120-
sumcheck.partially_evaluate(sumcheck.partially_evaluated_polynomials, 1, round_challenge_1);
120+
sumcheck.partially_evaluate(sumcheck.partially_evaluated_polynomials, multivariate_n >> 1, round_challenge_1);
121121
EXPECT_EQ(first_polynomial[0], expected_val);
122122
}
123123

@@ -176,7 +176,7 @@ TYPED_TEST(PartialEvaluationTests, ThreeRoundsSpecial)
176176
FF expected_q4 = v011 * (FF(1) - round_challenge_0) + v111 * round_challenge_0; // 8
177177

178178
sumcheck.partially_evaluated_polynomials = typename Flavor::PartiallyEvaluatedMultivariates(multivariate_n);
179-
sumcheck.partially_evaluate(full_polynomials, 0, round_challenge_0);
179+
sumcheck.partially_evaluate(full_polynomials, multivariate_n, round_challenge_0);
180180

181181
auto& first_polynomial = sumcheck.partially_evaluated_polynomials.get_all()[0];
182182
EXPECT_EQ(first_polynomial[0], expected_q1);
@@ -188,13 +188,13 @@ TYPED_TEST(PartialEvaluationTests, ThreeRoundsSpecial)
188188
FF expected_lo = expected_q1 * (FF(1) - round_challenge_1) + expected_q2 * round_challenge_1; // 6
189189
FF expected_hi = expected_q3 * (FF(1) - round_challenge_1) + expected_q4 * round_challenge_1; // 10
190190

191-
sumcheck.partially_evaluate(sumcheck.partially_evaluated_polynomials, 0, round_challenge_1);
191+
sumcheck.partially_evaluate(sumcheck.partially_evaluated_polynomials, multivariate_n >> 1, round_challenge_1);
192192
EXPECT_EQ(first_polynomial[0], expected_lo);
193193
EXPECT_EQ(first_polynomial[1], expected_hi);
194194

195195
FF round_challenge_2 = 3;
196196
FF expected_val = expected_lo * (FF(1) - round_challenge_2) + expected_hi * round_challenge_2; // 18
197-
sumcheck.partially_evaluate(sumcheck.partially_evaluated_polynomials, 1, round_challenge_2);
197+
sumcheck.partially_evaluate(sumcheck.partially_evaluated_polynomials, multivariate_n >> 2, round_challenge_2);
198198
EXPECT_EQ(first_polynomial[0], expected_val);
199199
}
200200

@@ -232,7 +232,7 @@ TYPED_TEST(PartialEvaluationTests, ThreeRoundsGeneric)
232232

233233
sumcheck.partially_evaluated_polynomials = typename Flavor::PartiallyEvaluatedMultivariates(multivariate_n);
234234
auto& first_polynomial = sumcheck.partially_evaluated_polynomials.get_all()[0];
235-
sumcheck.partially_evaluate(full_polynomials, 0, round_challenge_0);
235+
sumcheck.partially_evaluate(full_polynomials, multivariate_n, round_challenge_0);
236236

237237
EXPECT_EQ(first_polynomial[0], expected_q1);
238238
EXPECT_EQ(first_polynomial[1], expected_q2);
@@ -243,13 +243,13 @@ TYPED_TEST(PartialEvaluationTests, ThreeRoundsGeneric)
243243
FF expected_lo = expected_q1 * (FF(1) - round_challenge_1) + expected_q2 * round_challenge_1;
244244
FF expected_hi = expected_q3 * (FF(1) - round_challenge_1) + expected_q4 * round_challenge_1;
245245

246-
sumcheck.partially_evaluate(sumcheck.partially_evaluated_polynomials, 0, round_challenge_1);
246+
sumcheck.partially_evaluate(sumcheck.partially_evaluated_polynomials, multivariate_n >> 1, round_challenge_1);
247247
EXPECT_EQ(first_polynomial[0], expected_lo);
248248
EXPECT_EQ(first_polynomial[1], expected_hi);
249249

250250
FF round_challenge_2 = FF::random_element();
251251
FF expected_val = expected_lo * (FF(1) - round_challenge_2) + expected_hi * round_challenge_2;
252-
sumcheck.partially_evaluate(sumcheck.partially_evaluated_polynomials, 1, round_challenge_2);
252+
sumcheck.partially_evaluate(sumcheck.partially_evaluated_polynomials, multivariate_n >> 2, round_challenge_2);
253253
EXPECT_EQ(first_polynomial[0], expected_val);
254254
}
255255

@@ -303,7 +303,7 @@ TYPED_TEST(PartialEvaluationTests, ThreeRoundsGenericMultiplePolys)
303303
}
304304

305305
sumcheck.partially_evaluated_polynomials = typename Flavor::PartiallyEvaluatedMultivariates(multivariate_n);
306-
sumcheck.partially_evaluate(full_polynomials, 0, round_challenge_0);
306+
sumcheck.partially_evaluate(full_polynomials, multivariate_n, round_challenge_0);
307307
auto polynomial_get_all = sumcheck.partially_evaluated_polynomials.get_all();
308308
for (size_t i = 0; i < 3; i++) {
309309
EXPECT_EQ((polynomial_get_all[i])[0], expected_q1[i]);
@@ -319,7 +319,7 @@ TYPED_TEST(PartialEvaluationTests, ThreeRoundsGenericMultiplePolys)
319319
expected_lo[i] = expected_q1[i] * (FF(1) - round_challenge_1) + expected_q2[i] * round_challenge_1;
320320
expected_hi[i] = expected_q3[i] * (FF(1) - round_challenge_1) + expected_q4[i] * round_challenge_1;
321321
}
322-
sumcheck.partially_evaluate(sumcheck.partially_evaluated_polynomials, 0, round_challenge_1);
322+
sumcheck.partially_evaluate(sumcheck.partially_evaluated_polynomials, multivariate_n >> 1, round_challenge_1);
323323
for (size_t i = 0; i < 3; i++) {
324324
EXPECT_EQ((polynomial_get_all[i])[0], expected_lo[i]);
325325
EXPECT_EQ((polynomial_get_all[i])[1], expected_hi[i]);
@@ -329,7 +329,7 @@ TYPED_TEST(PartialEvaluationTests, ThreeRoundsGenericMultiplePolys)
329329
for (size_t i = 0; i < 3; i++) {
330330
expected_val[i] = expected_lo[i] * (FF(1) - round_challenge_2) + expected_hi[i] * round_challenge_2;
331331
}
332-
sumcheck.partially_evaluate(sumcheck.partially_evaluated_polynomials, 1, round_challenge_2);
332+
sumcheck.partially_evaluate(sumcheck.partially_evaluated_polynomials, multivariate_n >> 2, round_challenge_2);
333333
for (size_t i = 0; i < 3; i++) {
334334
EXPECT_EQ((polynomial_get_all[i])[0], expected_val[i]);
335335
}

barretenberg/cpp/src/barretenberg/sumcheck/sumcheck.hpp

+15-16
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#pragma once
2-
#include "barretenberg/numeric/bitop/division.hpp"
32
#include "barretenberg/plonk_honk_shared/library/grand_product_delta.hpp"
43
#include "barretenberg/polynomials/polynomial_arithmetic.hpp"
54
#include "barretenberg/sumcheck/sumcheck_output.hpp"
@@ -209,7 +208,7 @@ template <typename Flavor> class SumcheckProver {
209208
FF round_challenge = transcript->template get_challenge<FF>("Sumcheck:u_0");
210209
multivariate_challenge.emplace_back(round_challenge);
211210
// Prepare sumcheck book-keeping table for the next round
212-
partially_evaluate(full_polynomials, 0, round_challenge);
211+
partially_evaluate(full_polynomials, multivariate_n, round_challenge);
213212
gate_separators.partially_evaluate(round_challenge);
214213
round.round_size = round.round_size >> 1; // TODO(#224)(Cody): Maybe partially_evaluate should do this and
215214
// release memory? // All but final round
@@ -226,8 +225,7 @@ template <typename Flavor> class SumcheckProver {
226225
FF round_challenge = transcript->template get_challenge<FF>("Sumcheck:u_" + std::to_string(round_idx));
227226
multivariate_challenge.emplace_back(round_challenge);
228227
// Prepare sumcheck book-keeping table for the next round.
229-
// We use "round_idx - 1" because the partially_evaluated_polynomials are already halved once.
230-
partially_evaluate(partially_evaluated_polynomials, round_idx - 1, round_challenge);
228+
partially_evaluate(partially_evaluated_polynomials, multivariate_n >> round_idx, round_challenge);
231229
gate_separators.partially_evaluate(round_challenge);
232230
round.round_size = round.round_size >> 1;
233231
}
@@ -321,7 +319,7 @@ template <typename Flavor> class SumcheckProver {
321319

322320
multivariate_challenge.emplace_back(round_challenge);
323321
// Prepare sumcheck book-keeping table for the next round
324-
partially_evaluate(full_polynomials, 0, round_challenge);
322+
partially_evaluate(full_polynomials, multivariate_n, round_challenge);
325323
// Prepare ZK Sumcheck data for the next round
326324
zk_sumcheck_data.update_zk_sumcheck_data(round_challenge, round_idx);
327325
row_disabling_polynomial.update_evaluations(round_challenge, round_idx);
@@ -356,8 +354,7 @@ template <typename Flavor> class SumcheckProver {
356354
transcript->template get_challenge<FF>("Sumcheck:u_" + std::to_string(round_idx));
357355
multivariate_challenge.emplace_back(round_challenge);
358356
// Prepare sumcheck book-keeping table for the next round.
359-
// We use "round_idx - 1" because the partially_evaluated_polynomials are already halved once.
360-
partially_evaluate(partially_evaluated_polynomials, round_idx - 1, round_challenge);
357+
partially_evaluate(partially_evaluated_polynomials, multivariate_n >> round_idx, round_challenge);
361358
// Prepare evaluation masking and libra structures for the next round (for ZK Flavors)
362359
zk_sumcheck_data.update_zk_sumcheck_data(round_challenge, round_idx);
363360
row_disabling_polynomial.update_evaluations(round_challenge, round_idx);
@@ -447,19 +444,20 @@ template <typename Flavor> class SumcheckProver {
447444
* After the final update, i.e. when \f$ i = d-1 \f$, the upper row of the table contains the evaluations of Honk
448445
* polynomials at the challenge point \f$ (u_0,\ldots, u_{d-1}) \f$.
449446
* @param polynomials Honk polynomials at initialization; partially evaluated polynomials in subsequent rounds
450-
* @param halvings \f$i\f$
447+
* @param round_size \f$2^{d-i}\f$
451448
* @param round_challenge \f$u_i\f$
452449
*/
453-
void partially_evaluate(auto& polynomials, size_t halvings, FF round_challenge)
450+
void partially_evaluate(auto& polynomials, size_t round_size, FF round_challenge)
454451
{
455452
auto pep_view = partially_evaluated_polynomials.get_all();
456453
auto poly_view = polynomials.get_all();
457454
// after the first round, operate in place on partially_evaluated_polynomials
458455
parallel_for(poly_view.size(), [&](size_t j) {
459456
const auto& poly = poly_view[j];
460-
size_t actual_end_index = numeric::div_ceil<size_t>(poly.end_index(), 1 << halvings);
461-
for (size_t i = 0; i < actual_end_index; i += 2) {
462-
pep_view[j].set_if_valid_index(i >> 1, poly[i] + round_challenge * (poly[i + 1] - poly[i]));
457+
// If the polynomial is shorter than the round size, we do a little optimization.
458+
size_t limit = std::min(poly.end_index(), round_size);
459+
for (size_t i = 0; i < limit; i += 2) {
460+
pep_view[j].at(i >> 1) = poly[i] + round_challenge * (poly[i + 1] - poly[i]);
463461
}
464462
});
465463
};
@@ -468,15 +466,16 @@ template <typename Flavor> class SumcheckProver {
468466
* Specialization for array, see \ref bb::SumcheckProver<Flavor>::partially_evaluate "generic version".
469467
*/
470468
template <typename PolynomialT, std::size_t N>
471-
void partially_evaluate(std::array<PolynomialT, N>& polynomials, size_t halvings, FF round_challenge)
469+
void partially_evaluate(std::array<PolynomialT, N>& polynomials, size_t round_size, FF round_challenge)
472470
{
473471
auto pep_view = partially_evaluated_polynomials.get_all();
474472
// after the first round, operate in place on partially_evaluated_polynomials
475473
parallel_for(polynomials.size(), [&](size_t j) {
476474
const auto& poly = polynomials[j];
477-
size_t actual_end_index = numeric::div_ceil<size_t>(poly.end_index(), 1 << halvings);
478-
for (size_t i = 0; i < actual_end_index; i += 2) {
479-
pep_view[j].set_if_valid_index(i >> 1, poly[i] + round_challenge * (poly[i + 1] - poly[i]));
475+
// If the polynomial is shorter than the round size, we do a little optimization.
476+
size_t limit = std::min(poly.end_index(), round_size);
477+
for (size_t i = 0; i < limit; i += 2) {
478+
pep_view[j].at(i >> 1) = poly[i] + round_challenge * (poly[i + 1] - poly[i]);
480479
}
481480
});
482481
};

barretenberg/cpp/src/barretenberg/translator_vm/translator_flavor.hpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#pragma once
2+
23
#include "barretenberg/commitment_schemes/commitment_key.hpp"
34
#include "barretenberg/commitment_schemes/kzg/kzg.hpp"
45
#include "barretenberg/common/ref_vector.hpp"
@@ -7,7 +8,6 @@
78
#include "barretenberg/flavor/flavor_macros.hpp"
89
#include "barretenberg/flavor/relation_definitions.hpp"
910
#include "barretenberg/flavor/repeated_commitments_data.hpp"
10-
#include "barretenberg/numeric/bitop/division.hpp"
1111
#include "barretenberg/polynomials/polynomial.hpp"
1212
#include "barretenberg/polynomials/univariate.hpp"
1313
#include "barretenberg/relations/relation_parameters.hpp"
@@ -744,7 +744,8 @@ class TranslatorFlavor {
744744
PartiallyEvaluatedMultivariates(const ProverPolynomials& full_polynomials, size_t circuit_size)
745745
{
746746
for (auto [poly, full_poly] : zip_view(get_all(), full_polynomials.get_all())) {
747-
poly = Polynomial(numeric::div_ceil<size_t>(full_poly.end_index(), 2), circuit_size / 2);
747+
size_t desired_size = std::min(full_poly.end_index(), circuit_size / 2);
748+
poly = Polynomial(desired_size, circuit_size / 2);
748749
}
749750
}
750751
};

barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
#include "barretenberg/commitment_schemes/kzg/kzg.hpp"
55
#include "barretenberg/ecc/curves/bn254/g1.hpp"
66
#include "barretenberg/flavor/relation_definitions.hpp"
7-
#include "barretenberg/numeric/bitop/division.hpp"
87
#include "barretenberg/polynomials/barycentric.hpp"
98
#include "barretenberg/polynomials/univariate.hpp"
109

@@ -406,7 +405,8 @@ class AvmFlavor {
406405
PartiallyEvaluatedMultivariates(const ProverPolynomials& full_polynomials, size_t circuit_size)
407406
{
408407
for (auto [poly, full_poly] : zip_view(get_all(), full_polynomials.get_all())) {
409-
poly = Polynomial(numeric::div_ceil<size_t>(full_poly.end_index(), 2), circuit_size / 2);
408+
size_t desired_size = std::min(full_poly.end_index(), circuit_size / 2);
409+
poly = Polynomial(desired_size, circuit_size / 2);
410410
}
411411
}
412412
};

barretenberg/cpp/src/barretenberg/vm2/generated/flavor.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
// AUTOGENERATED FILE
22
#include "flavor.hpp"
3-
#include "barretenberg/numeric/bitop/division.hpp"
43

54
namespace bb::avm2 {
65

@@ -90,7 +89,8 @@ AvmFlavor::PartiallyEvaluatedMultivariates::PartiallyEvaluatedMultivariates(cons
9089
size_t circuit_size)
9190
{
9291
for (auto [poly, full_poly] : zip_view(get_all(), full_polynomials.get_all())) {
93-
poly = Polynomial(numeric::div_ceil<size_t>(full_poly.end_index(), 2), circuit_size / 2);
92+
size_t desired_size = std::min(full_poly.end_index(), circuit_size / 2);
93+
poly = Polynomial(desired_size, circuit_size / 2);
9494
}
9595
}
9696

bb-pilcom/bb-pil-backend/templates/flavor.cpp.hbs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
// AUTOGENERATED FILE
22
#include "flavor.hpp"
3-
#include "barretenberg/numeric/bitop/division.hpp"
43

54
namespace bb::{{snakeCase name}} {
65

@@ -89,7 +88,8 @@ AvmFlavor::PartiallyEvaluatedMultivariates::PartiallyEvaluatedMultivariates(cons
8988
size_t circuit_size)
9089
{
9190
for (auto [poly, full_poly] : zip_view(get_all(), full_polynomials.get_all())) {
92-
poly = Polynomial(numeric::div_ceil<size_t>(full_poly.end_index(), 2), circuit_size / 2);
91+
size_t desired_size = std::min(full_poly.end_index(), circuit_size / 2);
92+
poly = Polynomial(desired_size, circuit_size / 2);
9393
}
9494
}
9595

0 commit comments

Comments
 (0)