Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
fold_stride2.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include "
barretenberg/ecc/fields/vector_field.hpp
"
4
#include "
barretenberg/ecc/fields/vectorized_for.hpp
"
5
#include "
barretenberg/polynomials/polynomial.hpp
"
6
7
#include <cstddef>
8
9
namespace
bb
{
10
40
template
<
typename
Fr>
41
void
fold_stride2
(
42
const
Polynomial<Fr>
& src,
Polynomial<Fr>
& dst,
const
size_t
begin,
const
size_t
end,
const
Fr
& challenge)
43
{
44
size_t
k = begin;
45
#if defined(__wasm_simd128__)
46
if
constexpr
(simd_supported_v<Fr>) {
47
constexpr
size_t
WIDTH =
VECTOR_FIELD_WIDTH
;
48
using
Vec
=
VectorField<typename Fr::Params>
;
49
const
Vec
challenge_vec =
Vec::broadcast
(challenge);
50
for
(; k + WIDTH <= end; k += WIDTH) {
51
const
Vec
even =
Vec::from_lanes
([&](
size_t
lane) {
return
src[2 * (k + lane)]; });
52
const
Vec
odd =
Vec::from_lanes
([&](
size_t
lane) {
return
src[2 * (k + lane) + 1]; });
53
dst[
ContiguousVectorIndex<WIDTH>
{ k }] = even + (odd - even) * challenge_vec;
54
}
55
}
56
#endif
57
for
(; k < end; ++k) {
58
const
Fr
even = src[2 * k];
59
dst[
ScalarIndex
{ k }] = even + challenge * (src[2 * k + 1] - even);
60
}
61
}
62
63
}
// namespace bb
bb::Polynomial
Definition
polynomial.hpp:181
bb
Entry point for Barretenberg command-line interface.
Definition
api.hpp:5
bb::fold_stride2
void fold_stride2(const Polynomial< Fr > &src, Polynomial< Fr > &dst, const size_t begin, const size_t end, const Fr &challenge)
Stride-2 linear-interpolation fold: dst[k] = src[2k] + challenge * (src[2k+1] - src[2k]) for every ou...
Definition
fold_stride2.hpp:41
bb::VECTOR_FIELD_WIDTH
constexpr size_t VECTOR_FIELD_WIDTH
Definition
vectorized_for.hpp:32
polynomial.hpp
bb::ContiguousVectorIndex
Definition
vectorized_for.hpp:49
bb::ScalarIndex
Definition
vectorized_for.hpp:34
bb::VectorField
Definition
vector_field.hpp:132
bb::VectorField::from_lanes
static VectorField from_lanes(const Fn &value_at) noexcept
Definition
vector_field.hpp:299
bb::VectorField::broadcast
static VectorField broadcast(const Field &s) noexcept
Definition
vector_field.hpp:1346
bb::field< Bn254FrParams >
vector_field.hpp
vectorized_for.hpp
src
barretenberg
polynomials
fold_stride2.hpp
Generated by
1.9.8