30 auto interleaved =
proving_key->polynomials.get_groups_to_be_interleaved();
32 auto targets =
proving_key->polynomials.get_interleaved();
34 const size_t num_polys_in_group = interleaved[0].size();
39 const size_t MINI_CIRCUIT_SIZE = targets[0].size() / num_polys_in_group;
40 BB_ASSERT_EQ(MINI_CIRCUIT_SIZE * num_polys_in_group, targets[0].size());
42 auto ordering_function = [&](
size_t index) {
44 size_t i = index / interleaved[0].size();
46 size_t j = index % interleaved[0].size();
47 auto&
group = interleaved[i];
48 auto& current_target = targets[i];
52 for (
size_t k =
group[j].start_index(); k <
group[j].end_index(); k++) {
53 current_target.at(k * num_polys_in_group + j) =
group[j][k];
56 parallel_for(interleaved.size() * num_polys_in_group, ordering_function);
86 RefArray ordered_constraint_polynomials{
proving_key->polynomials.ordered_range_constraints_0,
87 proving_key->polynomials.ordered_range_constraints_1,
88 proving_key->polynomials.ordered_range_constraints_2,
89 proving_key->polynomials.ordered_range_constraints_3 };
93 auto to_be_interleaved_groups =
proving_key->polynomials.get_groups_to_be_interleaved();
98 auto ordering_function = [&](
size_t i) {
99 auto group = to_be_interleaved_groups[i];
107 size_t extra_denominator_offset = i * sorted_elements.size();
116 for (
size_t k =
group[j].start_index(); k <
group[j].end_index() - NUM_DISABLED_ROWS_IN_SUMCHECK; k++) {
119 if ((current_offset + k) < free_space_before_runway) {
120 ordered_vectors_uint[current_offset + k] =
static_cast<uint32_t
>(
uint256_t(
group[j][k]).
data[0]);
124 extra_denominator_uint[extra_denominator_offset] =
126 extra_denominator_offset++;
132 auto ordered_vector_it = ordered_vectors_uint.begin();
133 std::advance(ordered_vector_it, free_space_before_runway);
134 std::copy(sorted_elements.cbegin(), sorted_elements.cend(), ordered_vector_it);
140 std::sort(ordered_vectors_uint.begin(), ordered_vectors_uint.end());
143 ordered_constraint_polynomials[i].copy_vector(ordered_vectors_uint);
150 auto extra_denominator_it = extra_denominator_uint.begin();
151 std::advance(extra_denominator_it, num_interleaved_wires * sorted_elements.size());
154 std::copy(sorted_elements.cbegin(), sorted_elements.cend(), extra_denominator_it);
157 std::sort(extra_denominator_uint.begin(), extra_denominator_uint.end());
159 std::sort(std::execution::par_unseq, extra_denominator_uint.begin(), extra_denominator_uint.end());
163 proving_key->polynomials.ordered_range_constraints_4.copy_vector(extra_denominator_uint);
186 auto interleaved =
proving_key->polynomials.get_interleaved();
187 auto ordered =
proving_key->polynomials.get_ordered_range_constraints();
188 const size_t num_ordered_polynomials = ordered.size();
190 const size_t total_num_random_values =
193 const size_t num_random_values_per_ordered = total_num_random_values / num_ordered_polynomials;
194 const size_t remaining_random_values = total_num_random_values % num_ordered_polynomials;
201 size_t idx = i * num_random_values_per_interleaved;
202 auto current_interleaved = interleaved[i];
204 random_values[idx] = current_interleaved.at(j);
212 size_t index_into_random = i * num_random_values_per_ordered;
213 auto& current_ordered = ordered[i];
215 current_ordered.at(j) = random_values[index_into_random];
224 size_t index_into_random = num_ordered_polynomials * num_random_values_per_ordered;
225 BB_ASSERT_LT(remaining_random_values, num_ordered_polynomials);
227 for (
size_t i = 0; i < remaining_random_values; i++) {
228 ordered[i].at(end) = random_values[index_into_random];