16#include <benchmark/benchmark.h>
40static void BM_EventMixingTraditional(benchmark::State& state)
43 std::default_random_engine e1(1234567891);
44 std::uniform_real_distribution<float>
uniform_dist(0.f, 1.f);
45 std::uniform_real_distribution<float> uniform_dist_x(-0.065f, 0.073f);
46 std::uniform_real_distribution<float> uniform_dist_y(-0.320f, 0.360f);
47 std::uniform_int_distribution<int> uniform_dist_int(0, 5);
49 std::vector<double> xBins{
VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
50 std::vector<double> yBins{
VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
52 BinningType binningOnPositions{{xBins, yBins},
true};
56 for (
auto i = 0;
i <
state.range(0); ++
i) {
57 float x = uniform_dist_x(e1);
58 float y = uniform_dist_y(e1);
59 rowWriterCol(0, uniform_dist_int(e1),
67 auto tableCol = colBuilder.
finalize();
69 std::uniform_int_distribution<int> uniform_dist_col_ind(0, collisions.size());
71 auto rowWriterTrack = trackBuilder.
cursor<o2::aod::StoredTracks>();
73 rowWriterTrack(0, uniform_dist_col_ind(e1), 0,
78 auto tableTrack = trackBuilder.
finalize();
79 o2::aod::StoredTracks tracks{tableTrack};
82 auto s = atscache.updateCacheEntry(0, tableTrack);
87 int nBinsTot = (xBins.size() - 2) * (yBins.size() - 2);
89 for (
auto _ :
state) {
93 std::vector<std::list<o2::aod::Collisions::iterator>> mixingBufferVector;
94 for (
int i = 0;
i < nBinsTot;
i++) {
95 mixingBufferVector.push_back(std::list<o2::aod::Collisions::iterator>());
97 for (
auto& col1 : collisions) {
98 int bin = binningOnPositions.getBin({col1.posX(), col1.posY()});
103 auto& mixingBuffer = mixingBufferVector[bin];
105 if (mixingBuffer.size() > 0) {
106 auto tracks1 = tracks.sliceByCached(o2::aod::track::collisionId, col1.globalIndex(), cache);
107 for (
auto& col2 : mixingBuffer) {
108 auto tracks2 = tracks.sliceByCached(o2::aod::track::collisionId, col2.globalIndex(), cache);
115 mixingBuffer.pop_back();
118 mixingBuffer.push_front(col1);
121 benchmark::DoNotOptimize(
count);
122 benchmark::DoNotOptimize(colCount);
125 state.counters[
"Mixed collision pairs"] = colCount;
131static void BM_EventMixingCombinations(benchmark::State& state)
134 std::default_random_engine e1(1234567891);
135 std::uniform_real_distribution<float>
uniform_dist(0.f, 1.f);
136 std::uniform_real_distribution<float> uniform_dist_x(-0.065f, 0.073f);
137 std::uniform_real_distribution<float> uniform_dist_y(-0.320f, 0.360f);
138 std::uniform_int_distribution<int> uniform_dist_int(0, 5);
140 std::vector<double> xBins{
VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
141 std::vector<double> yBins{
VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
143 BinningType binningOnPositions{{xBins, yBins},
true};
147 for (
auto i = 0;
i <
state.range(0); ++
i) {
148 float x = uniform_dist_x(e1);
149 float y = uniform_dist_y(e1);
150 rowWriterCol(0, uniform_dist_int(e1),
155 uniform_dist_int(e1),
158 auto tableCol = colBuilder.
finalize();
160 std::uniform_int_distribution<int> uniform_dist_col_ind(0, collisions.size());
162 auto rowWriterTrack = trackBuilder.
cursor<o2::aod::StoredTracks>();
164 rowWriterTrack(0, uniform_dist_col_ind(e1), 0,
169 auto tableTrack = trackBuilder.
finalize();
170 o2::aod::StoredTracks tracks{tableTrack};
173 int64_t colCount = 0;
174 ArrowTableSlicingCache atscache{{{getLabelFromType<o2::aod::StoredTracks>(),
"fIndex" + getLabelFromType<o2::aod::Collisions>()}}};
175 auto s = atscache.updateCacheEntry(0, tableTrack);
178 for (
auto _ :
state) {
182 auto tracksTuple = std::make_tuple(tracks);
184 for (
auto& [
c1, tracks1,
c2, tracks2] : pair) {
185 int bin = binningOnPositions.getBin({
c1.posX(),
c1.posY()});
191 benchmark::DoNotOptimize(
count);
192 benchmark::DoNotOptimize(colCount);
195 state.counters[
"Mixed collision pairs"] = colCount;
uniform_int_distribution< long long > uniform_dist(32, 126)
bool const GPUTPCGMMerger::trackCluster * c1
bool const GPUTPCGMMerger::trackCluster const clcomparestruct * c2
constexpr unsigned int maxPairsRange
BENCHMARK(BM_EventMixingTraditional) -> RangeMultiplier(2) ->Range(4, 8<< maxPairsRange)
constexpr int numTracksPerEvent
constexpr int numEventsToMix
constexpr unsigned int maxFivesRange
std::shared_ptr< arrow::Table > finalize()
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat t1
Collisions_001 Collisions
Defining PrimaryVertex explicitly as messageable.
constexpr double VARIABLE_WIDTH
std::string cutString(std::string &&str)
auto combinations(const BP &binningPolicy, int categoryNeighbours, const T1 &outsider, const T2s &... tables)