|
1 | 1 | #include "beman/inplace_vector/inplace_vector.hpp" |
| 2 | + |
2 | 3 | #include <benchmark/benchmark.h> |
3 | 4 | #include <cstddef> |
| 5 | +#include <iostream> |
4 | 6 | #include <vector> |
5 | 7 |
|
6 | 8 | using beman::inplace_vector; |
7 | 9 |
|
8 | | -template <std::size_t Capacity> |
9 | | -void InplaceVectorPushback(benchmark::State &state) { |
10 | | - for (auto _ : state) { |
11 | | - using IV = inplace_vector<int, Capacity>; |
| 10 | +template <std::size_t Capacity> void InplaceVector(benchmark::State &state) { |
| 11 | + using IV = inplace_vector<int, Capacity>; |
| 12 | + IV v; |
| 13 | + v.reserve(Capacity); |
12 | 14 |
|
13 | | - IV v; |
| 15 | + while (state.KeepRunningBatch(Capacity)) { |
| 16 | + // while (state.KeepRunning()) { |
| 17 | + v.clear(); |
14 | 18 | for (typename IV::size_type i = 0; i < Capacity; ++i) |
15 | 19 | v.push_back(i); |
16 | 20 | benchmark::DoNotOptimize(v); |
17 | 21 | } |
18 | 22 | } |
19 | 23 |
|
20 | | -template <std::size_t Capacity> void VetorPushback(benchmark::State &state) { |
21 | | - for (auto _ : state) { |
22 | | - using IV = std::vector<int>; |
| 24 | +template <std::size_t Capacity> void StdVector(benchmark::State &state) { |
| 25 | + using IV = std::vector<int>; |
| 26 | + IV v; |
| 27 | + v.reserve(Capacity); |
23 | 28 |
|
24 | | - IV v; |
25 | | - v.reserve(Capacity); |
| 29 | + while (state.KeepRunningBatch(Capacity)) { |
| 30 | + // while (state.KeepRunning()) { |
| 31 | + v.clear(); |
26 | 32 | for (typename IV::size_type i = 0; i < Capacity; ++i) |
27 | 33 | v.push_back(i); |
28 | 34 | benchmark::DoNotOptimize(v); |
29 | 35 | } |
30 | 36 | } |
31 | 37 |
|
32 | | -BENCHMARK_TEMPLATE(InplaceVectorPushback, 128); |
33 | | -BENCHMARK_TEMPLATE(InplaceVectorPushback, 256); |
34 | | -BENCHMARK_TEMPLATE(InplaceVectorPushback, 512); |
35 | | -BENCHMARK_TEMPLATE(InplaceVectorPushback, 1024); |
| 38 | +template <typename V, bool use_reserve> struct Meta { |
| 39 | + using Vector = V; |
| 40 | + constexpr static bool Reserve = use_reserve; |
| 41 | +}; |
| 42 | + |
| 43 | +#define BENCHMARK_VEC_L1(ARG) \ |
| 44 | + BENCHMARK_TEMPLATE(ARG, 3); \ |
| 45 | + BENCHMARK_TEMPLATE(ARG, 7); \ |
| 46 | + BENCHMARK_TEMPLATE(ARG, 15); \ |
| 47 | + BENCHMARK_TEMPLATE(ARG, 31); \ |
| 48 | + BENCHMARK_TEMPLATE(ARG, 63); \ |
| 49 | + BENCHMARK_TEMPLATE(ARG, 127); \ |
| 50 | + BENCHMARK_TEMPLATE(ARG, 255); \ |
| 51 | + BENCHMARK_TEMPLATE(ARG, 511); \ |
| 52 | + BENCHMARK_TEMPLATE(ARG, 1023); |
| 53 | + |
| 54 | +#define BENCHMARK_VEC_L2_L3(ARG) \ |
| 55 | + BENCHMARK_TEMPLATE(ARG, 1 << 10); \ |
| 56 | + BENCHMARK_TEMPLATE(ARG, 1 << 11); \ |
| 57 | + BENCHMARK_TEMPLATE(ARG, 1 << 12); \ |
| 58 | + BENCHMARK_TEMPLATE(ARG, 1 << 14); \ |
| 59 | + BENCHMARK_TEMPLATE(ARG, 1 << 15); \ |
| 60 | + BENCHMARK_TEMPLATE(ARG, 1 << 16); \ |
| 61 | + BENCHMARK_TEMPLATE(ARG, 1 << 17); \ |
| 62 | + BENCHMARK_TEMPLATE(ARG, 1 << 18); |
| 63 | + |
| 64 | +BENCHMARK_VEC_L1(InplaceVector); |
| 65 | +BENCHMARK_VEC_L1(StdVector); |
36 | 66 |
|
37 | | -BENCHMARK_TEMPLATE(VetorPushback, 128); |
38 | | -BENCHMARK_TEMPLATE(VetorPushback, 256); |
39 | | -BENCHMARK_TEMPLATE(VetorPushback, 512); |
40 | | -BENCHMARK_TEMPLATE(VetorPushback, 1024); |
| 67 | +BENCHMARK_VEC_L2_L3(InplaceVector); |
| 68 | +BENCHMARK_VEC_L2_L3(StdVector); |
41 | 69 |
|
42 | 70 | BENCHMARK_MAIN(); |
0 commit comments