15#include <benchmark/benchmark.h>
41static void BM_ASoAHelpersEmptySimplePairs(benchmark::State& state)
45 for (
auto _ :
state) {
48 for (
int i = 0;
i <
n - 1;
i++) {
49 for (
int j =
i + 1;
j <
n;
j++) {
53 benchmark::DoNotOptimize(
count);
61static void BM_ASoAHelpersEmptySimpleFives(benchmark::State& state)
65 for (
auto _ :
state) {
68 for (
int i = 0;
i <
n - 4;
i++) {
69 for (
int j =
i + 1;
j <
n - 3;
j++) {
70 for (
int k =
j + 1; k <
n - 2; k++) {
71 for (
int l = k + 1; l <
n - 1; l++) {
72 for (
int m = l + 1;
m <
n;
m++) {
79 benchmark::DoNotOptimize(
count);
87static void BM_ASoAHelpersNaiveSimplePairs(benchmark::State& state)
90 std::default_random_engine e1(1234567891);
91 std::uniform_real_distribution<float>
uniform_dist(0, 1);
94 auto rowWriter = builder.
persist<float, float,
float>({
"x",
"y",
"z"});
95 for (
auto i = 0;
i <
state.range(0); ++
i) {
104 for (
auto _ :
state) {
106 for (
auto t0 = tests.begin();
t0 + 1 != tests.end(); ++
t0) {
107 for (
auto t1 =
t0 + 1;
t1 != tests.end(); ++
t1) {
108 auto comb = std::make_tuple(
t0,
t1);
110 benchmark::DoNotOptimize(comb);
113 benchmark::DoNotOptimize(
count);
121static void BM_ASoAHelpersNaiveSimpleFives(benchmark::State& state)
124 std::default_random_engine e1(1234567891);
125 std::uniform_real_distribution<float>
uniform_dist(0, 1);
128 auto rowWriter = builder.
persist<float, float,
float>({
"x",
"y",
"z"});
129 for (
auto i = 0;
i <
state.range(0); ++
i) {
138 for (
auto _ :
state) {
140 for (
auto t0 = tests.begin();
t0 + 4 != tests.end(); ++
t0) {
141 for (
auto t1 =
t0 + 1;
t1 + 3 != tests.end(); ++
t1) {
142 for (
auto t2 =
t1 + 1; t2 + 2 != tests.end(); ++t2) {
143 for (
auto t3 = t2 + 1; t3 + 1 != tests.end(); ++t3) {
144 for (
auto t4 = t3 + 1; t4 != tests.end(); ++t4) {
145 auto comb = std::make_tuple(
t0,
t1, t2, t3, t4);
147 benchmark::DoNotOptimize(comb);
153 benchmark::DoNotOptimize(
count);
161static void BM_ASoAHelpersNaiveCalosPairs(benchmark::State& state)
164 std::default_random_engine e1(1234567891);
165 std::uniform_real_distribution<float>
uniform_dist(0, 1);
168 auto rowWriter = builder.
cursor<o2::aod::Calos>();
169 for (
auto i = 0;
i <
state.range(0); ++
i) {
175 o2::aod::Calos Calos{table};
178 for (
auto _ :
state) {
180 for (
auto t0 = Calos.begin();
t0 + 1 != Calos.end(); ++
t0) {
181 for (
auto t1 =
t0 + 1;
t1 != Calos.end(); ++
t1) {
182 auto comb = std::make_tuple(
t0,
t1);
184 benchmark::DoNotOptimize(comb);
187 benchmark::DoNotOptimize(
count);
195static void BM_ASoAHelpersNaiveCalosFives(benchmark::State& state)
198 std::default_random_engine e1(1234567891);
199 std::uniform_real_distribution<float>
uniform_dist(0, 1);
202 auto rowWriter = builder.
cursor<o2::aod::Calos>();
203 for (
auto i = 0;
i <
state.range(0); ++
i) {
209 o2::aod::Calos calos{table};
212 for (
auto _ :
state) {
214 for (
auto t0 = calos.begin();
t0 + 4 != calos.end(); ++
t0) {
215 for (
auto t1 =
t0 + 1;
t1 + 3 != calos.end(); ++
t1) {
216 for (
auto t2 =
t1 + 1; t2 + 2 != calos.end(); ++t2) {
217 for (
auto t3 = t2 + 1; t3 + 1 != calos.end(); ++t3) {
218 for (
auto t4 = t3 + 1; t4 != calos.end(); ++t4) {
219 auto comb = std::make_tuple(
t0,
t1, t2, t3, t4);
221 benchmark::DoNotOptimize(comb);
227 benchmark::DoNotOptimize(
count);
235static void BM_ASoAHelpersNaiveTracksPairs(benchmark::State& state)
238 std::default_random_engine e1(1234567891);
239 std::uniform_real_distribution<float>
uniform_dist(0, 1);
240 std::uniform_int_distribution<int> uniform_dist_int(0, 10);
243 auto rowWriter = builder.
cursor<o2::aod::StoredTracks>();
244 for (
auto i = 0;
i <
state.range(0); ++
i) {
245 rowWriter(0, uniform_dist_int(e1), 0,
251 o2::aod::StoredTracks tracks{table};
254 for (
auto _ :
state) {
256 for (
auto t0 = tracks.begin();
t0 + 1 != tracks.end(); ++
t0) {
257 for (
auto t1 =
t0 + 1;
t1 != tracks.end(); ++
t1) {
258 auto comb = std::make_tuple(
t0,
t1);
260 benchmark::DoNotOptimize(comb);
263 benchmark::DoNotOptimize(
count);
271static void BM_ASoAHelpersNaiveTracksFives(benchmark::State& state)
274 std::default_random_engine e1(1234567891);
275 std::uniform_real_distribution<float>
uniform_dist(0, 1);
276 std::uniform_int_distribution<int> uniform_dist_int(0, 10);
279 auto rowWriter = builder.
cursor<o2::aod::StoredTracks>();
280 for (
auto i = 0;
i <
state.range(0); ++
i) {
281 rowWriter(0, uniform_dist_int(e1), 0,
287 o2::aod::StoredTracks tracks{table};
290 for (
auto _ :
state) {
292 for (
auto t0 = tracks.begin();
t0 + 4 != tracks.end(); ++
t0) {
293 for (
auto t1 =
t0 + 1;
t1 + 3 != tracks.end(); ++
t1) {
294 for (
auto t2 =
t1 + 1; t2 + 2 != tracks.end(); ++t2) {
295 for (
auto t3 = t2 + 1; t3 + 1 != tracks.end(); ++t3) {
296 for (
auto t4 = t3 + 1; t4 != tracks.end(); ++t4) {
297 auto comb = std::make_tuple(
t0,
t1, t2, t3, t4);
299 benchmark::DoNotOptimize(comb);
305 benchmark::DoNotOptimize(
count);
313static void BM_ASoAHelpersCombGenSimplePairs(benchmark::State& state)
316 std::default_random_engine e1(1234567891);
317 std::uniform_real_distribution<float>
uniform_dist(0, 1);
320 auto rowWriter = builder.
persist<float, float,
float>({
"x",
"y",
"z"});
321 for (
auto i = 0;
i <
state.range(0); ++
i) {
331 for (
auto _ :
state) {
336 benchmark::DoNotOptimize(
count);
344static void BM_ASoAHelpersCombGenSimpleFives(benchmark::State& state)
347 std::default_random_engine e1(1234567891);
348 std::uniform_real_distribution<float>
uniform_dist(0, 1);
351 auto rowWriter = builder.
persist<float, float,
float>({
"x",
"y",
"z"});
352 for (
auto i = 0;
i <
state.range(0); ++
i) {
362 for (
auto _ :
state) {
364 for (
auto& comb :
combinations(tests, tests, tests, tests, tests)) {
367 benchmark::DoNotOptimize(
count);
375static void BM_ASoAHelpersCombGenCalosPairs(benchmark::State& state)
378 std::default_random_engine e1(1234567891);
379 std::uniform_real_distribution<float>
uniform_dist(0, 1);
382 auto rowWriter = builder.
cursor<o2::aod::Calos>();
383 for (
auto i = 0;
i <
state.range(0); ++
i) {
389 o2::aod::Calos calos{table};
393 for (
auto _ :
state) {
398 benchmark::DoNotOptimize(
count);
406static void BM_ASoAHelpersCombGenCalosFives(benchmark::State& state)
409 std::default_random_engine e1(1234567891);
410 std::uniform_real_distribution<float>
uniform_dist(0, 1);
413 auto rowWriter = builder.
cursor<o2::aod::Calos>();
414 for (
auto i = 0;
i <
state.range(0); ++
i) {
420 o2::aod::Calos calos{table};
424 for (
auto _ :
state) {
426 for (
auto& comb :
combinations(calos, calos, calos, calos, calos)) {
429 benchmark::DoNotOptimize(
count);
437static void BM_ASoAHelpersCombGenTracksPairs(benchmark::State& state)
440 std::default_random_engine e1(1234567891);
441 std::uniform_real_distribution<float>
uniform_dist(0, 1);
442 std::uniform_int_distribution<int> uniform_dist_int(0, 10);
445 auto rowWriter = builder.
cursor<o2::aod::StoredTracks>();
446 for (
auto i = 0;
i <
state.range(0); ++
i) {
447 rowWriter(0, uniform_dist_int(e1), 0,
453 o2::aod::StoredTracks tracks{table};
457 for (
auto _ :
state) {
462 benchmark::DoNotOptimize(
count);
470static void BM_ASoAHelpersCombGenTracksFives(benchmark::State& state)
473 std::default_random_engine e1(1234567891);
474 std::uniform_real_distribution<float>
uniform_dist(0, 1);
475 std::uniform_int_distribution<int> uniform_dist_int(0, 10);
478 auto rowWriter = builder.
cursor<o2::aod::StoredTracks>();
479 for (
auto i = 0;
i <
state.range(0); ++
i) {
480 rowWriter(0, uniform_dist_int(e1), 0,
486 o2::aod::StoredTracks tracks{table};
490 for (
auto _ :
state) {
492 for (
auto& comb :
combinations(tracks, tracks, tracks, tracks, tracks)) {
495 benchmark::DoNotOptimize(
count);
503static void BM_ASoAHelpersCombGenSimpleFivesMultipleChunks(benchmark::State& state)
506 std::default_random_engine e1(1234567891);
507 std::uniform_real_distribution<float>
uniform_dist(0, 1);
510 auto rowWriterA = builderA.
persist<float, float,
float>({
"x",
"y",
"z"});
511 for (
auto i = 0;
i <
state.range(0); ++
i) {
517 auto rowWriterB = builderB.
persist<int32_t>({
"x"});
518 for (
auto i = 0;
i <
state.range(0); ++
i) {
527 ConcatTest tests{tableA, tableB};
531 for (
auto _ :
state) {
533 for (
auto& comb :
combinations(tests, tests, tests, tests, tests)) {
536 benchmark::DoNotOptimize(
count);
544static void BM_ASoAHelpersCombGenCalosFivesMultipleChunks(benchmark::State& state)
547 std::default_random_engine e1(1234567891);
548 std::uniform_real_distribution<float>
uniform_dist(0, 1);
551 auto rowWriterA = builderA.
cursor<o2::aod::Calos>();
552 for (
auto i = 0;
i <
state.range(0); ++
i) {
559 auto rowWriterB = builderB.
cursor<o2::aod::Calos>();
560 for (
auto i = 0;
i <
state.range(0); ++
i) {
568 ConcatTest calos{tableA, tableB};
572 for (
auto _ :
state) {
574 for (
auto& comb :
combinations(calos, calos, calos, calos, calos)) {
577 benchmark::DoNotOptimize(
count);
585static void BM_ASoAHelpersCombGenSimplePairsSameCategories(benchmark::State& state)
588 std::default_random_engine e1(1234567891);
589 std::uniform_real_distribution<float>
uniform_dist(0, 1);
590 std::uniform_int_distribution<int> uniform_dist_int(0, 10);
593 auto rowWriter = builder.
persist<
int, float,
float>({
"x",
"y",
"z"});
594 for (
auto i = 0;
i <
state.range(0); ++
i) {
605 for (
auto _ :
state) {
610 benchmark::DoNotOptimize(
count);
618static void BM_ASoAHelpersCombGenSimpleFivesSameCategories(benchmark::State& state)
621 std::default_random_engine e1(1234567891);
622 std::uniform_real_distribution<float>
uniform_dist(0, 1);
623 std::uniform_int_distribution<int> uniform_dist_int(0, 5);
626 auto rowWriter = builder.
persist<
int, float,
float>({
"x",
"y",
"z"});
627 for (
auto i = 0;
i <
state.range(0); ++
i) {
638 for (
auto _ :
state) {
643 benchmark::DoNotOptimize(
count);
651static void BM_ASoAHelpersCombGenSimplePairsCategories(benchmark::State& state)
654 std::default_random_engine e1(1234567891);
655 std::uniform_real_distribution<float>
uniform_dist(0, 1);
656 std::uniform_int_distribution<int> uniform_dist_int(0, 10);
659 auto rowWriter = builder.
persist<
int, float,
float>({
"x",
"y",
"z"});
660 for (
auto i = 0;
i <
state.range(0); ++
i) {
671 for (
auto _ :
state) {
676 benchmark::DoNotOptimize(
count);
684static void BM_ASoAHelpersCombGenSimpleFivesCategories(benchmark::State& state)
687 std::default_random_engine e1(1234567891);
688 std::uniform_real_distribution<float>
uniform_dist(0, 1);
689 std::uniform_int_distribution<int> uniform_dist_int(0, 5);
692 auto rowWriter = builder.
persist<
int, float,
float>({
"x",
"y",
"z"});
693 for (
auto i = 0;
i <
state.range(0); ++
i) {
704 for (
auto _ :
state) {
709 benchmark::DoNotOptimize(
count);
717static void BM_ASoAHelpersCombGenCollisionsPairsSameCategories(benchmark::State& state)
720 std::default_random_engine e1(1234567891);
721 std::uniform_real_distribution<float>
uniform_dist(0, 1);
722 std::uniform_int_distribution<int> uniform_dist_int(0, 10);
726 for (
auto i = 0;
i <
state.range(0); ++
i) {
727 rowWriter(0, uniform_dist_int(e1),
732 uniform_dist_int(e1),
742 for (
auto _ :
state) {
747 benchmark::DoNotOptimize(
count);
755static void BM_ASoAHelpersCombGenCollisionsFivesSameCategories(benchmark::State& state)
758 std::default_random_engine e1(1234567891);
759 std::uniform_real_distribution<float>
uniform_dist(0, 1);
760 std::uniform_int_distribution<int> uniform_dist_int(0, 5);
764 for (
auto i = 0;
i <
state.range(0); ++
i) {
765 rowWriter(0, uniform_dist_int(e1),
770 uniform_dist_int(e1),
780 for (
auto _ :
state) {
785 benchmark::DoNotOptimize(
count);
793static void BM_ASoAHelpersCombGenCollisionsPairsCategories(benchmark::State& state)
796 std::default_random_engine e1(1234567891);
797 std::uniform_real_distribution<float>
uniform_dist(0, 1);
798 std::uniform_int_distribution<int> uniform_dist_int(0, 10);
802 for (
auto i = 0;
i <
state.range(0); ++
i) {
803 rowWriter(0, uniform_dist_int(e1),
808 uniform_dist_int(e1),
818 for (
auto _ :
state) {
823 benchmark::DoNotOptimize(
count);
831static void BM_ASoAHelpersCombGenCollisionsFivesCategories(benchmark::State& state)
834 std::default_random_engine e1(1234567891);
835 std::uniform_real_distribution<float>
uniform_dist(0, 1);
836 std::uniform_int_distribution<int> uniform_dist_int(0, 5);
840 for (
auto i = 0;
i <
state.range(0); ++
i) {
841 rowWriter(0, uniform_dist_int(e1),
846 uniform_dist_int(e1),
856 for (
auto _ :
state) {
861 benchmark::DoNotOptimize(
count);
#define DECLARE_SOA_DYNAMIC_COLUMN(_Name_, _Getter_,...)
#define DECLARE_SOA_COLUMN_FULL(_Name_, _Getter_, _Type_, _Label_)
uniform_int_distribution< long long > uniform_dist(32, 126)
constexpr unsigned int maxPairsRange
BENCHMARK(BM_ASoAHelpersEmptySimplePairs) -> Range(8, 8<< maxPairsRange)
constexpr unsigned int maxFivesRange
auto persist(std::array< char const *, sizeof...(ARGS)+1 > const &columnNames)
std::shared_ptr< arrow::Table > finalize()
float sum(float s, o2::dcs::DataPointValue v)
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat t0
GLdouble GLdouble GLdouble z
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat t1
Collisions_001 Collisions
Defining PrimaryVertex explicitly as messageable.
auto combinations(const BP &binningPolicy, int categoryNeighbours, const T1 &outsider, const T2s &... tables)
FIXME: do not use data model tables.