@@ -21,26 +21,28 @@ auto DoNotOptimize(auto && value) -> void {
21
21
benchmark::DoNotOptimize (value);
22
22
}
23
23
24
+
25
+
24
26
template <std::size_t size>
25
27
struct 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
+ {
30
31
}
31
32
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;
33
35
};
34
36
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 {
37
39
auto engine = std::mt19937 (std::random_device ()());
38
40
auto value_distribution = std::uniform_int_distribution<unsigned >();
39
41
using container_t = containers::vector<data<data_size>>;
40
- auto container = container_t ();
41
42
using size_type = containers::range_size_t <container_t >;
42
43
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);
44
46
45
47
for (auto _ : state) {
46
48
containers::copy (
@@ -58,9 +60,10 @@ auto benchmark_impl(benchmark::State & state, auto function) -> void {
58
60
}
59
61
}
60
62
63
+ #if 0
61
64
template<std::size_t data_size>
62
65
auto 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);
64
67
}
65
68
66
69
template<std::size_t data_size>
@@ -73,6 +76,8 @@ auto benchmark_standard(benchmark::State & state) -> void {
73
76
benchmark_impl<data_size>(state, containers::sort);
74
77
}
75
78
79
+ #endif
80
+
76
81
constexpr auto insertion_sort = [](containers::range auto && r) -> void {
77
82
auto const first = containers::begin (r);
78
83
auto const last = containers::end (r);
@@ -87,16 +92,23 @@ constexpr auto insertion_sort = [](containers::range auto && r) -> void {
87
92
}
88
93
};
89
94
95
+ #if 0
96
+
90
97
template<std::size_t data_size>
91
98
auto benchmark_insertion_sort(benchmark::State & state) -> void {
92
99
benchmark_impl<data_size>(state, insertion_sort);
93
100
}
94
101
102
+ #endif
103
+
104
+ using containers::chunked_insertion_sort;
105
+ using containers::new_sort;
106
+ using containers::sort;
95
107
#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 )
100
112
101
113
BENCHMARK_ALL(1 );
102
114
BENCHMARK_ALL (4 );
0 commit comments