@@ -21,28 +21,26 @@ auto DoNotOptimize(auto && value) -> void {
2121 benchmark::DoNotOptimize (value);
2222}
2323
24-
25-
2624template <std::size_t size>
2725struct 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+ }
3130 }
3231 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;
3533};
3634
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 {
3937 auto engine = std::mt19937 (std::random_device ()());
4038 auto value_distribution = std::uniform_int_distribution<unsigned >();
4139 using container_t = containers::vector<data<data_size>>;
40+ auto container = container_t ();
4241 using size_type = containers::range_size_t <container_t >;
4342 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);
4644
4745 for (auto _ : state) {
4846 containers::copy (
@@ -60,10 +58,9 @@ auto benchmark_impl(benchmark::State & state) -> void {
6058 }
6159}
6260
63- #if 0
6461template <std::size_t data_size>
6562auto 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); } );
6764}
6865
6966template <std::size_t data_size>
@@ -76,8 +73,6 @@ auto benchmark_standard(benchmark::State & state) -> void {
7673 benchmark_impl<data_size>(state, containers::sort);
7774}
7875
79- #endif
80-
8176constexpr auto insertion_sort = [](containers::range auto && r) -> void {
8277 auto const first = containers::begin (r);
8378 auto const last = containers::end (r);
@@ -92,28 +87,21 @@ constexpr auto insertion_sort = [](containers::range auto && r) -> void {
9287 }
9388};
9489
95- #if 0
96-
9790template <std::size_t data_size>
9891auto benchmark_insertion_sort (benchmark::State & state) -> void {
9992 benchmark_impl<data_size>(state, insertion_sort);
10093}
10194
102- #endif
103-
104- using containers::chunked_insertion_sort;
105- using containers::new_sort;
106- using containers::sort;
10795#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 )
112100
113101BENCHMARK_ALL(1 );
114102BENCHMARK_ALL (4 );
115103BENCHMARK_ALL (8 );
116104BENCHMARK_ALL (64 );
117105BENCHMARK_ALL (65 );
118106
119- } // namespace
107+ } // namespace
0 commit comments