diff --git a/benchmarks/CMakeLists.txt b/benchmarks/CMakeLists.txt index caab5625c60..5f7afec336c 100644 --- a/benchmarks/CMakeLists.txt +++ b/benchmarks/CMakeLists.txt @@ -135,4 +135,5 @@ add_benchmark(swap_ranges src/swap_ranges.cpp) add_benchmark(unique src/unique.cpp) add_benchmark(vector_bool_copy src/vector_bool_copy.cpp) add_benchmark(vector_bool_copy_n src/vector_bool_copy_n.cpp) +add_benchmark(vector_bool_count src/vector_bool_count.cpp) add_benchmark(vector_bool_move src/vector_bool_move.cpp) diff --git a/benchmarks/src/vector_bool_count.cpp b/benchmarks/src/vector_bool_count.cpp new file mode 100644 index 00000000000..1d8f174a37e --- /dev/null +++ b/benchmarks/src/vector_bool_count.cpp @@ -0,0 +1,39 @@ +// Copyright (c) Microsoft Corporation. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +#include +// +#include +#include +#include +#include + +using namespace std; + +vector createRandomVector(const size_t size) { + mt19937 gen; + bernoulli_distribution dist{0.5}; + vector result(size); + generate(result.begin(), result.end(), [&] { return dist(gen); }); + return result; +} + +void count_aligned(benchmark::State& state) { + const auto size = static_cast(state.range(0)); + vector v = createRandomVector(size); + + bool b = false; + + for (auto _ : state) { + benchmark::DoNotOptimize(b); + benchmark::DoNotOptimize(v); + auto r = count(v.cbegin(), v.cend(), b); + benchmark::DoNotOptimize(r); + b = !b; + } +} + + +BENCHMARK(count_aligned)->RangeMultiplier(64)->Range(64, 64 << 10); + +BENCHMARK_MAIN();