@@ -22,7 +22,7 @@ using namespace o2::framework;
2222using namespace arrow ;
2323using namespace o2 ::soa;
2424
25- // Validation of new event mixing: time complexity same as for naive loop
25+ // Validation of new event mixing in detail
2626
2727#ifdef __APPLE__
2828constexpr unsigned int maxColPairsRange = 20 ;
@@ -34,50 +34,50 @@ constexpr int numEventsToMix = 5;
3434using namespace o2 ::framework;
3535using namespace o2 ::soa;
3636
37- // static void BM_EventMixingTableCreation(benchmark::State& state)
38- // {
39- // for (auto _ : state) {
40- // // Seed with a real random value, if available
41- // std::default_random_engine e1(1234567891);
42- // std::uniform_real_distribution<float> uniform_dist(0.f, 1.f);
43- // std::uniform_real_distribution<float> uniform_dist_x(-0.065f, 0.073f);
44- // std::uniform_real_distribution<float> uniform_dist_y(-0.320f, 0.360f);
45- // std::uniform_int_distribution<int> uniform_dist_int(0, 5);
46- //
47- // TableBuilder colBuilder;
48- // auto rowWriterCol = colBuilder.cursor<o2::aod::Collisions>();
49- // for (auto i = 0; i < state.range(0); ++i) {
50- // float x = uniform_dist_x(e1);
51- // float y = uniform_dist_y(e1);
52- // rowWriterCol(0, uniform_dist_int(e1),
53- // x, y, uniform_dist(e1),
54- // uniform_dist(e1), uniform_dist(e1), uniform_dist(e1),
55- // uniform_dist(e1), uniform_dist(e1), uniform_dist(e1),
56- // uniform_dist_int(e1), uniform_dist(e1),
57- // uniform_dist_int(e1),
58- // uniform_dist(e1), uniform_dist(e1));
59- // }
60- // auto tableCol = colBuilder.finalize();
61- // o2::aod::Collisions collisions{tableCol};
62- // }
63- // state.SetBytesProcessed(state.iterations() * (12 * sizeof(float) + sizeof(int64_t) + 3 * sizeof(int)) * state.range(0));
64- // }
65- //
66- // BENCHMARK(BM_EventMixingTableCreation)->RangeMultiplier(2)->Range(4, 2 << maxColPairsRange);
67- //
68- // static void BM_EventMixingBinningCreation(benchmark::State& state)
69- // {
70- // std::vector<double> xBins{VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
71- // std::vector<double> yBins{VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
72- //
73- // for (auto _ : state) {
74- // using BinningType = ColumnBinningPolicy<o2::aod::collision::PosX, o2::aod::collision::PosY>;
75- // BinningType binningOnPositions{{xBins, yBins}, true}; // true is for 'ignore overflows' (true by default)
76- // }
77- // state.SetBytesProcessed(state.iterations() * sizeof(float));
78- // }
79- //
80- // BENCHMARK(BM_EventMixingBinningCreation)->RangeMultiplier(2)->Range(4, 2 << maxColPairsRange);
37+ static void BM_EventMixingTableCreation (benchmark::State& state)
38+ {
39+ for (auto _ : state) {
40+ // Seed with a real random value, if available
41+ std::default_random_engine e1 (1234567891 );
42+ std::uniform_real_distribution<float > uniform_dist (0 .f , 1 .f );
43+ std::uniform_real_distribution<float > uniform_dist_x (-0 .065f , 0 .073f );
44+ std::uniform_real_distribution<float > uniform_dist_y (-0 .320f , 0 .360f );
45+ std::uniform_int_distribution<int > uniform_dist_int (0 , 5 );
46+
47+ TableBuilder colBuilder;
48+ auto rowWriterCol = colBuilder.cursor <o2::aod::Collisions>();
49+ for (auto i = 0 ; i < state.range (0 ); ++i) {
50+ float x = uniform_dist_x (e1 );
51+ float y = uniform_dist_y (e1 );
52+ rowWriterCol (0 , uniform_dist_int (e1 ),
53+ x, y, uniform_dist (e1 ),
54+ uniform_dist (e1 ), uniform_dist (e1 ), uniform_dist (e1 ),
55+ uniform_dist (e1 ), uniform_dist (e1 ), uniform_dist (e1 ),
56+ uniform_dist_int (e1 ), uniform_dist (e1 ),
57+ uniform_dist_int (e1 ),
58+ uniform_dist (e1 ), uniform_dist (e1 ));
59+ }
60+ auto tableCol = colBuilder.finalize ();
61+ o2::aod::Collisions collisions{tableCol};
62+ }
63+ state.SetBytesProcessed (state.iterations () * (12 * sizeof (float ) + sizeof (int64_t ) + 3 * sizeof (int )) * state.range (0 ));
64+ }
65+
66+ BENCHMARK (BM_EventMixingTableCreation)->RangeMultiplier(2 )->Range(4 , 2 << maxColPairsRange);
67+
68+ static void BM_EventMixingBinningCreation (benchmark::State& state)
69+ {
70+ std::vector<double > xBins{VARIABLE_WIDTH, -0.064 , -0.062 , -0.060 , 0.066 , 0.068 , 0.070 , 0.072 };
71+ std::vector<double > yBins{VARIABLE_WIDTH, -0.320 , -0.301 , -0.300 , 0.330 , 0.340 , 0.350 , 0.360 };
72+
73+ for (auto _ : state) {
74+ using BinningType = ColumnBinningPolicy<o2::aod::collision::PosX, o2::aod::collision::PosY>;
75+ BinningType binningOnPositions{{xBins, yBins}, true }; // true is for 'ignore overflows' (true by default)
76+ }
77+ state.SetBytesProcessed (state.iterations () * sizeof (float ));
78+ }
79+
80+ BENCHMARK (BM_EventMixingBinningCreation)->RangeMultiplier(2 )->Range(4 , 2 << maxColPairsRange);
8181
8282static void BM_EventMixingPolicyCreation (benchmark::State& state)
8383{
@@ -116,97 +116,94 @@ static void BM_EventMixingPolicyCreation(benchmark::State& state)
116116}
117117
118118BENCHMARK (BM_EventMixingPolicyCreation)->RangeMultiplier(2 )->Range(2UL << maxColPairsRange, 2UL << maxColPairsRange);
119- // BENCHMARK(BM_EventMixingPolicyCreation)->DenseRange(2<<20, 2<<21, 50)
120-
121- // static void BM_EventMixingCombinationsCreation(benchmark::State& state)
122- // {
123- // // Seed with a real random value, if available
124- // std::default_random_engine e1(1234567891);
125- // std::uniform_real_distribution<float> uniform_dist(0.f, 1.f);
126- // std::uniform_real_distribution<float> uniform_dist_x(-0.065f, 0.073f);
127- // std::uniform_real_distribution<float> uniform_dist_y(-0.320f, 0.360f);
128- // std::uniform_int_distribution<int> uniform_dist_int(0, 5);
129- //
130- // TableBuilder colBuilder;
131- // auto rowWriterCol = colBuilder.cursor<o2::aod::Collisions>();
132- // for (auto i = 0; i < state.range(0); ++i) {
133- // float x = uniform_dist_x(e1);
134- // float y = uniform_dist_y(e1);
135- // rowWriterCol(0, uniform_dist_int(e1),
136- // x, y, uniform_dist(e1),
137- // uniform_dist(e1), uniform_dist(e1), uniform_dist(e1),
138- // uniform_dist(e1), uniform_dist(e1), uniform_dist(e1),
139- // uniform_dist_int(e1), uniform_dist(e1),
140- // uniform_dist_int(e1),
141- // uniform_dist(e1), uniform_dist(e1));
142- // }
143- // auto tableCol = colBuilder.finalize();
144- // o2::aod::Collisions collisions{tableCol};
145- //
146- // std::vector<double> xBins{VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
147- // std::vector<double> yBins{VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
148- // using BinningType = ColumnBinningPolicy<o2::aod::collision::PosX, o2::aod::collision::PosY>;
149- // BinningType binningOnPositions{{xBins, yBins}, true}; // true is for 'ignore overflows' (true by default)
150- //
151- // auto combPolicy = CombinationsBlockUpperSameIndexPolicy(binningOnPositions, numEventsToMix - 1, -1, collisions, collisions);
152- //
153- // for (auto _ : state) {
154- // auto comb = combinations(combPolicy);
155- // }
156- // state.SetBytesProcessed(state.iterations() * sizeof(float));
157- // }
158- //
159- // BENCHMARK(BM_EventMixingCombinationsCreation)->RangeMultiplier(2)->Range(2 << 25, 2UL << maxColPairsRange);
160- // BENCHMARK(BM_EventMixingCombinationsCreation)->DenseRange(2<<18, 2<<19, 10486);
161-
162- // static void BM_EventMixingCombinations(benchmark::State& state)
163- // {
164- // // Seed with a real random value, if available
165- // std::default_random_engine e1(1234567891);
166- // std::uniform_real_distribution<float> uniform_dist(0.f, 1.f);
167- // std::uniform_real_distribution<float> uniform_dist_x(-0.065f, 0.073f);
168- // std::uniform_real_distribution<float> uniform_dist_y(-0.320f, 0.360f);
169- // std::uniform_int_distribution<int> uniform_dist_int(0, 5);
170- //
171- // TableBuilder colBuilder;
172- // auto rowWriterCol = colBuilder.cursor<o2::aod::Collisions>();
173- // for (auto i = 0; i < state.range(0); ++i) {
174- // float x = uniform_dist_x(e1);
175- // float y = uniform_dist_y(e1);
176- // rowWriterCol(0, uniform_dist_int(e1),
177- // x, y, uniform_dist(e1),
178- // uniform_dist(e1), uniform_dist(e1), uniform_dist(e1),
179- // uniform_dist(e1), uniform_dist(e1), uniform_dist(e1),
180- // uniform_dist_int(e1), uniform_dist(e1),
181- // uniform_dist_int(e1),
182- // uniform_dist(e1), uniform_dist(e1));
183- // }
184- // auto tableCol = colBuilder.finalize();
185- // o2::aod::Collisions collisions{tableCol};
186- //
187- // std::vector<double> xBins{VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
188- // std::vector<double> yBins{VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
189- // using BinningType = ColumnBinningPolicy<o2::aod::collision::PosX, o2::aod::collision::PosY>;
190- // BinningType binningOnPositions{{xBins, yBins}, true}; // true is for 'ignore overflows' (true by default)
191- //
192- // auto combPolicy = CombinationsBlockUpperSameIndexPolicy(binningOnPositions, numEventsToMix - 1, -1, collisions, collisions);
193- //
194- // auto comb = combinations(combPolicy);
195- //
196- // int64_t colCount = 0;
197- //
198- // for (auto _ : state) {
199- // colCount = 0;
200- // for (auto& combT : comb) {
201- // colCount++;
202- // }
203- // benchmark::DoNotOptimize(colCount);
204- // }
205- // state.counters["Mixed collision pairs"] = colCount;
206- // state.SetBytesProcessed(state.iterations() * sizeof(float) * colCount);
207- // }
208- //
209- // BENCHMARK(BM_EventMixingCombinations)->RangeMultiplier(2)->Range(2 << maxColPairsRange, 2UL << maxColPairsRange);
210- // BENCHMARK(BM_EventMixingCombinations)->DenseRange(2<<20, 2<<21, 50)
119+
120+ static void BM_EventMixingCombinationsCreation (benchmark::State& state)
121+ {
122+ // Seed with a real random value, if available
123+ std::default_random_engine e1 (1234567891 );
124+ std::uniform_real_distribution<float > uniform_dist (0 .f , 1 .f );
125+ std::uniform_real_distribution<float > uniform_dist_x (-0 .065f , 0 .073f );
126+ std::uniform_real_distribution<float > uniform_dist_y (-0 .320f , 0 .360f );
127+ std::uniform_int_distribution<int > uniform_dist_int (0 , 5 );
128+
129+ TableBuilder colBuilder;
130+ auto rowWriterCol = colBuilder.cursor <o2::aod::Collisions>();
131+ for (auto i = 0 ; i < state.range (0 ); ++i) {
132+ float x = uniform_dist_x (e1 );
133+ float y = uniform_dist_y (e1 );
134+ rowWriterCol (0 , uniform_dist_int (e1 ),
135+ x, y, uniform_dist (e1 ),
136+ uniform_dist (e1 ), uniform_dist (e1 ), uniform_dist (e1 ),
137+ uniform_dist (e1 ), uniform_dist (e1 ), uniform_dist (e1 ),
138+ uniform_dist_int (e1 ), uniform_dist (e1 ),
139+ uniform_dist_int (e1 ),
140+ uniform_dist (e1 ), uniform_dist (e1 ));
141+ }
142+ auto tableCol = colBuilder.finalize ();
143+ o2::aod::Collisions collisions{tableCol};
144+
145+ std::vector<double > xBins{VARIABLE_WIDTH, -0.064 , -0.062 , -0.060 , 0.066 , 0.068 , 0.070 , 0.072 };
146+ std::vector<double > yBins{VARIABLE_WIDTH, -0.320 , -0.301 , -0.300 , 0.330 , 0.340 , 0.350 , 0.360 };
147+ using BinningType = ColumnBinningPolicy<o2::aod::collision::PosX, o2::aod::collision::PosY>;
148+ BinningType binningOnPositions{{xBins, yBins}, true }; // true is for 'ignore overflows' (true by default)
149+
150+ auto combPolicy = CombinationsBlockUpperSameIndexPolicy (binningOnPositions, numEventsToMix - 1 , -1 , collisions, collisions);
151+
152+ for (auto _ : state) {
153+ auto comb = combinations (combPolicy);
154+ }
155+ state.SetBytesProcessed (state.iterations () * sizeof (float ));
156+ }
157+
158+ BENCHMARK (BM_EventMixingCombinationsCreation)->RangeMultiplier(2 )->Range(2 << 25 , 2UL << maxColPairsRange);
159+
160+ static void BM_EventMixingCombinations (benchmark::State& state)
161+ {
162+ // Seed with a real random value, if available
163+ std::default_random_engine e1 (1234567891 );
164+ std::uniform_real_distribution<float > uniform_dist (0 .f , 1 .f );
165+ std::uniform_real_distribution<float > uniform_dist_x (-0 .065f , 0 .073f );
166+ std::uniform_real_distribution<float > uniform_dist_y (-0 .320f , 0 .360f );
167+ std::uniform_int_distribution<int > uniform_dist_int (0 , 5 );
168+
169+ TableBuilder colBuilder;
170+ auto rowWriterCol = colBuilder.cursor <o2::aod::Collisions>();
171+ for (auto i = 0 ; i < state.range (0 ); ++i) {
172+ float x = uniform_dist_x (e1 );
173+ float y = uniform_dist_y (e1 );
174+ rowWriterCol (0 , uniform_dist_int (e1 ),
175+ x, y, uniform_dist (e1 ),
176+ uniform_dist (e1 ), uniform_dist (e1 ), uniform_dist (e1 ),
177+ uniform_dist (e1 ), uniform_dist (e1 ), uniform_dist (e1 ),
178+ uniform_dist_int (e1 ), uniform_dist (e1 ),
179+ uniform_dist_int (e1 ),
180+ uniform_dist (e1 ), uniform_dist (e1 ));
181+ }
182+ auto tableCol = colBuilder.finalize ();
183+ o2::aod::Collisions collisions{tableCol};
184+
185+ std::vector<double > xBins{VARIABLE_WIDTH, -0.064 , -0.062 , -0.060 , 0.066 , 0.068 , 0.070 , 0.072 };
186+ std::vector<double > yBins{VARIABLE_WIDTH, -0.320 , -0.301 , -0.300 , 0.330 , 0.340 , 0.350 , 0.360 };
187+ using BinningType = ColumnBinningPolicy<o2::aod::collision::PosX, o2::aod::collision::PosY>;
188+ BinningType binningOnPositions{{xBins, yBins}, true }; // true is for 'ignore overflows' (true by default)
189+
190+ auto combPolicy = CombinationsBlockUpperSameIndexPolicy (binningOnPositions, numEventsToMix - 1 , -1 , collisions, collisions);
191+
192+ auto comb = combinations (combPolicy);
193+
194+ int64_t colCount = 0 ;
195+
196+ for (auto _ : state) {
197+ colCount = 0 ;
198+ for (auto & combT : comb) {
199+ colCount++;
200+ }
201+ benchmark::DoNotOptimize (colCount);
202+ }
203+ state.counters [" Mixed collision pairs" ] = colCount;
204+ state.SetBytesProcessed (state.iterations () * sizeof (float ) * colCount);
205+ }
206+
207+ BENCHMARK (BM_EventMixingCombinations)->RangeMultiplier(2 )->Range(2 << maxColPairsRange, 2UL << maxColPairsRange);
211208
212209BENCHMARK_MAIN ();
0 commit comments