Skip to content

Commit c5e9ab3

Browse files
committed
Remove some benchmarks bailing out at 25% where that doesn't provide additional information
1 parent 2162665 commit c5e9ab3

File tree

3 files changed

+6
-125
lines changed

3 files changed

+6
-125
lines changed

libcxx/test/benchmarks/algorithms/nonmodifying/any_all_none_of.bench.cpp

Lines changed: 2 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -39,62 +39,8 @@ int main(int argc, char** argv) {
3939
return !std::ranges::none_of(first, last, pred);
4040
};
4141

42-
// Benchmark {std,ranges}::{any_of,all_of,none_of} where we bail out early
43-
// (after visiting 25% of the elements).
44-
{
45-
auto bm = []<class Container>(std::string name, auto any_of) {
46-
benchmark::RegisterBenchmark(
47-
name,
48-
[any_of](auto& st) {
49-
std::size_t const size = st.range(0);
50-
using ValueType = typename Container::value_type;
51-
ValueType x = Generate<ValueType>::random();
52-
ValueType y = random_different_from({x});
53-
Container c(size, x);
54-
*std::next(c.begin(), size / 4) = y; // bail out after the first 25% elements
55-
56-
for (auto _ : st) {
57-
benchmark::DoNotOptimize(c);
58-
auto result = any_of(c.begin(), c.end(), [&](auto element) {
59-
benchmark::DoNotOptimize(element);
60-
return element == y;
61-
});
62-
benchmark::DoNotOptimize(result);
63-
}
64-
})
65-
->Arg(8)
66-
->Arg(32)
67-
->Arg(50) // non power-of-two
68-
->Arg(8192)
69-
->Arg(32768);
70-
};
71-
72-
// any_of
73-
bm.operator()<std::vector<int>>("std::any_of(vector<int>) (bail 25%)", std_any_of);
74-
bm.operator()<std::deque<int>>("std::any_of(deque<int>) (bail 25%)", std_any_of);
75-
bm.operator()<std::list<int>>("std::any_of(list<int>) (bail 25%)", std_any_of);
76-
bm.operator()<std::vector<int>>("rng::any_of(vector<int>) (bail 25%)", std::ranges::any_of);
77-
bm.operator()<std::deque<int>>("rng::any_of(deque<int>) (bail 25%)", std::ranges::any_of);
78-
bm.operator()<std::list<int>>("rng::any_of(list<int>) (bail 25%)", std::ranges::any_of);
79-
80-
// all_of
81-
bm.operator()<std::vector<int>>("std::all_of(vector<int>) (bail 25%)", std_all_of);
82-
bm.operator()<std::deque<int>>("std::all_of(deque<int>) (bail 25%)", std_all_of);
83-
bm.operator()<std::list<int>>("std::all_of(list<int>) (bail 25%)", std_all_of);
84-
bm.operator()<std::vector<int>>("rng::all_of(vector<int>) (bail 25%)", ranges_all_of);
85-
bm.operator()<std::deque<int>>("rng::all_of(deque<int>) (bail 25%)", ranges_all_of);
86-
bm.operator()<std::list<int>>("rng::all_of(list<int>) (bail 25%)", ranges_all_of);
87-
88-
// none_of
89-
bm.operator()<std::vector<int>>("std::none_of(vector<int>) (bail 25%)", std_none_of);
90-
bm.operator()<std::deque<int>>("std::none_of(deque<int>) (bail 25%)", std_none_of);
91-
bm.operator()<std::list<int>>("std::none_of(list<int>) (bail 25%)", std_none_of);
92-
bm.operator()<std::vector<int>>("rng::none_of(vector<int>) (bail 25%)", ranges_none_of);
93-
bm.operator()<std::deque<int>>("rng::none_of(deque<int>) (bail 25%)", ranges_none_of);
94-
bm.operator()<std::list<int>>("rng::none_of(list<int>) (bail 25%)", ranges_none_of);
95-
}
96-
97-
// Benchmark {std,ranges}::{any_of,all_of,none_of} where we process the whole sequence.
42+
// Benchmark {std,ranges}::{any_of,all_of,none_of} where we process the whole sequence,
43+
// which is the worst case.
9844
{
9945
auto bm = []<class Container>(std::string name, auto any_of) {
10046
benchmark::RegisterBenchmark(

libcxx/test/benchmarks/algorithms/nonmodifying/contains.bench.cpp

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -19,40 +19,8 @@
1919
#include "../../GenerateInput.h"
2020

2121
int main(int argc, char** argv) {
22-
// Benchmark ranges::contains where we bail out early (after visiting 25% of the elements).
23-
{
24-
auto bm = []<class Container>(std::string name) {
25-
benchmark::RegisterBenchmark(
26-
name,
27-
[](auto& st) {
28-
std::size_t const size = st.range(0);
29-
using ValueType = typename Container::value_type;
30-
ValueType x = Generate<ValueType>::random();
31-
ValueType y = random_different_from({x});
32-
Container c(size, x);
33-
*std::next(c.begin(), size / 4) = y; // bail out after checking 25% of values
34-
auto first = c.begin();
35-
auto last = c.end();
36-
37-
for (auto _ : st) {
38-
benchmark::DoNotOptimize(c);
39-
benchmark::DoNotOptimize(y);
40-
auto result = std::ranges::contains(first, last, y);
41-
benchmark::DoNotOptimize(result);
42-
}
43-
})
44-
->Arg(8)
45-
->Arg(32)
46-
->Arg(50) // non power-of-two
47-
->Arg(8192)
48-
->Arg(1 << 20);
49-
};
50-
bm.operator()<std::vector<int>>("rng::contains(vector<int>) (bail 25%)");
51-
bm.operator()<std::deque<int>>("rng::contains(deque<int>) (bail 25%)");
52-
bm.operator()<std::list<int>>("rng::contains(list<int>) (bail 25%)");
53-
}
54-
55-
// Benchmark ranges::contains where we process the whole sequence.
22+
// Benchmark ranges::contains where we process the whole sequence, which is the
23+
// worst case.
5624
{
5725
auto bm = []<class Container>(std::string name) {
5826
benchmark::RegisterBenchmark(

libcxx/test/benchmarks/algorithms/nonmodifying/contains_subrange.bench.cpp

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -19,41 +19,8 @@
1919
#include "../../GenerateInput.h"
2020

2121
int main(int argc, char** argv) {
22-
// Benchmark ranges::contains_subrange where we find our target starting at 25% of the elements
23-
{
24-
auto bm = []<class Container>(std::string name) {
25-
benchmark::RegisterBenchmark(
26-
name,
27-
[](auto& st) {
28-
std::size_t const size = st.range(0);
29-
using ValueType = typename Container::value_type;
30-
ValueType x = Generate<ValueType>::random();
31-
ValueType y = random_different_from({x});
32-
Container c(size, x);
33-
Container subrange(size / 10, y); // subrange of length 10% of the full range
34-
35-
// At 25% of the range, put the subrange we're going to find
36-
std::ranges::copy(subrange, std::next(c.begin(), c.size() / 4));
37-
38-
for (auto _ : st) {
39-
benchmark::DoNotOptimize(c);
40-
benchmark::DoNotOptimize(subrange);
41-
auto result = std::ranges::contains_subrange(c, subrange);
42-
benchmark::DoNotOptimize(result);
43-
}
44-
})
45-
->Arg(16)
46-
->Arg(32)
47-
->Arg(50) // non power-of-two
48-
->Arg(8192)
49-
->Arg(1 << 20);
50-
};
51-
bm.operator()<std::vector<int>>("rng::contains_subrange(vector<int>) (bail 25%)");
52-
bm.operator()<std::deque<int>>("rng::contains_subrange(deque<int>) (bail 25%)");
53-
bm.operator()<std::list<int>>("rng::contains_subrange(list<int>) (bail 25%)");
54-
}
55-
56-
// Benchmark ranges::contains_subrange where we never find our target
22+
// Benchmark ranges::contains_subrange where we never find our target, which is the
23+
// worst case.
5724
{
5825
auto bm = []<class Container>(std::string name) {
5926
benchmark::RegisterBenchmark(

0 commit comments

Comments
 (0)