96 auto sigmas = polynomials.get_sigmas();
97 auto ids = polynomials.get_ids();
106 const size_t domain_size = sigmas[0].size();
108 for (
size_t wire_idx = 0; wire_idx < NUM_WIRES; ++wire_idx) {
109 auto& sigma = sigmas[wire_idx];
110 auto&
id = ids[wire_idx];
111 const size_t base = SEPARATOR * wire_idx;
113 BB_BENCH_TRACY_NAME(
"Permutation::identity_init");
114 const size_t start = thread_data.start[j];
115 const size_t end = thread_data.end[j];
116 for (size_t i = start; i < end; ++i) {
117 const size_t poly_idx = i + sigma.start_index();
118 const FF v = FF(poly_idx + base);
119 sigma.at(poly_idx) = v;
134 std::span<const uint32_t> real_variable_tags = circuit.real_variable_tags;
135 const auto& tau = circuit.tau();
139 [&](
size_t cycle_idx) {
140 const std::span<const cycle_node> cycle = copy_cycles[cycle_idx];
141 const auto cycle_size = cycle.size();
142 if (cycle_size == 0) {
147 for (
size_t node_idx = 0; node_idx + 1 < cycle_size; ++node_idx) {
148 const cycle_node& current = cycle[node_idx];
149 const cycle_node& next = cycle[node_idx + 1];
150 sigmas[current.wire_idx].at(current.gate_idx) =
FF(next.gate_idx + (SEPARATOR * next.wire_idx));
153 const uint32_t var_tag = real_variable_tags[cycle_idx];
156 const cycle_node& last_node = cycle[cycle_size - 1];
157 sigmas[last_node.wire_idx].at(last_node.gate_idx) =
FF((SEPARATOR * NUM_WIRES) + tau.at(var_tag));
162 const cycle_node& first_node = cycle[0];
163 ids[first_node.wire_idx].at(first_node.gate_idx) =
FF((SEPARATOR * NUM_WIRES) + var_tag);
185 const auto num_public_inputs =
static_cast<uint32_t
>(circuit.num_public_inputs());
186 const auto pub_inputs_offset = circuit.blocks.pub_inputs.trace_offset();
187 for (
size_t i = 0; i < num_public_inputs; ++i) {
188 const uint32_t idx =
static_cast<uint32_t
>(i + pub_inputs_offset);
189 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 CopyCycles ©_cycles)
Compute Honk-style permutation sigma/id polynomials and add to prover_instance.