Skip to content

Commit b82c19f

Browse files
committed
Some fixes to the old mixing benchmark, but it still crashes
1 parent 429846d commit b82c19f

File tree

1 file changed

+120
-12
lines changed

1 file changed

+120
-12
lines changed

Framework/Core/test/benchmark_EventMixing.cxx

Lines changed: 120 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,9 @@ using namespace o2::soa;
2525
// Validation of new event mixing: time complexity same as for naive loop
2626

2727
#ifdef __APPLE__
28-
constexpr unsigned int maxPairsRange = 5;
29-
constexpr unsigned int maxFivesRange = 3;
28+
constexpr unsigned int maxColPairsRange = 21;
3029
#else
31-
constexpr unsigned int maxPairsRange = 5;
32-
constexpr unsigned int maxFivesRange = 3;
30+
constexpr unsigned int maxColPairsRange = 23;
3331
#endif
3432
constexpr int numEventsToMix = 5;
3533
constexpr int numTracksPerEvent = 10000;
@@ -66,7 +64,7 @@ static void BM_EventMixingTraditional(benchmark::State& state)
6664
}
6765
auto tableCol = colBuilder.finalize();
6866
o2::aod::Collisions collisions{tableCol};
69-
std::uniform_int_distribution<int> uniform_dist_col_ind(0, collisions.size());
67+
std::uniform_int_distribution<int> uniform_dist_col_ind(0, collisions.size() - 1);
7068

