|
Barretenberg
The ZK-SNARK library at the core of Aztec
|
#include "./scalar_multiplication_fast.hpp"#include "./pippenger_arena_layout.hpp"#include "./pippenger_constantine.hpp"#include "./pippenger_dedup.hpp"#include "barretenberg/common/assert.hpp"#include "barretenberg/common/thread.hpp"#include "barretenberg/ecc/curves/bn254/bn254.hpp"#include "barretenberg/ecc/curves/grumpkin/grumpkin.hpp"#include "barretenberg/ecc/groups/affine_add_packed.hpp"#include "barretenberg/ecc/groups/element_impl.hpp"#include "barretenberg/numeric/bitop/get_msb.hpp"#include <barretenberg/env/hardware_concurrency.hpp>#include <algorithm>#include <atomic>#include <bit>#include <cstddef>#include <cstdint>#include <limits>#include <memory>#include <span>#include <vector>#include "./pippenger_fallbacks.hpp"#include "./pippenger_batched.hpp"Go to the source code of this file.
Namespaces | |
| namespace | bb |
| Entry point for Barretenberg command-line interface. | |
| namespace | bb::scalar_multiplication |
| namespace | bb::scalar_multiplication::round_parallel_detail |
Functions | |
| size_t | bb::scalar_multiplication::window_bits_tuning_oversub_factor (size_t n_input) |
N-dependent oversubscription factor used ONLY for choose_window_bits' target_load formula (not for actual thread dispatch). | |
| template<typename F > | |
| void | bb::scalar_multiplication::round_parallel_detail::msm_parallel_for (size_t num_threads, F &&body) noexcept |
| Small-N fast-path: per-thread Jacobian Pippenger over a partition of the input. | |
| template<typename Curve > | |
| Curve::Element | bb::scalar_multiplication::round_parallel_detail::pippenger_round_parallel_jacobian_fast (std::span< const typename Curve::ScalarField > scalars, std::span< const typename Curve::AffineElement > points, size_t min_pts_per_thread_override=0, size_t max_threads=0) noexcept |
| Single-MSM_fast, no-affine-trick Pippenger over window_bits-wide windows. | |
| template<typename Curve > | |
| size_t | bb::scalar_multiplication::compute_arena_bytes_for_msm (size_t n_input, bool external_glv_provided, bool dedup_active, size_t max_threads) noexcept |
Round-parallel Pippenger MSM_fast. Windows process sequentially (high-to-low) but each window is fully parallel across threads. Windows are processed in batches of windows_in_batch to amortise parallel_for barriers; the batch count is sized at runtime to fit BATCH_MEM_BUDGET (~32 MiB). | |
| template<typename Curve > | |
| Curve::Element | bb::scalar_multiplication::pippenger_round_parallel (PolynomialSpan< const typename Curve::ScalarField > scalars, std::span< const typename Curve::AffineElement > points, size_t dedup_info=0, std::span< const typename Curve::AffineElement > external_glv_doubled={}, std::span< std::byte > external_arena={}, size_t max_threads=0) noexcept |
| State of the art pippenger_fast multiscalar multiplication algorithm. | |
| template<typename Curve > | |
| Curve::Element | bb::scalar_multiplication::pippenger_unsafe_fast (PolynomialSpan< const typename Curve::ScalarField > scalars, std::span< const typename Curve::AffineElement > points, size_t dedup_info) noexcept |
| template<typename Curve > | |
| Curve::Element | bb::scalar_multiplication::pippenger_fast (PolynomialSpan< const typename Curve::ScalarField > scalars, std::span< const typename Curve::AffineElement > points, bool handle_edge_cases, size_t dedup_info) noexcept |
| template curve::BN254::Element | bb::scalar_multiplication::pippenger_unsafe_fast< curve::BN254 > (PolynomialSpan< const curve::BN254::ScalarField > scalars, std::span< const curve::BN254::AffineElement > points, size_t dedup_info) noexcept |
| template curve::Grumpkin::Element | bb::scalar_multiplication::pippenger_unsafe_fast< curve::Grumpkin > (PolynomialSpan< const curve::Grumpkin::ScalarField > scalars, std::span< const curve::Grumpkin::AffineElement > points, size_t dedup_info) noexcept |
| template curve::BN254::Element | bb::scalar_multiplication::pippenger_fast< curve::BN254 > (PolynomialSpan< const curve::BN254::ScalarField > scalars, std::span< const curve::BN254::AffineElement > points, bool handle_edge_cases, size_t dedup_info) noexcept |
| template curve::Grumpkin::Element | bb::scalar_multiplication::pippenger_fast< curve::Grumpkin > (PolynomialSpan< const curve::Grumpkin::ScalarField > scalars, std::span< const curve::Grumpkin::AffineElement > points, bool handle_edge_cases, size_t dedup_info) noexcept |
| template curve::BN254::Element | bb::scalar_multiplication::pippenger_round_parallel< curve::BN254 > (PolynomialSpan< const curve::BN254::ScalarField > scalars, std::span< const curve::BN254::AffineElement > points, size_t dedup_info, std::span< const curve::BN254::AffineElement > external_glv_doubled, std::span< std::byte > external_arena, size_t max_threads) noexcept |
| template curve::Grumpkin::Element | bb::scalar_multiplication::pippenger_round_parallel< curve::Grumpkin > (PolynomialSpan< const curve::Grumpkin::ScalarField > scalars, std::span< const curve::Grumpkin::AffineElement > points, size_t dedup_info, std::span< const curve::Grumpkin::AffineElement > external_glv_doubled, std::span< std::byte > external_arena, size_t max_threads) noexcept |
| template curve::BN254::Element | bb::scalar_multiplication::trivial_msm< curve::BN254 > (PolynomialSpan< const curve::BN254::ScalarField > scalars_span, std::span< const curve::BN254::AffineElement > all_points) noexcept |
| template curve::Grumpkin::Element | bb::scalar_multiplication::trivial_msm< curve::Grumpkin > (PolynomialSpan< const curve::Grumpkin::ScalarField > scalars_span, std::span< const curve::Grumpkin::AffineElement > all_points) noexcept |
| template curve::BN254::Element | bb::scalar_multiplication::trivial_msm_threaded< curve::BN254 > (PolynomialSpan< const curve::BN254::ScalarField > scalars_span, std::span< const curve::BN254::AffineElement > all_points, size_t max_threads) noexcept |
| template curve::Grumpkin::Element | bb::scalar_multiplication::trivial_msm_threaded< curve::Grumpkin > (PolynomialSpan< const curve::Grumpkin::ScalarField > scalars_span, std::span< const curve::Grumpkin::AffineElement > all_points, size_t max_threads) noexcept |
| template curve::BN254::Element | bb::scalar_multiplication::round_parallel_detail::pippenger_round_parallel_jacobian_fast< curve::BN254 > (std::span< const curve::BN254::ScalarField > scalars, std::span< const curve::BN254::AffineElement > points, size_t min_pts_per_thread_override, size_t max_threads) noexcept |
| template curve::Grumpkin::Element | bb::scalar_multiplication::round_parallel_detail::pippenger_round_parallel_jacobian_fast< curve::Grumpkin > (std::span< const curve::Grumpkin::ScalarField > scalars, std::span< const curve::Grumpkin::AffineElement > points, size_t min_pts_per_thread_override, size_t max_threads) noexcept |
| template size_t | bb::scalar_multiplication::compute_arena_bytes_for_msm< curve::BN254 > (size_t, bool, bool, size_t) noexcept |
| bb::group_elements::BatchAffineAddScratch<BaseParams> add_scratch |
Definition at line 177 of file scalar_multiplication_fast.cpp.
| std::span<uint32_t> affine_bucket_indices |
Definition at line 202 of file scalar_multiplication_fast.cpp.
| std::span<BaseField> affine_bucket_inversion_scratch |
Definition at line 203 of file scalar_multiplication_fast.cpp.
| std::span<std::pair<uint32_t, uint32_t> > affine_bucket_pairs |
Definition at line 201 of file scalar_multiplication_fast.cpp.
| size_t affine_bucket_stride = 0 |
Definition at line 204 of file scalar_multiplication_fast.cpp.
| uintptr_t base_addr = 0 |
Definition at line 213 of file scalar_multiplication_fast.cpp.
| size_t capacity = 0 |
Definition at line 214 of file scalar_multiplication_fast.cpp.
| std::span<AffineBucketChunkInfo> chunk_infos |
Definition at line 207 of file scalar_multiplication_fast.cpp.
| std::span<uint32_t> curr_buckets |
Definition at line 167 of file scalar_multiplication_fast.cpp.
| std::span<AffineElement> curr_pts |
Definition at line 166 of file scalar_multiplication_fast.cpp.
| size_t cursor = 0 |
Definition at line 215 of file scalar_multiplication_fast.cpp.
| std::byte* data = nullptr |
Definition at line 212 of file scalar_multiplication_fast.cpp.
| bb::AffineColumnSpan<BaseField> dense_buckets |
Definition at line 199 of file scalar_multiplication_fast.cpp.
| std::span<uint8_t> is_present |
Definition at line 200 of file scalar_multiplication_fast.cpp.
| bb::VectorAffineElementPushSpan<BaseParams> lhs |
Definition at line 174 of file scalar_multiplication_fast.cpp.
| std::unique_ptr<std::byte[]> local_owner |
Definition at line 211 of file scalar_multiplication_fast.cpp.
| bb::VectorAffineElementPushSpan<BaseParams> out |
Definition at line 176 of file scalar_multiplication_fast.cpp.
| size_t overflow_len = 0 |
Definition at line 188 of file scalar_multiplication_fast.cpp.
| std::span<AffineElement> overflow_pts |
Definition at line 187 of file scalar_multiplication_fast.cpp.
| std::span<uint32_t> overflow_slots |
Definition at line 186 of file scalar_multiplication_fast.cpp.
| std::span<uint32_t> pair_dest |
Definition at line 178 of file scalar_multiplication_fast.cpp.
| size_t result_len = 0 |
Definition at line 180 of file scalar_multiplication_fast.cpp.
| bb::VectorAffineElementPushSpan<BaseParams> rhs |
Definition at line 175 of file scalar_multiplication_fast.cpp.