diff --git a/barretenberg/cpp/src/barretenberg/benchmark/CMakeLists.txt b/barretenberg/cpp/src/barretenberg/benchmark/CMakeLists.txt index 285f2bb5937..e86e72df09d 100644 --- a/barretenberg/cpp/src/barretenberg/benchmark/CMakeLists.txt +++ b/barretenberg/cpp/src/barretenberg/benchmark/CMakeLists.txt @@ -1,3 +1,4 @@ +add_subdirectory(commit_bench) add_subdirectory(decrypt_bench) add_subdirectory(ipa_bench) add_subdirectory(pippenger_bench) diff --git a/barretenberg/cpp/src/barretenberg/benchmark/commit_bench/CMakeLists.txt b/barretenberg/cpp/src/barretenberg/benchmark/commit_bench/CMakeLists.txt new file mode 100644 index 00000000000..3bca58463b1 --- /dev/null +++ b/barretenberg/cpp/src/barretenberg/benchmark/commit_bench/CMakeLists.txt @@ -0,0 +1,18 @@ +# Each source represents a separate benchmark suite +set(BENCHMARK_SOURCES + commit.bench.cpp +) + +# Required libraries for benchmark suites +set(LINKED_LIBRARIES + commitment_schemes + benchmark::benchmark +) + +# Add executable and custom target for each suite, e.g. ultra_honk_bench +foreach(BENCHMARK_SOURCE ${BENCHMARK_SOURCES}) + get_filename_component(BENCHMARK_NAME ${BENCHMARK_SOURCE} NAME_WE) # extract name without extension + add_executable(${BENCHMARK_NAME}_bench main.bench.cpp ${BENCHMARK_SOURCE}) + target_link_libraries(${BENCHMARK_NAME}_bench ${LINKED_LIBRARIES}) + add_custom_target(run_${BENCHMARK_NAME} COMMAND ${BENCHMARK_NAME} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) +endforeach() \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/benchmark/commit_bench/commit.bench.cpp b/barretenberg/cpp/src/barretenberg/benchmark/commit_bench/commit.bench.cpp new file mode 100644 index 00000000000..76990104285 --- /dev/null +++ b/barretenberg/cpp/src/barretenberg/benchmark/commit_bench/commit.bench.cpp @@ -0,0 +1,38 @@ + +#include "barretenberg/commitment_schemes/commitment_key.hpp" +#include + +namespace bb { + +template +std::shared_ptr> create_commitment_key(const size_t num_points) +{ + std::string srs_path; + if constexpr (std::same_as) { + srs_path = "../srs_db/ignition"; + } else { + static_assert(std::same_as); + srs_path = "../srs_db/grumpkin"; + } + std::shared_ptr> crs_factory( + new bb::srs::factories::FileCrsFactory(srs_path, num_points)); + return std::make_shared>(num_points, crs_factory); +} + +constexpr size_t MAX_LOG_NUM_POINTS = 24; +constexpr size_t MAX_NUM_POINTS = 1 << MAX_LOG_NUM_POINTS; + +auto key = create_commitment_key(MAX_NUM_POINTS); + +template void bench_commit(::benchmark::State& state) +{ + const size_t num_points = 1 << state.range(0); + const auto polynomial = Polynomial(num_points); + for (auto _ : state) { + benchmark::DoNotOptimize(key->commit(polynomial)); + } +} + +BENCHMARK(bench_commit)->DenseRange(10, MAX_LOG_NUM_POINTS)->Unit(benchmark::kMillisecond); + +} // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/benchmark/commit_bench/main.bench.cpp b/barretenberg/cpp/src/barretenberg/benchmark/commit_bench/main.bench.cpp new file mode 100644 index 00000000000..71fefa04722 --- /dev/null +++ b/barretenberg/cpp/src/barretenberg/benchmark/commit_bench/main.bench.cpp @@ -0,0 +1,3 @@ +#include + +BENCHMARK_MAIN(); diff --git a/barretenberg/cpp/src/barretenberg/polynomials/polynomial.hpp b/barretenberg/cpp/src/barretenberg/polynomials/polynomial.hpp index 70e080bdfa4..305585773e4 100644 --- a/barretenberg/cpp/src/barretenberg/polynomials/polynomial.hpp +++ b/barretenberg/cpp/src/barretenberg/polynomials/polynomial.hpp @@ -231,6 +231,13 @@ template class Polynomial { std::size_t size() const { return size_; } std::size_t capacity() const { return size_ + MAXIMUM_COEFFICIENT_SHIFT; } + static Polynomial random(const size_t num_coeffs) + { + Polynomial p(num_coeffs); + std::generate_n(p.begin(), num_coeffs, []() { return Fr::random_element(); }); + return p; + } + private: // allocate a fresh memory pointer for backing memory // DOES NOT initialize memory