Skip to content

Commit 48c7c1e

Browse files
Run with small strings
1 parent 3ee1140 commit 48c7c1e

File tree

1 file changed

+79
-45
lines changed

1 file changed

+79
-45
lines changed

benchmarks/channel_benchmark.cpp

Lines changed: 79 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -12,60 +12,82 @@
1212
Results on release build with CPU scaling disabled
1313
c++ (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0
1414
15-
2025-06-17T18:36:15+03:00
15+
2025-06-17T19:39:12+03:00
1616
Running ./benchmarks/channel_benchmark
17-
Run on (8 X 3998.1 MHz CPU s)
17+
Run on (8 X 4000.11 MHz CPU s)
1818
CPU Caches:
1919
L1 Data 32 KiB (x4)
2020
L1 Instruction 32 KiB (x4)
2121
L2 Unified 256 KiB (x4)
2222
L3 Unified 8192 KiB (x1)
23-
Load Average: 1.39, 1.23, 0.98
24-
----------------------------------------------------------------------------------------------------------------------------------------------------
25-
Benchmark Time CPU Iterations
26-
----------------------------------------------------------------------------------------------------------------------------------------------------
27-
bench_dynamic_storage<std::string, msd::queue_storage<std::string>, string_input>_mean 1135532785 ns 1102075601 ns 10
28-
bench_dynamic_storage<std::string, msd::queue_storage<std::string>, string_input>_median 1126981431 ns 1096525909 ns 10
29-
bench_dynamic_storage<std::string, msd::queue_storage<std::string>, string_input>_stddev 16748064 ns 13438856 ns 10
30-
bench_dynamic_storage<std::string, msd::queue_storage<std::string>, string_input>_cv 1.47 % 1.22 % 10
31-
bench_dynamic_storage<std::string, msd::vector_storage<std::string>, string_input>_mean 1349502195 ns 1312254745 ns 10
32-
bench_dynamic_storage<std::string, msd::vector_storage<std::string>, string_input>_median 1343862530 ns 1309941538 ns 10
33-
bench_dynamic_storage<std::string, msd::vector_storage<std::string>, string_input>_stddev 24872877 ns 17496752 ns 10
34-
bench_dynamic_storage<std::string, msd::vector_storage<std::string>, string_input>_cv 1.84 % 1.33 % 10
35-
bench_static_storage<std::string, msd::array_storage<std::string, channel_capacity>, string_input>_mean 1116143998 ns 1083327478 ns 10
36-
bench_static_storage<std::string, msd::array_storage<std::string, channel_capacity>, string_input>_median 1100725718 ns 1069640108 ns 10
37-
bench_static_storage<std::string, msd::array_storage<std::string, channel_capacity>, string_input>_stddev 27816556 ns 24827916 ns 10
38-
bench_static_storage<std::string, msd::array_storage<std::string, channel_capacity>, string_input>_cv 2.49 % 2.29 % 10
39-
bench_dynamic_storage<data, msd::queue_storage<data>, data_input>_mean 110 ns 106 ns 10
40-
bench_dynamic_storage<data, msd::queue_storage<data>, data_input>_median 110 ns 106 ns 10
41-
bench_dynamic_storage<data, msd::queue_storage<data>, data_input>_stddev 0.279 ns 0.298 ns 10
42-
bench_dynamic_storage<data, msd::queue_storage<data>, data_input>_cv 0.25 % 0.28 % 10
43-
bench_dynamic_storage<data, msd::vector_storage<data>, data_input>_mean 274 ns 266 ns 10
44-
bench_dynamic_storage<data, msd::vector_storage<data>, data_input>_median 276 ns 267 ns 10
45-
bench_dynamic_storage<data, msd::vector_storage<data>, data_input>_stddev 11.2 ns 10.9 ns 10
46-
bench_dynamic_storage<data, msd::vector_storage<data>, data_input>_cv 4.07 % 4.11 % 10
47-
bench_static_storage<data, msd::array_storage<data, channel_capacity>, data_input>_mean 104 ns 102 ns 10
48-
bench_static_storage<data, msd::array_storage<data, channel_capacity>, data_input>_median 104 ns 102 ns 10
49-
bench_static_storage<data, msd::array_storage<data, channel_capacity>, data_input>_stddev 0.619 ns 0.304 ns 10
50-
bench_static_storage<data, msd::array_storage<data, channel_capacity>, data_input>_cv 0.60 % 0.30 % 10
23+
Load Average: 1.25, 1.24, 1.17
24+
------------------------------------------------------------------------------------------------------------------------------------------------------------
25+
Benchmark Time CPU Iterations
26+
------------------------------------------------------------------------------------------------------------------------------------------------------------
27+
bench_dynamic_storage<std::string, msd::queue_storage<std::string>, string_input<100000>>_mean 56.0 ns 31.7 ns 10
28+
bench_dynamic_storage<std::string, msd::queue_storage<std::string>, string_input<100000>>_median 55.1 ns 31.2 ns 10
29+
bench_dynamic_storage<std::string, msd::queue_storage<std::string>, string_input<100000>>_stddev 1.98 ns 0.973 ns 10
30+
bench_dynamic_storage<std::string, msd::queue_storage<std::string>, string_input<100000>>_cv 3.53 % 3.07 % 10
31+
bench_dynamic_storage<std::string, msd::queue_storage<std::string>, string_input<100000>>_max 60.6 ns 33.9 ns 10
32+
bench_dynamic_storage<std::string, msd::vector_storage<std::string>, string_input<100000>>_mean 974389204 ns 511590696 ns 10
33+
bench_dynamic_storage<std::string, msd::vector_storage<std::string>, string_input<100000>>_median 970045807 ns 506940233 ns 10
34+
bench_dynamic_storage<std::string, msd::vector_storage<std::string>, string_input<100000>>_stddev 19792287 ns 21877096 ns 10
35+
bench_dynamic_storage<std::string, msd::vector_storage<std::string>, string_input<100000>>_cv 2.03 % 4.28 % 10
36+
bench_dynamic_storage<std::string, msd::vector_storage<std::string>, string_input<100000>>_max 1014383413 ns 558581282 ns 10
37+
bench_static_storage<std::string, msd::array_storage<std::string, channel_capacity>, string_input<100000>>_mean 43.6 ns 26.5 ns 10
38+
bench_static_storage<std::string, msd::array_storage<std::string, channel_capacity>, string_input<100000>>_median 43.4 ns 26.4 ns 10
39+
bench_static_storage<std::string, msd::array_storage<std::string, channel_capacity>, string_input<100000>>_stddev 1.04 ns 0.762 ns 10
40+
bench_static_storage<std::string, msd::array_storage<std::string, channel_capacity>, string_input<100000>>_cv 2.39 % 2.88 % 10
41+
bench_static_storage<std::string, msd::array_storage<std::string, channel_capacity>, string_input<100000>>_max 45.8 ns 27.5 ns 10
42+
bench_dynamic_storage<std::string, msd::queue_storage<std::string>, string_input<1000>>_mean 21.0 ns 20.6 ns 10
43+
bench_dynamic_storage<std::string, msd::queue_storage<std::string>, string_input<1000>>_median 21.0 ns 20.6 ns 10
44+
bench_dynamic_storage<std::string, msd::queue_storage<std::string>, string_input<1000>>_stddev 0.056 ns 0.052 ns 10
45+
bench_dynamic_storage<std::string, msd::queue_storage<std::string>, string_input<1000>>_cv 0.27 % 0.25 % 10
46+
bench_dynamic_storage<std::string, msd::queue_storage<std::string>, string_input<1000>>_max 21.1 ns 20.7 ns 10
47+
bench_dynamic_storage<std::string, msd::vector_storage<std::string>, string_input<1000>>_mean 21.8 ns 21.5 ns 10
48+
bench_dynamic_storage<std::string, msd::vector_storage<std::string>, string_input<1000>>_median 21.7 ns 21.4 ns 10
49+
bench_dynamic_storage<std::string, msd::vector_storage<std::string>, string_input<1000>>_stddev 0.413 ns 0.396 ns 10
50+
bench_dynamic_storage<std::string, msd::vector_storage<std::string>, string_input<1000>>_cv 1.90 % 1.84 % 10
51+
bench_dynamic_storage<std::string, msd::vector_storage<std::string>, string_input<1000>>_max 22.6 ns 22.3 ns 10
52+
bench_static_storage<std::string, msd::array_storage<std::string, channel_capacity>, string_input<1000>>_mean 18.7 ns 18.7 ns 10
53+
bench_static_storage<std::string, msd::array_storage<std::string, channel_capacity>, string_input<1000>>_median 18.7 ns 18.7 ns 10
54+
bench_static_storage<std::string, msd::array_storage<std::string, channel_capacity>, string_input<1000>>_stddev 0.051 ns 0.049 ns 10
55+
bench_static_storage<std::string, msd::array_storage<std::string, channel_capacity>, string_input<1000>>_cv 0.27 % 0.26 % 10
56+
bench_static_storage<std::string, msd::array_storage<std::string, channel_capacity>, string_input<1000>>_max 18.8 ns 18.8 ns 10
57+
bench_dynamic_storage<data, msd::queue_storage<data>, struct_input>_mean 19.5 ns 18.9 ns 10
58+
bench_dynamic_storage<data, msd::queue_storage<data>, struct_input>_median 19.5 ns 18.9 ns 10
59+
bench_dynamic_storage<data, msd::queue_storage<data>, struct_input>_stddev 0.053 ns 0.063 ns 10
60+
bench_dynamic_storage<data, msd::queue_storage<data>, struct_input>_cv 0.27 % 0.33 % 10
61+
bench_dynamic_storage<data, msd::queue_storage<data>, struct_input>_max 19.6 ns 19.1 ns 10
62+
bench_dynamic_storage<data, msd::vector_storage<data>, struct_input>_mean 38.3 ns 37.1 ns 10
63+
bench_dynamic_storage<data, msd::vector_storage<data>, struct_input>_median 37.4 ns 36.2 ns 10
64+
bench_dynamic_storage<data, msd::vector_storage<data>, struct_input>_stddev 2.41 ns 2.37 ns 10
65+
bench_dynamic_storage<data, msd::vector_storage<data>, struct_input>_cv 6.28 % 6.38 % 10
66+
bench_dynamic_storage<data, msd::vector_storage<data>, struct_input>_max 44.7 ns 43.4 ns 10
67+
bench_static_storage<data, msd::array_storage<data, channel_capacity>, struct_input>_mean 17.7 ns 17.5 ns 10
68+
bench_static_storage<data, msd::array_storage<data, channel_capacity>, struct_input>_median 17.6 ns 17.4 ns 10
69+
bench_static_storage<data, msd::array_storage<data, channel_capacity>, struct_input>_stddev 0.070 ns 0.082 ns 10
70+
bench_static_storage<data, msd::array_storage<data, channel_capacity>, struct_input>_cv 0.40 % 0.47 % 10
71+
bench_static_storage<data, msd::array_storage<data, channel_capacity>, struct_input>_max 17.8 ns 17.6 ns 10
5172
*/
5273
// clang-format on
5374

5475
static constexpr std::size_t channel_capacity = 1024;
5576
static constexpr std::size_t number_of_inputs = 100000;
5677

78+
template <std::size_t Size>
79+
struct string_input {
80+
static std::string make() { return std::string(Size, 'c'); }
81+
};
82+
5783
struct data {
5884
std::array<int, 1000> data{};
5985
};
6086

61-
struct data_input {
87+
struct struct_input {
6288
static data make() { return data{}; }
6389
};
6490

65-
struct string_input {
66-
static std::string make() { return std::string(100000, 'c'); }
67-
};
68-
6991
template <typename T, typename Storage, typename Input>
7092
static void bench_dynamic_storage(benchmark::State& state)
7193
{
@@ -80,8 +102,9 @@ static void bench_dynamic_storage(benchmark::State& state)
80102
});
81103

82104
for (auto _ : state) {
83-
for (auto value : channel) {
84-
benchmark::DoNotOptimize(value);
105+
for (auto& value : channel) {
106+
volatile auto* do_not_optimize = &value;
107+
(void)do_not_optimize;
85108
}
86109
}
87110

@@ -102,19 +125,30 @@ static void bench_static_storage(benchmark::State& state)
102125
});
103126

