diff --git a/barretenberg/cpp/src/barretenberg/vm2/constraining/benchmark/README.md b/barretenberg/cpp/src/barretenberg/vm2/constraining/benchmark/README.md new file mode 100644 index 00000000000..d8e9bfce416 --- /dev/null +++ b/barretenberg/cpp/src/barretenberg/vm2/constraining/benchmark/README.md @@ -0,0 +1,6 @@ +Compile with + +- `cmake --preset bench`. +- `cmake --build --preset bench --target relations_acc_bench`. + +Run with `( cd build-bench && bin/relations_acc_bench )`. diff --git a/barretenberg/cpp/src/barretenberg/vm2/constraining/benchmark/relations_acc.bench.cpp b/barretenberg/cpp/src/barretenberg/vm2/constraining/benchmark/relations_acc.bench.cpp new file mode 100644 index 00000000000..d620ad97d6b --- /dev/null +++ b/barretenberg/cpp/src/barretenberg/vm2/constraining/benchmark/relations_acc.bench.cpp @@ -0,0 +1,65 @@ +#include + +#include "barretenberg/common/constexpr_utils.hpp" +#include "barretenberg/relations/relation_parameters.hpp" +#include "barretenberg/vm2/common/field.hpp" +#include "barretenberg/vm2/generated/columns.hpp" +#include "barretenberg/vm2/generated/flavor.hpp" +#include "barretenberg/vm2/generated/full_row.hpp" +#include "barretenberg/vm2/generated/relations/range_check.hpp" + +using namespace benchmark; +using namespace bb::avm2; + +namespace { + +AvmFullRow get_random_row() +{ + AvmFullRow row; + for (size_t i = 0; i < NUM_COLUMNS_WITH_SHIFTS; i++) { + row.get_column(static_cast(i)) = FF::random_element(); + } + return row; +} + +bb::RelationParameters get_params() +{ + return { + .eta = 0, + .beta = FF::random_element(), + .gamma = FF::random_element(), + .public_input_delta = 0, + .lookup_grand_product_delta = 0, + .beta_sqr = 0, + .beta_cube = 0, + .eccvm_set_permutation_delta = 0, + }; +} + +template void BM_accumulate_random(State& state) +{ + auto row = get_random_row(); + auto params = get_params(); + FF scaling_factor = 1; + + typename Relation::SumcheckArrayOfValuesOverSubrelations result{}; + + for (auto _ : state) { + Relation::accumulate(result, row, params, scaling_factor); + } +} + +} // namespace + +int main(int argc, char** argv) +{ + bb::constexpr_for<0, std::tuple_size_v, 1>([&]() { + using Relation = std::tuple_element_t; + BENCHMARK(BM_accumulate_random) + ->Name(std::string(Relation::NAME) + "_acc_random") + ->Unit(kMicrosecond); + }); + + ::benchmark::Initialize(&argc, argv); + ::benchmark::RunSpecifiedBenchmarks(); +} \ No newline at end of file