78 auto sigmas = polynomials.get_sigmas();
79 auto ids = polynomials.get_ids();
88 const size_t domain_size = sigmas[0].size();
90 for (
size_t wire_idx = 0; wire_idx < NUM_WIRES; ++wire_idx) {
91 auto& sigma = sigmas[wire_idx];
92 auto&
id = ids[wire_idx];
93 const size_t base = SEPARATOR * wire_idx;
95 BB_BENCH_TRACY_NAME(
"Permutation::identity_init");
96 const size_t start = thread_data.start[j];
97 const size_t end = thread_data.end[j];
98 for (size_t i = start; i < end; ++i) {
99 const size_t poly_idx = i + sigma.start_index();
100 const FF v = FF(poly_idx + base);
101 sigma.at(poly_idx) = v;
116 std::span<const uint32_t> real_variable_tags = circuit.real_variable_tags;
117 const auto& tau = circuit.tau();
121 [&](
size_t cycle_idx) {
122 const CyclicPermutation& cycle = copy_cycles[cycle_idx];
123 const auto cycle_size = cycle.size();
124 if (cycle_size == 0) {
129 for (
size_t node_idx = 0; node_idx + 1 < cycle_size; ++node_idx) {
130 const cycle_node& current = cycle[node_idx];
131 const cycle_node& next = cycle[node_idx + 1];
132 sigmas[current.wire_idx].at(current.gate_idx) =
FF(next.gate_idx + (SEPARATOR * next.wire_idx));
135 const uint32_t var_tag = real_variable_tags[cycle_idx];
138 const cycle_node& last_node = cycle[cycle_size - 1];
139 sigmas[last_node.wire_idx].at(last_node.gate_idx) =
FF((SEPARATOR * NUM_WIRES) + tau.at(var_tag));
144 const cycle_node& first_node = cycle[0];
145 ids[first_node.wire_idx].at(first_node.gate_idx) =
FF((SEPARATOR * NUM_WIRES) + var_tag);
167 const auto num_public_inputs =
static_cast<uint32_t
>(circuit.num_public_inputs());
168 const auto pub_inputs_offset = circuit.blocks.pub_inputs.trace_offset();
169 for (
size_t i = 0; i < num_public_inputs; ++i) {
170 const uint32_t idx =
static_cast<uint32_t
>(i + pub_inputs_offset);
171 sigmas[0].at(idx) = -
FF(idx + 1);
void parallel_for_heuristic(size_t num_points, const std::function< void(size_t, size_t, size_t)> &func, size_t heuristic_cost)
Split a loop into several loops running in parallel based on operations in 1 iteration.
void compute_permutation_argument_polynomials(const typename Flavor::CircuitBuilder &circuit, typename Flavor::ProverPolynomials &polynomials, const std::vector< CyclicPermutation > ©_cycles)
Compute Honk-style permutation sigma/id polynomials and add to prover_instance.