@@ -21,28 +21,26 @@ auto DoNotOptimize(auto && value) -> void {
21
21
benchmark::DoNotOptimize (value);
22
22
}
23
23
24
-
25
-
26
24
template <std::size_t size>
27
25
struct data {
28
- constexpr explicit data (unsigned value):
29
- m(std::bit_cast<array_t >(value))
30
- {
26
+ constexpr explicit data (unsigned value) {
27
+ for (auto const n : containers::integer_range (bounded::constant<size>)) {
28
+ m[n] = static_cast <std::uint8_t >(value);
29
+ }
31
30
}
32
31
friend constexpr auto operator <=>(data const & lhs, data const & rhs) = default ;
33
- using array_t = containers::array<std::uint8_t , bounded::constant<size>>;
34
- array_t m;
32
+ containers::array<std::uint8_t , bounded::constant<size>> m;
35
33
};
36
34
37
- template <std::size_t data_size, auto function >
38
- auto benchmark_impl (benchmark::State & state) -> void {
35
+ template <std::size_t data_size>
36
+ auto benchmark_impl (benchmark::State & state, auto function ) -> void {
39
37
auto engine = std::mt19937 (std::random_device ()());
40
38
auto value_distribution = std::uniform_int_distribution<unsigned >();
41
39
using container_t = containers::vector<data<data_size>>;
40
+ auto container = container_t ();
42
41
using size_type = containers::range_size_t <container_t >;
43
42
auto const size = bounded::assume_in_range<size_type>(state.range (0 ));
44
- auto container = container_t ();
45
- containers::resize (container, size);
43
+ container.reserve (size);
46
44
47
45
for (auto _ : state) {
48
46
containers::copy (
@@ -60,10 +58,9 @@ auto benchmark_impl(benchmark::State & state) -> void {
60
58
}
61
59
}
62
60
63
- #if 0
64
61
template <std::size_t data_size>
65
62
auto benchmark_chunked_insertion_sort (benchmark::State & state) -> void {
66
- benchmark_impl<data_size>(state, containers::chunked_insertion_sort);
63
+ benchmark_impl<data_size>(state, []( auto & range) { return containers::chunked_insertion_sort (range); } );
67
64
}
68
65
69
66
template <std::size_t data_size>
@@ -76,8 +73,6 @@ auto benchmark_standard(benchmark::State & state) -> void {
76
73
benchmark_impl<data_size>(state, containers::sort);
77
74
}
78
75
79
- #endif
80
-
81
76
constexpr auto insertion_sort = [](containers::range auto && r) -> void {
82
77
auto const first = containers::begin (r);
83
78
auto const last = containers::end (r);
@@ -92,28 +87,21 @@ constexpr auto insertion_sort = [](containers::range auto && r) -> void {
92
87
}
93
88
};
94
89
95
- #if 0
96
-
97
90
template <std::size_t data_size>
98
91
auto benchmark_insertion_sort (benchmark::State & state) -> void {
99
92
benchmark_impl<data_size>(state, insertion_sort);
100
93
}
101
94
102
- #endif
103
-
104
- using containers::chunked_insertion_sort;
105
- using containers::new_sort;
106
- using containers::sort;
107
95
#define BENCHMARK_ALL (data_size ) \
108
- BENCHMARK (benchmark_impl <data_size, insertion_sort >)->DenseRange (1 , 5 , 1 )->Arg(16 )->Arg(25 )->Arg(64 )->Arg(128 ); \
109
- BENCHMARK (benchmark_impl <data_size, chunked_insertion_sort >)->DenseRange (1 , 5 , 1 )->Arg(16 )->Arg(25 )->Arg(64 )->Arg(128 ); \
110
- BENCHMARK (benchmark_impl <data_size, new_sort >)->DenseRange (1 , 5 , 1 )->Arg(16 )->Arg(25 )->Arg(64 )->Arg(128 ); \
111
- BENCHMARK (benchmark_impl <data_size, sort >)->DenseRange (1 , 5 , 1 )->Arg(16 )->Arg(25 )->Arg(64 )->Arg(128 )
96
+ BENCHMARK (benchmark_insertion_sort <data_size>)->DenseRange (1 , 5 , 1 )->Arg(16 )->Arg(25 )->Arg(64 )->Arg(128 ); \
97
+ BENCHMARK (benchmark_chunked_insertion_sort <data_size>)->DenseRange (1 , 5 , 1 )->Arg(16 )->Arg(25 )->Arg(64 )->Arg(128 ); \
98
+ BENCHMARK (benchmark_mine <data_size>)->DenseRange (1 , 5 , 1 )->Arg(16 )->Arg(25 )->Arg(64 )->Arg(128 ); \
99
+ BENCHMARK (benchmark_standard <data_size>)->DenseRange (1 , 5 , 1 )->Arg(16 )->Arg(25 )->Arg(64 )->Arg(128 )
112
100
113
101
BENCHMARK_ALL(1 );
114
102
BENCHMARK_ALL (4 );
115
103
BENCHMARK_ALL (8 );
116
104
BENCHMARK_ALL (64 );
117
105
BENCHMARK_ALL (65 );
118
106
119
- } // namespace
107
+ } // namespace
0 commit comments