barretenberg
Loading...
Searching...
No Matches
point_table.hpp
1#pragma once
2#include "barretenberg/common/mem.hpp"
3#include "barretenberg/common/thread.hpp"
4#include "barretenberg/ecc/curves/bn254/g1.hpp"
5#include <memory>
6
7namespace barretenberg::scalar_multiplication {
8
9inline size_t point_table_size(size_t num_points)
10{
11 const size_t num_threads = get_num_cpus_pow2();
12 const size_t prefetch_overflow = 16 * num_threads;
13
14 return 2 * num_points + prefetch_overflow;
15}
16
17inline size_t point_table_buf_size(size_t num_points)
18{
19 // TODO(Cody): This could be trouble if we change curves.
20 return sizeof(g1::affine_element) * point_table_size(num_points);
21}
22
23template <typename T> inline std::shared_ptr<T[]> point_table_alloc(size_t num_points)
24{
25 return std::static_pointer_cast<T[]>(get_mem_slab(point_table_buf_size(num_points)));
26}
27
28} // namespace barretenberg::scalar_multiplication
std::shared_ptr< void > get_mem_slab(size_t size)
Definition: slab_allocator.cpp:214