45 static constexpr std::array<std::string_view, 14>
block_labels{
"ecc_op",
58 "lookup_table_data" };
81 max_size =
std::max(
static_cast<uint32_t
>(block.size()), max_size);
97 size_t start_idx = fixed_block.trace_offset();
98 size_t end_idx = start_idx + max_size;
106 size_t databus_data_start = 0;
121 info(
"Minimum required block sizes for structured trace: ");
132 info(
"Active regions of accumulator: ");
134 std::cerr << std::left <<
std::setw(20) << label <<
": (" << range.first <<
", " << range.second <<
")"
142 info(
"Active regions of previous accumulator: ");
144 std::cerr << std::left <<
std::setw(20) << label <<
": (" << range.first <<
", " << range.second <<
")"
152 info(
"Thread ranges: ");
155 for (
auto range : ranges) {
172 const size_t full_domain_size,
173 bool use_prev_accumulator =
false)
176 std::vector<Range> simplified_active_ranges;
179 simplified_active_ranges.push_back(
Range{ 0, full_domain_size });
199 std::vector<Range> union_ranges;
204 union_ranges.push_back(ranges.front());
206 for (
const Range& range : ranges) {
207 Range& prev_range = union_ranges.back();
210 if (range.first <= prev_range.second) {
211 prev_range.second =
std::max(range.second, prev_range.second);
213 union_ranges.push_back(range);
234 const std::vector<Range>& union_ranges,
const size_t num_threads)
238 for (
const Range& range : union_ranges) {
239 size_t start_idx = range.first;
240 size_t total_content = range.second - start_idx;
241 size_t content_per_thread = total_content / num_threads;
242 size_t leftovers = total_content % num_threads;
243 for (
size_t i = 0; i < num_threads; i++) {
245 start_idx + content_per_thread + (i < leftovers ? 1 : 0);
246 if (start_idx < end_idx) {
uint32_t trace_offset() const
const BusVector & get_calldata() const
const BusVector & get_secondary_calldata() const
const BusVector & get_return_data() const
void compute_offsets(bool is_structured)
void set_fixed_block_sizes(const TraceSettings &settings)
size_t get_tables_size() const
Get combined size of all tables used in circuit.
Entry point for Barretenberg command-line interface.
MegaCircuitBuilder_< field< Bn254FrParams > > MegaCircuitBuilder
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Tracks the cumulative usage of the execution trace across a series of circuits.
void update(const Builder &circuit)
std::vector< std::vector< Range > > thread_ranges
void print_thread_ranges()
std::vector< Range > previous_active_ranges
ExecutionTraceUsageTracker(const TraceSettings &trace_settings=TraceSettings{})
void print_previous_active_ranges()
void construct_thread_ranges(const size_t num_threads, const size_t full_domain_size, bool use_prev_accumulator=false)
Construct ranges of execution trace rows that evenly distribute the active content of the trace acros...
static constexpr std::array< std::string_view, 14 > block_labels
std::pair< size_t, size_t > Range
static std::vector< Range > construct_union_of_ranges(std::vector< Range > &ranges)
Construct sorted disjoint ranges representing the union of an arbitrary set of ranges.
MegaTraceFixedBlockSizes fixed_sizes
std::vector< Range > active_ranges
void print_active_ranges()
static std::vector< std::vector< Range > > construct_ranges_for_equal_content_distribution(const std::vector< Range > &union_ranges, const size_t num_threads)
Given a set of ranges indicating "active" regions of an ambient space, define a given number of new r...
TraceSettings trace_settings
MegaTraceLookupBlock lookup
std::optional< TraceStructure > structure