diff options
author | Nikolas Klauser <nikolasklauser@berlin.de> | 2023-10-06 22:56:44 +0200 |
---|---|---|
committer | Nikolas Klauser <nikolasklauser@berlin.de> | 2023-10-06 22:58:41 +0200 |
commit | a9138cdb36ccc79bff4dae9b050aa0a01b8ba809 (patch) | |
tree | 89513938ffa2bc07dbdf920a99c02c31c70fca0b /libcxx/benchmarks | |
parent | 5d2a7101b72a8cae8c4c1f7a11ede7f656efd583 (diff) | |
download | llvm-a9138cdb36ccc79bff4dae9b050aa0a01b8ba809.zip llvm-a9138cdb36ccc79bff4dae9b050aa0a01b8ba809.tar.gz llvm-a9138cdb36ccc79bff4dae9b050aa0a01b8ba809.tar.bz2 |
[libc++] Optimize ranges::count for __bit_iterators
```
---------------------------------------------------------------
Benchmark old new
---------------------------------------------------------------
bm_vector_bool_count/1 1.92 ns 1.92 ns
bm_vector_bool_count/2 1.92 ns 1.92 ns
bm_vector_bool_count/3 1.92 ns 1.92 ns
bm_vector_bool_count/4 1.92 ns 1.92 ns
bm_vector_bool_count/5 1.92 ns 1.92 ns
bm_vector_bool_count/6 1.92 ns 1.92 ns
bm_vector_bool_count/7 1.92 ns 1.92 ns
bm_vector_bool_count/8 1.92 ns 1.92 ns
bm_vector_bool_count/16 1.92 ns 1.92 ns
bm_vector_bool_count/64 2.24 ns 2.25 ns
bm_vector_bool_count/512 3.19 ns 3.20 ns
bm_vector_bool_count/4096 14.1 ns 12.3 ns
bm_vector_bool_count/32768 84.0 ns 83.6 ns
bm_vector_bool_count/262144 664 ns 661 ns
bm_vector_bool_count/1048576 2623 ns 2628 ns
bm_vector_bool_ranges_count/1 1.07 ns 1.92 ns
bm_vector_bool_ranges_count/2 1.65 ns 1.92 ns
bm_vector_bool_ranges_count/3 2.27 ns 1.92 ns
bm_vector_bool_ranges_count/4 2.68 ns 1.92 ns
bm_vector_bool_ranges_count/5 3.33 ns 1.92 ns
bm_vector_bool_ranges_count/6 3.99 ns 1.92 ns
bm_vector_bool_ranges_count/7 4.67 ns 1.92 ns
bm_vector_bool_ranges_count/8 5.19 ns 1.92 ns
bm_vector_bool_ranges_count/16 11.1 ns 1.92 ns
bm_vector_bool_ranges_count/64 52.2 ns 2.24 ns
bm_vector_bool_ranges_count/512 452 ns 3.20 ns
bm_vector_bool_ranges_count/4096 3577 ns 12.1 ns
bm_vector_bool_ranges_count/32768 28725 ns 83.7 ns
bm_vector_bool_ranges_count/262144 229676 ns 662 ns
bm_vector_bool_ranges_count/1048576 905574 ns 2625 ns
```
Reviewed By: #libc, ldionne
Spies: arichardson, ldionne, libcxx-commits
Differential Revision: https://reviews.llvm.org/D156956
Diffstat (limited to 'libcxx/benchmarks')
-rw-r--r-- | libcxx/benchmarks/CMakeLists.txt | 1 | ||||
-rw-r--r-- | libcxx/benchmarks/algorithms/count.bench.cpp | 35 |
2 files changed, 36 insertions, 0 deletions
diff --git a/libcxx/benchmarks/CMakeLists.txt b/libcxx/benchmarks/CMakeLists.txt index 56d22af0..1a4d634 100644 --- a/libcxx/benchmarks/CMakeLists.txt +++ b/libcxx/benchmarks/CMakeLists.txt @@ -173,6 +173,7 @@ endfunction() #============================================================================== set(BENCHMARK_TESTS algorithms.partition_point.bench.cpp + algorithms/count.bench.cpp algorithms/equal.bench.cpp algorithms/find.bench.cpp algorithms/lower_bound.bench.cpp diff --git a/libcxx/benchmarks/algorithms/count.bench.cpp b/libcxx/benchmarks/algorithms/count.bench.cpp new file mode 100644 index 0000000..7370293 --- /dev/null +++ b/libcxx/benchmarks/algorithms/count.bench.cpp @@ -0,0 +1,35 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include <algorithm> +#include <benchmark/benchmark.h> +#include <cstring> +#include <random> +#include <vector> + +static void bm_vector_bool_count(benchmark::State& state) { + std::vector<bool> vec1(state.range(), false); + + for (auto _ : state) { + benchmark::DoNotOptimize(vec1); + benchmark::DoNotOptimize(std::count(vec1.begin(), vec1.end(), true)); + } +} +BENCHMARK(bm_vector_bool_count)->DenseRange(1, 8)->Range(16, 1 << 20); + +static void bm_vector_bool_ranges_count(benchmark::State& state) { + std::vector<bool> vec1(state.range(), false); + + for (auto _ : state) { + benchmark::DoNotOptimize(vec1); + benchmark::DoNotOptimize(std::ranges::count(vec1.begin(), vec1.end(), true)); + } +} +BENCHMARK(bm_vector_bool_ranges_count)->DenseRange(1, 8)->Range(16, 1 << 20); + +BENCHMARK_MAIN(); |