From fbde9240e929c841e96eb03daf057204035bac99 Mon Sep 17 00:00:00 2001 From: Nikolas Klauser Date: Mon, 12 Jan 2026 20:09:54 +0100 Subject: [PATCH] [libc++] Remove some low value benchmarks (#175178) This patch removes some of the benchmarks in our suite that are relatively low value. Specifically: - `lexicographical_compare` isn't benchmarked with every number of elements between 1 and 8 anymore - `bitset` isn't benchmarked with as many sizes anymore. Instead, only some representative sizes are benchmarked. - `to_chars` isn't benchmarked for every possible base anymore, but only 2, 8, 10, 16 and 23 (so we have an uncommon base as well) --- .../lexicographical_compare.bench.cpp | 12 +++--- libcxx/test/benchmarks/bitset.bench.cpp | 41 ++----------------- libcxx/test/benchmarks/to_chars.bench.cpp | 4 +- 3 files changed, 11 insertions(+), 46 deletions(-) diff --git a/libcxx/test/benchmarks/algorithms/lexicographical_compare.bench.cpp b/libcxx/test/benchmarks/algorithms/lexicographical_compare.bench.cpp index e9d7710bf29c..3ff2534881a9 100755 --- a/libcxx/test/benchmarks/algorithms/lexicographical_compare.bench.cpp +++ b/libcxx/test/benchmarks/algorithms/lexicographical_compare.bench.cpp @@ -24,9 +24,9 @@ static void bm_lexicographical_compare(benchmark::State& state) { benchmark::DoNotOptimize(std::lexicographical_compare(vec1.begin(), vec1.end(), vec2.begin(), vec2.end())); } } -BENCHMARK(bm_lexicographical_compare)->DenseRange(1, 8)->Range(16, 1 << 20); -BENCHMARK(bm_lexicographical_compare)->DenseRange(1, 8)->Range(16, 1 << 20); -BENCHMARK(bm_lexicographical_compare)->DenseRange(1, 8)->Range(16, 1 << 20); +BENCHMARK(bm_lexicographical_compare)->Arg(1)->Range(8, 1 << 20); +BENCHMARK(bm_lexicographical_compare)->Arg(1)->Range(8, 1 << 20); +BENCHMARK(bm_lexicographical_compare)->Arg(1)->Range(8, 1 << 20); template static void bm_ranges_lexicographical_compare(benchmark::State& state) { @@ -39,8 +39,8 @@ static void bm_ranges_lexicographical_compare(benchmark::State& state) { benchmark::DoNotOptimize(std::ranges::lexicographical_compare(vec1.begin(), vec1.end(), vec2.begin(), vec2.end())); } } -BENCHMARK(bm_ranges_lexicographical_compare)->DenseRange(1, 8)->Range(16, 1 << 20); -BENCHMARK(bm_ranges_lexicographical_compare)->DenseRange(1, 8)->Range(16, 1 << 20); -BENCHMARK(bm_ranges_lexicographical_compare)->DenseRange(1, 8)->Range(16, 1 << 20); +BENCHMARK(bm_ranges_lexicographical_compare)->Arg(1)->Range(8, 1 << 20); +BENCHMARK(bm_ranges_lexicographical_compare)->Arg(1)->Range(8, 1 << 20); +BENCHMARK(bm_ranges_lexicographical_compare)->Arg(1)->Range(8, 1 << 20); BENCHMARK_MAIN(); diff --git a/libcxx/test/benchmarks/bitset.bench.cpp b/libcxx/test/benchmarks/bitset.bench.cpp index b4c7e6feb656..5fda4cbc2b37 100644 --- a/libcxx/test/benchmarks/bitset.bench.cpp +++ b/libcxx/test/benchmarks/bitset.bench.cpp @@ -52,65 +52,30 @@ static void BM_BitsetToString(benchmark::State& state) { // Sparse bitset BENCHMARK(BM_BitsetToString<32>)->Arg(10)->Name("BM_BitsetToString<32>/Sparse (10%)"); BENCHMARK(BM_BitsetToString<64>)->Arg(10)->Name("BM_BitsetToString<64>/Sparse (10%)"); -BENCHMARK(BM_BitsetToString<128>)->Arg(10)->Name("BM_BitsetToString<128>/Sparse (10%)"); -BENCHMARK(BM_BitsetToString<256>)->Arg(10)->Name("BM_BitsetToString<256>/Sparse (10%)"); -BENCHMARK(BM_BitsetToString<512>)->Arg(10)->Name("BM_BitsetToString<512>/Sparse (10%)"); -BENCHMARK(BM_BitsetToString<1024>)->Arg(10)->Name("BM_BitsetToString<1024>/Sparse (10%)"); -BENCHMARK(BM_BitsetToString<2048>)->Arg(10)->Name("BM_BitsetToString<2048>/Sparse (10%)"); -BENCHMARK(BM_BitsetToString<4096>)->Arg(10)->Name("BM_BitsetToString<4096>/Sparse (10%)"); BENCHMARK(BM_BitsetToString<8192>)->Arg(10)->Name("BM_BitsetToString<8192>/Sparse (10%)"); -BENCHMARK(BM_BitsetToString<16384>)->Arg(10)->Name("BM_BitsetToString<16384>/Sparse (10%)"); -BENCHMARK(BM_BitsetToString<32768>)->Arg(10)->Name("BM_BitsetToString<32768>/Sparse (10%)"); -BENCHMARK(BM_BitsetToString<65536>)->Arg(10)->Name("BM_BitsetToString<65536>/Sparse (10%)"); -BENCHMARK(BM_BitsetToString<131072>)->Arg(10)->Name("BM_BitsetToString<131072>/Sparse (10%)"); -BENCHMARK(BM_BitsetToString<262144>)->Arg(10)->Name("BM_BitsetToString<262144>/Sparse (10%)"); -BENCHMARK(BM_BitsetToString<524288>)->Arg(10)->Name("BM_BitsetToString<524288>/Sparse (10%)"); BENCHMARK(BM_BitsetToString<1048576>)->Arg(10)->Name("BM_BitsetToString<1048576>/Sparse (10%)"); // 1 << 20 // Dense bitset BENCHMARK(BM_BitsetToString<32>)->Arg(90)->Name("BM_BitsetToString<32>/Dense (90%)"); BENCHMARK(BM_BitsetToString<64>)->Arg(90)->Name("BM_BitsetToString<64>/Dense (90%)"); -BENCHMARK(BM_BitsetToString<128>)->Arg(90)->Name("BM_BitsetToString<128>/Dense (90%)"); -BENCHMARK(BM_BitsetToString<256>)->Arg(90)->Name("BM_BitsetToString<256>/Dense (90%)"); -BENCHMARK(BM_BitsetToString<512>)->Arg(90)->Name("BM_BitsetToString<512>/Dense (90%)"); -BENCHMARK(BM_BitsetToString<1024>)->Arg(90)->Name("BM_BitsetToString<1024>/Dense (90%)"); -BENCHMARK(BM_BitsetToString<2048>)->Arg(90)->Name("BM_BitsetToString<2048>/Dense (90%)"); -BENCHMARK(BM_BitsetToString<4096>)->Arg(90)->Name("BM_BitsetToString<4096>/Dense (90%)"); BENCHMARK(BM_BitsetToString<8192>)->Arg(90)->Name("BM_BitsetToString<8192>/Dense (90%)"); -BENCHMARK(BM_BitsetToString<16384>)->Arg(90)->Name("BM_BitsetToString<16384>/Dense (90%)"); -BENCHMARK(BM_BitsetToString<32768>)->Arg(90)->Name("BM_BitsetToString<32768>/Dense (90%)"); -BENCHMARK(BM_BitsetToString<65536>)->Arg(90)->Name("BM_BitsetToString<65536>/Dense (90%)"); -BENCHMARK(BM_BitsetToString<131072>)->Arg(90)->Name("BM_BitsetToString<131072>/Dense (90%)"); -BENCHMARK(BM_BitsetToString<262144>)->Arg(90)->Name("BM_BitsetToString<262144>/Dense (90%)"); -BENCHMARK(BM_BitsetToString<524288>)->Arg(90)->Name("BM_BitsetToString<524288>/Dense (90%)"); BENCHMARK(BM_BitsetToString<1048576>)->Arg(90)->Name("BM_BitsetToString<1048576>/Dense (90%)"); // 1 << 20 // Uniform bitset BENCHMARK(BM_BitsetToString<32>)->Arg(50)->Name("BM_BitsetToString<32>/Uniform (50%)"); BENCHMARK(BM_BitsetToString<64>)->Arg(50)->Name("BM_BitsetToString<64>/Uniform (50%)"); -BENCHMARK(BM_BitsetToString<128>)->Arg(50)->Name("BM_BitsetToString<128>/Uniform (50%)"); -BENCHMARK(BM_BitsetToString<256>)->Arg(50)->Name("BM_BitsetToString<256>/Uniform (50%)"); -BENCHMARK(BM_BitsetToString<512>)->Arg(50)->Name("BM_BitsetToString<512>/Uniform (50%)"); -BENCHMARK(BM_BitsetToString<1024>)->Arg(50)->Name("BM_BitsetToString<1024>/Uniform (50%)"); -BENCHMARK(BM_BitsetToString<2048>)->Arg(50)->Name("BM_BitsetToString<2048>/Uniform (50%)"); -BENCHMARK(BM_BitsetToString<4096>)->Arg(50)->Name("BM_BitsetToString<4096>/Uniform (50%)"); BENCHMARK(BM_BitsetToString<8192>)->Arg(50)->Name("BM_BitsetToString<8192>/Uniform (50%)"); -BENCHMARK(BM_BitsetToString<16384>)->Arg(50)->Name("BM_BitsetToString<16384>/Uniform (50%)"); -BENCHMARK(BM_BitsetToString<32768>)->Arg(50)->Name("BM_BitsetToString<32768>/Uniform (50%)"); -BENCHMARK(BM_BitsetToString<65536>)->Arg(50)->Name("BM_BitsetToString<65536>/Uniform (50%)"); -BENCHMARK(BM_BitsetToString<131072>)->Arg(50)->Name("BM_BitsetToString<131072>/Uniform (50%)"); -BENCHMARK(BM_BitsetToString<262144>)->Arg(50)->Name("BM_BitsetToString<262144>/Uniform (50%)"); -BENCHMARK(BM_BitsetToString<524288>)->Arg(50)->Name("BM_BitsetToString<524288>/Uniform (50%)"); BENCHMARK(BM_BitsetToString<1048576>)->Arg(50)->Name("BM_BitsetToString<1048576>/Uniform (50%)"); // 1 << 20 static void BM_Bitset_ctor_ull(benchmark::State& state) { - unsigned long long val = (1ULL << state.range(0)) - 1; + unsigned long long val = 1; for (auto _ : state) { + benchmark::DoNotOptimize(val); std::bitset<128> b(val); benchmark::DoNotOptimize(b); } } -BENCHMARK(BM_Bitset_ctor_ull)->DenseRange(1, 63); +BENCHMARK(BM_Bitset_ctor_ull); BENCHMARK_MAIN(); diff --git a/libcxx/test/benchmarks/to_chars.bench.cpp b/libcxx/test/benchmarks/to_chars.bench.cpp index cee969cd06e1..58df8f21399d 100644 --- a/libcxx/test/benchmarks/to_chars.bench.cpp +++ b/libcxx/test/benchmarks/to_chars.bench.cpp @@ -30,7 +30,7 @@ static void BM_to_chars_good(benchmark::State& state) { for (auto value : input) benchmark::DoNotOptimize(std::to_chars(buffer, &buffer[128], value, base)); } -BENCHMARK(BM_to_chars_good)->DenseRange(2, 36, 1); +BENCHMARK(BM_to_chars_good)->Arg(2)->Arg(8)->Arg(10)->Arg(16)->Arg(23); static void BM_to_chars_bad(benchmark::State& state) { char buffer[128]; @@ -50,6 +50,6 @@ static void BM_to_chars_bad(benchmark::State& state) { for (auto element : data) benchmark::DoNotOptimize(std::to_chars(buffer, &buffer[element.size], element.value, base)); } -BENCHMARK(BM_to_chars_bad)->DenseRange(2, 36, 1); +BENCHMARK(BM_to_chars_bad)->Arg(2)->Arg(8)->Arg(10)->Arg(16)->Arg(23); BENCHMARK_MAIN();