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
5475static constexpr std::size_t channel_capacity = 1024 ;
5576static 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+
5783struct 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-
6991template <typename T, typename Storage, typename Input>
7092static 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
120154BENCHMARK_MAIN ();
0 commit comments