barretenberg
Loading...
Searching...
No Matches
evaluation_domain.hpp
1#pragma once
2#include "barretenberg/ecc/curves/bn254/fr.hpp"
3#include "barretenberg/ecc/curves/grumpkin/grumpkin.hpp"
4#include <vector>
5
6namespace barretenberg {
7
8template <typename FF> class EvaluationDomain {
9 public:
11 : size(0)
12 , num_threads(0)
13 , thread_size(0)
14 , log2_size(0)
15 , log2_thread_size(0)
16 , log2_num_threads(0)
17 , generator_size(0)
18 , root(FF::zero())
19 , root_inverse(FF::zero())
20 , domain(FF::zero())
21 , domain_inverse(FF::zero())
22 , generator(FF::zero())
23 , generator_inverse(FF::zero())
24 , four_inverse(FF::zero())
25 , roots(nullptr){};
26
27 EvaluationDomain(const size_t domain_size, const size_t target_generator_size = 0);
30
31 EvaluationDomain& operator=(const EvaluationDomain&) = delete;
33
35
36 void compute_lookup_table();
37 void compute_generator_table(const size_t target_generator_size);
38
39 const std::vector<FF*>& get_round_roots() const { return round_roots; };
40 const std::vector<FF*>& get_inverse_round_roots() const { return inverse_round_roots; }
41
42 size_t size; // n, always a power of 2
43 size_t num_threads; // num_threads * thread_size = size
44 size_t thread_size;
45 size_t log2_size;
46 size_t log2_thread_size;
47 size_t log2_num_threads;
48 size_t generator_size;
49
50 FF root; // omega; the nth root of unity
51 FF root_inverse; // omega^{-1}
52 FF domain; // n; same as size
53 FF domain_inverse; // n^{-1}
54 FF generator;
55 FF generator_inverse;
56 FF four_inverse;
57
58 private:
59 std::vector<FF*> round_roots; // An entry for each of the log(n) rounds: each entry is a pointer to
60 // the subset of the roots of unity required for that fft round.
61 // E.g. round_roots[0] = [1, ω^(n/2 - 1)],
62 // round_roots[1] = [1, ω^(n/4 - 1), ω^(n/2 - 1), ω^(3n/4 - 1)]
63 // ...
64 std::vector<FF*> inverse_round_roots;
65
66 std::shared_ptr<FF[]> roots;
67};
68
69// tell the compiler we will take care of instantiating these in the .cpp file
70extern template class EvaluationDomain<barretenberg::fr>;
71// extern template class EvaluationDomain<grumpkin::fr>;
72// add alias for compatibility
74} // namespace barretenberg
Definition: evaluation_domain.hpp:8
constexpr_utils defines some helper methods that perform some stl-equivalent operations but in a cons...
Definition: constexpr_utils.hpp:16