@@ -21,26 +21,28 @@ auto DoNotOptimize(auto && value) -> void {
2121 benchmark::DoNotOptimize (value);
2222}
2323
24+
25+
2426template <std::size_t size>
2527struct data {
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- }
28+ constexpr explicit data (unsigned value):
29+ m(std::bit_cast<array_t >(value))
30+ {
3031 }
3132 friend constexpr auto operator <=>(data const & lhs, data const & rhs) = default ;
32- containers::array<std::uint8_t , bounded::constant<size>> m;
33+ using array_t = containers::array<std::uint8_t , bounded::constant<size>>;
34+ array_t m;
3335};
3436
35- template <std::size_t data_size>
36- auto benchmark_impl (benchmark::State & state, auto function ) -> void {
37+ template <std::size_t data_size, auto function >
38+ auto benchmark_impl (benchmark::State & state) -> void {
3739 auto engine = std::mt19937 (std::random_device ()());
3840 auto value_distribution = std::uniform_int_distribution<unsigned >();
3941 using container_t = containers::vector<data<data_size>>;
40- auto container = container_t ();
4142 using size_type = containers::range_size_t <container_t >;
4243 auto const size = bounded::assume_in_range<size_type>(state.range (0 ));
43- container.reserve (size);
44+ auto container = container_t ();
45+ containers::resize (container, size);
4446
4547 for (auto _ : state) {
4648 containers::copy (
@@ -58,9 +60,10 @@ auto benchmark_impl(benchmark::State & state, auto function) -> void {
5860 }
5961}
6062
63+ #if 0
6164template<std::size_t data_size>
6265auto benchmark_chunked_insertion_sort(benchmark::State & state) -> void {
63- benchmark_impl<data_size>(state, []( auto & range) { return containers::chunked_insertion_sort (range); } );
66+ benchmark_impl<data_size>(state, containers::chunked_insertion_sort);
6467}
6568
6669template<std::size_t data_size>
@@ -73,6 +76,8 @@ auto benchmark_standard(benchmark::State & state) -> void {
7376 benchmark_impl<data_size>(state, containers::sort);
7477}
7578
79+ #endif
80+
7681constexpr auto insertion_sort = [](containers::range auto && r) -> void {
7782 auto const first = containers::begin (r);
7883 auto const last = containers::end (r);
@@ -87,16 +92,23 @@ constexpr auto insertion_sort = [](containers::range auto && r) -> void {
8792 }
8893};
8994
95+ #if 0
96+
9097template<std::size_t data_size>
9198auto benchmark_insertion_sort(benchmark::State & state) -> void {
9299 benchmark_impl<data_size>(state, insertion_sort);
93100}
94101
102+ #endif
103+
104+ using containers::chunked_insertion_sort;
105+ using containers::new_sort;
106+ using containers::sort;
95107#define BENCHMARK_ALL (data_size ) \
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 )
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 )
100112
101113BENCHMARK_ALL(1 );
102114BENCHMARK_ALL (4 );
0 commit comments