From 91303a2cb4d6b86da83cd696b4e201a0452213c3 Mon Sep 17 00:00:00 2001 From: stdpain Date: Thu, 28 Dec 2023 16:03:56 +0800 Subject: [PATCH] add benchmark for sparse cases --- benchmarks/CMakeLists.txt | 2 +- benchmarks/sparse_cases_benchmark.cpp | 52 +++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 benchmarks/sparse_cases_benchmark.cpp diff --git a/benchmarks/CMakeLists.txt b/benchmarks/CMakeLists.txt index 71be77ee7..1ab60df66 100644 --- a/benchmarks/CMakeLists.txt +++ b/benchmarks/CMakeLists.txt @@ -10,10 +10,10 @@ if(NOT WIN32) add_c_benchmark(add_benchmark) target_link_libraries(add_benchmark m) add_c_benchmark(intersect_range_benchmark) - target_link_libraries(add_benchmark m) add_c_benchmark(frozen_benchmark) add_c_benchmark(containsmulti_benchmark) add_cpp_benchmark(fastunion_benchmark) + add_cpp_benchmark(sparse_cases_benchmark) endif() add_c_benchmark(bitset_container_benchmark) add_c_benchmark(array_container_benchmark) diff --git a/benchmarks/sparse_cases_benchmark.cpp b/benchmarks/sparse_cases_benchmark.cpp new file mode 100644 index 000000000..af73d7050 --- /dev/null +++ b/benchmarks/sparse_cases_benchmark.cpp @@ -0,0 +1,52 @@ +#include + +#include +#include +#include + +#include "benchmark.h" + +// the same key will add to the same bitmap +static std::default_random_engine e; + +void run_bench(size_t batch_size, int loop_count, size_t max) { + using namespace roaring; + using roaring::Roaring; + std::uniform_int_distribution dist(0, max); + uint64_t cycles_start, cycles_final; + RDTSC_START(cycles_start); + for (int j = 0; j < loop_count ; ++j) { + Roaring64Map bitmap_64; + for (size_t i = 0; i < batch_size; i++) { + bitmap_64.add(dist(e)); + } + } + + RDTSC_FINAL(cycles_final); + std::cout << "batch_size=" << batch_size << ", max=" << max << " costs:" + << (cycles_final - cycles_start) * 1.0 / batch_size / loop_count + << std::endl; +} + +int main(int argc, char* argv[]) { + (void)argc; + (void)argv; + + run_bench(100, 10, 100); + run_bench(100, 10, 1000); + run_bench(100, 10, 1000000); + run_bench(100, 10, 100000000); + run_bench(100, 10, 10000000000); + + run_bench(100000, 10, 1000); + run_bench(100000, 10, 100000); + run_bench(100000, 10, 1000000000); + run_bench(100000, 10, 100000000000); + + run_bench(100000000, 1, 100000000); + run_bench(100000000, 1, 500000000); + run_bench(100000000, 1, 5000000000); + + + return 0; +} \ No newline at end of file