7169
auto rowWriterTrack = trackBuilder.cursor<o2::aod::StoredTracks>();
7270
for (auto i = 0; i < numTracksPerEvent * state.range(0); ++i) {
@@ -78,14 +76,14 @@ static void BM_EventMixingTraditional(benchmark::State& state)
7876
auto tableTrack = trackBuilder.finalize();
7977
o2::aod::StoredTracks tracks{tableTrack};
8078

81-
ArrowTableSlicingCache atscache({{getLabelFromType<o2::aod::StoredTracks>(), "fIndex" + cutString(getLabelFromType<o2::aod::Collisions>())}});
82-
auto s = atscache.updateCacheEntry(0, tableTrack);
83-
SliceCache cache{&atscache};
84-
8579
int64_t count = 0;
8680
int64_t colCount = 0;
8781
int nBinsTot = (xBins.size() - 2) * (yBins.size() - 2);
8882

83+
ArrowTableSlicingCache atscache({{getLabelFromType<o2::aod::StoredTracks>(), "fIndex" + cutString(getLabelFromType<o2::aod::Collisions>())}});
84+
auto s = atscache.updateCacheEntry(0, tableTrack);
85+
SliceCache cache{&atscache};
86+
8987
for (auto _ : state) {
9088
count = 0;
9189
colCount = 0;
@@ -126,7 +124,7 @@ static void BM_EventMixingTraditional(benchmark::State& state)
126124
state.SetBytesProcessed(state.iterations() * sizeof(float) * count);
127125
}
128126

129-
BENCHMARK(BM_EventMixingTraditional)->RangeMultiplier(2)->Range(4, 8 << maxPairsRange);
127+
BENCHMARK(BM_EventMixingTraditional)->RangeMultiplier(2)->Range(4UL, 2UL << maxColPairsRange);
130128

131129
static void BM_EventMixingCombinations(benchmark::State& state)
132130
{
@@ -157,7 +155,7 @@ static void BM_EventMixingCombinations(benchmark::State& state)
157155
}
158156
auto tableCol = colBuilder.finalize();
159157
o2::aod::Collisions collisions{tableCol};
160-
std::uniform_int_distribution<int> uniform_dist_col_ind(0, collisions.size());
158+
std::uniform_int_distribution<int> uniform_dist_col_ind(0, collisions.size() - 1);
161159

162160
auto rowWriterTrack = trackBuilder.cursor<o2::aod::StoredTracks>();
163161
for (auto i = 0; i < numTracksPerEvent * state.range(0); ++i) {
@@ -171,6 +169,7 @@ static void BM_EventMixingCombinations(benchmark::State& state)
171169

172170
int64_t count = 0;
173171
int64_t colCount = 0;
172+
174173
ArrowTableSlicingCache atscache{{{getLabelFromType<o2::aod::StoredTracks>(), "fIndex" + getLabelFromType<o2::aod::Collisions>()}}};
175174
auto s = atscache.updateCacheEntry(0, tableTrack);
176175
SliceCache cache{&atscache};
@@ -196,6 +195,115 @@ static void BM_EventMixingCombinations(benchmark::State& state)
196195
state.SetBytesProcessed(state.iterations() * sizeof(float) * count);
197196
}
198197

199-
BENCHMARK(BM_EventMixingCombinations)->RangeMultiplier(2)->Range(4, 8 << maxPairsRange);
198+
BENCHMARK(BM_EventMixingCombinations)->RangeMultiplier(2)->Range(4UL, 2UL << maxColPairsRange);
199+
200+
static void BM_EventMixingNaiveCollisionsPairsSameCategories(benchmark::State& state)
201+
{
202+
// Seed with a real random value, if available
203+
std::default_random_engine e1(1234567891);
204+
std::uniform_real_distribution<float> uniform_dist(0.f, 1.f);
205+
std::uniform_real_distribution<float> uniform_dist_x(-0.065f, 0.073f);
206+
std::uniform_real_distribution<float> uniform_dist_y(-0.320f, 0.360f);
207+
std::uniform_int_distribution<int> uniform_dist_int(0, 5);
208+
209+
std::vector<double> xBins{VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
210+
std::vector<double> yBins{VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
211+
using BinningType = ColumnBinningPolicy<o2::aod::collision::PosX, o2::aod::collision::PosY>;
212+
BinningType binningOnPositions{{xBins, yBins}, true}; // true is for 'ignore overflows' (true by default)
213+
214+
TableBuilder colBuilder;
215+
auto rowWriterCol = colBuilder.cursor<o2::aod::Collisions>();
216+
for (auto i = 0; i < state.range(0); ++i) {
217+
float x = uniform_dist_x(e1);
218+
float y = uniform_dist_y(e1);
219+
rowWriterCol(0, uniform_dist_int(e1),
220+
x, y, uniform_dist(e1),
221+
uniform_dist(e1), uniform_dist(e1), uniform_dist(e1),
222+
uniform_dist(e1), uniform_dist(e1), uniform_dist(e1),
223+
uniform_dist_int(e1), uniform_dist(e1),
224+
uniform_dist_int(e1),
225+
uniform_dist(e1), uniform_dist(e1));
226+
}
227+
auto tableCol = colBuilder.finalize();
228+
o2::aod::Collisions collisions{tableCol};
229+
230+
int64_t colCount = 0;
231+
int nBinsTot = (xBins.size() - 2) * (yBins.size() - 2);
232+
233+
for (auto _ : state) {
234+
colCount = 0;
235+
int n = state.range(0);
236+
std::vector<std::list<o2::aod::Collisions::iterator>> mixingBufferVector;
237+
for (int i = 0; i < nBinsTot; i++) {
238+
mixingBufferVector.push_back(std::list<o2::aod::Collisions::iterator>());
239+
}
240+
for (auto& col1 : collisions) {
241+
int bin = binningOnPositions.getBin({col1.posX(), col1.posY()});
242+
if (bin == -1) {
243+
continue;
244+
}
245+
auto& mixingBuffer = mixingBufferVector[bin];
246+
if (mixingBuffer.size() > 0) {
247+
for (auto& col2 : mixingBuffer) {
248+
colCount++;
249+
}
250+
if (mixingBuffer.size() >= numEventsToMix - 1) {
251+
mixingBuffer.pop_back();
252+
}
253+
}
254+
mixingBuffer.push_front(col1);
255+
}
256+
benchmark::DoNotOptimize(colCount);
257+
}
258+
state.counters["Mixed collision pairs"] = colCount;
259+
state.SetBytesProcessed(state.iterations() * sizeof(float) * colCount);
260+
}
261+
262+
BENCHMARK(BM_EventMixingNaiveCollisionsPairsSameCategories)->RangeMultiplier(2)->Range(4UL, 2UL << maxColPairsRange);
263+
264+
static void BM_EventMixingCombGenCollisionsPairsSameCategories(benchmark::State& state)
265+
{
266+
// Seed with a real random value, if available
267+
std::default_random_engine e1(1234567891);
268+
std::uniform_real_distribution<float> uniform_dist(0.f, 1.f);
269+
std::uniform_real_distribution<float> uniform_dist_x(-0.065f, 0.073f);
270+
std::uniform_real_distribution<float> uniform_dist_y(-0.320f, 0.360f);
271+
std::uniform_int_distribution<int> uniform_dist_int(0, 5);
272+
273+
std::vector<double> xBins{VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
274+
std::vector<double> yBins{VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
275+
using BinningType = ColumnBinningPolicy<o2::aod::collision::PosX, o2::aod::collision::PosY>;
276+
BinningType binningOnPositions{{xBins, yBins}, true}; // true is for 'ignore overflows' (true by default)
277+
278+
TableBuilder colBuilder;
279+
auto rowWriterCol = colBuilder.cursor<o2::aod::Collisions>();
280+
for (auto i = 0; i < state.range(0); ++i) {
281+
float x = uniform_dist_x(e1);
282+
float y = uniform_dist_y(e1);
283+
rowWriterCol(0, uniform_dist_int(e1),
284+
x, y, uniform_dist(e1),
285+
uniform_dist(e1), uniform_dist(e1), uniform_dist(e1),
286+
uniform_dist(e1), uniform_dist(e1), uniform_dist(e1),
287+
uniform_dist_int(e1), uniform_dist(e1),
288+
uniform_dist_int(e1),
289+
uniform_dist(e1), uniform_dist(e1));
290+
}
291+
auto tableCol = colBuilder.finalize();
292+
o2::aod::Collisions collisions{tableCol};
293+
294+
int64_t colCount = 0;
295+
296+
for (auto _ : state) {
297+
colCount = 0;
298+
for (auto& comb : combinations(CombinationsBlockUpperSameIndexPolicy(binningOnPositions, numEventsToMix - 1, -1, collisions, collisions))) {
299+
colCount++;
300+
}
301+
benchmark::DoNotOptimize(colCount);
302+
}
303+
state.counters["Mixed collision pairs"] = colCount;
304+
state.SetBytesProcessed(state.iterations() * sizeof(float) * colCount);
305+
}
306+
307+
BENCHMARK(BM_EventMixingCombGenCollisionsPairsSameCategories)->RangeMultiplier(2)->Range(4UL, 2UL << maxColPairsRange);
200308

201309
BENCHMARK_MAIN();

0 commit comments

Comments
 (0)