104127
for (auto _ : state) {
105-
for (auto value : channel) {
106-
benchmark::DoNotOptimize(value);
128+
for (auto& value : channel) {
129+
volatile auto* do_not_optimize = &value;
130+
(void)do_not_optimize;
107131
}
108132
}
109133

110134
producer.join();
111135
}
112136

113-
BENCHMARK_TEMPLATE(bench_dynamic_storage, std::string, msd::queue_storage<std::string>, string_input);
114-
BENCHMARK_TEMPLATE(bench_dynamic_storage, std::string, msd::vector_storage<std::string>, string_input);
115-
BENCHMARK_TEMPLATE(bench_static_storage, std::string, msd::array_storage<std::string, channel_capacity>, string_input);
116-
BENCHMARK_TEMPLATE(bench_dynamic_storage, data, msd::queue_storage<data>, data_input);
117-
BENCHMARK_TEMPLATE(bench_dynamic_storage, data, msd::vector_storage<data>, data_input);
118-
BENCHMARK_TEMPLATE(bench_static_storage, data, msd::array_storage<data, channel_capacity>, data_input);
137+
#define BENCH(...) \
138+
BENCHMARK_TEMPLATE(__VA_ARGS__)->ComputeStatistics("max", [](const std::vector<double>& v) { \
139+
return *std::max_element(v.begin(), v.end()); \
140+
})
141+
142+
BENCH(bench_dynamic_storage, std::string, msd::queue_storage<std::string>, string_input<100000>);
143+
BENCH(bench_dynamic_storage, std::string, msd::vector_storage<std::string>, string_input<100000>);
144+
BENCH(bench_static_storage, std::string, msd::array_storage<std::string, channel_capacity>, string_input<100000>);
145+
146+
BENCH(bench_dynamic_storage, std::string, msd::queue_storage<std::string>, string_input<1000>);
147+
BENCH(bench_dynamic_storage, std::string, msd::vector_storage<std::string>, string_input<1000>);
148+
BENCH(bench_static_storage, std::string, msd::array_storage<std::string, channel_capacity>, string_input<1000>);
149+
150+
BENCH(bench_dynamic_storage, data, msd::queue_storage<data>, struct_input);
151+
BENCH(bench_dynamic_storage, data, msd::vector_storage<data>, struct_input);
152+
BENCH(bench_static_storage, data, msd::array_storage<data, channel_capacity>, struct_input);
119153

120154
BENCHMARK_MAIN();

0 commit comments

Comments
 (0)