Skip to content

Commit 6709872

Browse files
authored
Merge c9c2844 into sapling-pr-archive-ktf
2 parents 12db688 + c9c2844 commit 6709872

File tree

10 files changed

+373
-154
lines changed

10 files changed

+373
-154
lines changed

Detectors/ITSMFT/MFT/calibration/include/MFTCalibration/NoiseCalibratorSpec.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,17 +56,17 @@ class NoiseCalibratorSpec : public Task
5656
void sendOutputCcdbMerge(DataAllocator& output);
5757
void sendOutputCcdbDcs(DataAllocator& output);
5858
void sendOutputDcs(DataAllocator& output);
59+
void sendOutputDcsMerge(DataAllocator& output);
5960
void setOutputDcs(const o2::itsmft::NoiseMap& payload);
6061
o2::itsmft::NoiseMap mNoiseMap{936};
6162
std::unique_ptr<CALIBRATOR> mCalibrator = nullptr;
6263
std::shared_ptr<o2::base::GRPGeomRequest> mCCDBRequest;
6364
std::string mPath;
64-
std::string mPathMerge;
65+
std::string mPathSingle;
6566
std::string mMeta;
6667

6768
std::vector<std::array<int, 3>> mNoiseMapForDcs;
6869
std::string mPathDcs;
69-
std::string mPathDcsMerge;
7070
std::string mOutputType;
7171

7272
double mThresh;

Detectors/ITSMFT/MFT/calibration/src/NoiseCalibratorSpec.cxx

Lines changed: 81 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ void NoiseCalibratorSpec::init(InitContext& ic)
4848
LOGP(info, "Setting the probability threshold to {} with relative error {}", probT, probTRelErr);
4949
mStopMeOnly = ic.options().get<bool>("stop-me-only");
5050
mPath = ic.options().get<std::string>("path-CCDB");
51-
mPathMerge = ic.options().get<std::string>("path-CCDB-merge");
51+
mPathSingle = ic.options().get<std::string>("path-CCDB-single");
5252

5353
mMeta = ic.options().get<std::string>("meta");
5454
mStart = ic.options().get<int64_t>("tstart");
@@ -173,7 +173,7 @@ void NoiseCalibratorSpec::sendOutputCcdbDcs(DataAllocator& output)
173173
const auto& payload = mCalibrator->getNoiseMap();
174174
// const auto& payload = mCalibrator->getNoiseMap(starTF, endTF); //For TimeSlot calibration
175175

176-
o2::ccdb::CcdbObjectInfo info(mPath, "NoiseMap", "noise.root", meta, tstart, tend);
176+
o2::ccdb::CcdbObjectInfo info(mPathSingle, "NoiseMap", "noise.root", meta, tstart, tend);
177177
auto flName = o2::ccdb::CcdbApi::generateFileName("noise");
178178
auto image = o2::ccdb::CcdbApi::createObjectImage(&payload, &info);
179179
info.setFileName(flName);
@@ -244,7 +244,7 @@ void NoiseCalibratorSpec::sendOutputCcdb(DataAllocator& output)
244244
const auto& payload = mCalibrator->getNoiseMap();
245245
// const auto& payload = mCalibrator->getNoiseMap(starTF, endTF); //For TimeSlot calibration
246246

247-
o2::ccdb::CcdbObjectInfo info(mPath, "NoiseMap", "noise.root", meta, tstart, tend);
247+
o2::ccdb::CcdbObjectInfo info(mPathSingle, "NoiseMap", "noise.root", meta, tstart, tend);
248248
auto flName = o2::ccdb::CcdbApi::generateFileName("noise");
249249
auto image = o2::ccdb::CcdbApi::createObjectImage(&payload, &info);
250250
info.setFileName(flName);
@@ -301,16 +301,16 @@ void NoiseCalibratorSpec::sendOutputCcdbMerge(DataAllocator& output)
301301
// const auto& payload = mCalibrator->getNoiseMap(starTF, endTF); //For TimeSlot calibration
302302
map<string, string> headers;
303303
map<std::string, std::string> filter;
304-
auto* payloadPrev1 = api.retrieveFromTFileAny<o2::itsmft::NoiseMap>(mPath, filter, -1, &headers);
304+
auto* payloadPrev1 = api.retrieveFromTFileAny<o2::itsmft::NoiseMap>(mPathSingle, filter, -1, &headers);
305305
long validtime = std::stol(headers["Valid-From"]);
306306
auto mergedPL = payload;
307307
if (validtime > 0) {
308308
validtime = validtime - 1;
309-
auto* payloadPrev2 = api.retrieveFromTFileAny<o2::itsmft::NoiseMap>(mPath, filter, validtime, &headers);
309+
auto* payloadPrev2 = api.retrieveFromTFileAny<o2::itsmft::NoiseMap>(mPathSingle, filter, validtime, &headers);
310310
auto bufferPL = payloadPrev2->merge(payloadPrev1);
311311
mergedPL = payload.merge(&bufferPL);
312312
}
313-
o2::ccdb::CcdbObjectInfo info(mPathMerge, "NoiseMap", "noise.root", meta, tstart, tend);
313+
o2::ccdb::CcdbObjectInfo info(mPath, "NoiseMap", "noise.root", meta, tstart, tend);
314314
auto flName = o2::ccdb::CcdbApi::generateFileName("noise");
315315
auto image = o2::ccdb::CcdbApi::createObjectImage(&mergedPL, &info);
316316
info.setFileName(flName);
@@ -382,6 +382,75 @@ void NoiseCalibratorSpec::sendOutputDcs(DataAllocator& output)
382382
output.snapshot(Output{clbUtilsDcs::gDataOriginCDBWrapper, "MFT_NoiseMap", 0}, infoDcs);
383383
}
384384

385+
void NoiseCalibratorSpec::sendOutputDcsMerge(DataAllocator& output)
386+
{
387+
388+
LOG(info) << "DCS mode";
389+
390+
static bool done = false;
391+
if (done) {
392+
return;
393+
}
394+
done = true;
395+
396+
mCalibrator->finalize();
397+
398+
long tstart = mStart;
399+
if (tstart == -1) {
400+
tstart = o2::ccdb::getCurrentTimestamp();
401+
}
402+
long tend = mEnd;
403+
if (tend == -1) {
404+
constexpr long SECONDSPERYEAR = 365 * 24 * 60 * 60;
405+
tend = o2::ccdb::getFutureTimestamp(SECONDSPERYEAR);
406+
}
407+
408+
std::map<std::string, std::string> meta;
409+
auto toKeyValPairs = [&meta](std::vector<std::string> const& tokens) {
410+
for (auto& token : tokens) {
411+
auto keyval = Str::tokenize(token, '=', false);
412+
if (keyval.size() != 2) {
413+
LOG(error) << "Illegal command-line key/value string: " << token;
414+
continue;
415+
}
416+
Str::trim(keyval[1]);
417+
meta[keyval[0]] = keyval[1];
418+
}
419+
};
420+
toKeyValPairs(Str::tokenize(mMeta, ';', true));
421+
422+
long startTF, endTF;
423+
424+
auto payload = mCalibrator->getNoiseMap();
425+
// const auto& payload = mCalibrator->getNoiseMap(starTF, endTF); //For TimeSlot calibration
426+
427+
map<string, string> headers;
428+
map<std::string, std::string> filter;
429+
auto* payloadPrev1 = api.retrieveFromTFileAny<o2::itsmft::NoiseMap>(mPathSingle, filter, -1, &headers);
430+
long validtime = std::stol(headers["Valid-From"]);
431+
auto mergedPL = payload;
432+
if (validtime > 0) {
433+
validtime = validtime - 1;
434+
auto* payloadPrev2 = api.retrieveFromTFileAny<o2::itsmft::NoiseMap>(mPathSingle, filter, validtime, &headers);
435+
auto bufferPL = payloadPrev2->merge(payloadPrev1);
436+
mergedPL = payload.merge(&bufferPL);
437+
}
438+
439+
setOutputDcs(mergedPL);
440+
o2::ccdb::CcdbObjectInfo infoDcs(mPathDcs, "NoiseMap", "noise.root", meta, tstart, tend);
441+
auto flNameDcs = o2::ccdb::CcdbApi::generateFileName("noise");
442+
auto imageDcs = o2::ccdb::CcdbApi::createObjectImage(&mNoiseMapForDcs, &infoDcs);
443+
infoDcs.setFileName(flNameDcs);
444+
LOG(info) << "Sending object " << infoDcs.getPath() << "/" << infoDcs.getFileName()
445+
<< " of size " << imageDcs->size()
446+
<< " bytes, valid for " << infoDcs.getStartValidityTimestamp()
447+
<< " : " << infoDcs.getEndValidityTimestamp();
448+
449+
using clbUtilsDcs = o2::calibration::Utils;
450+
output.snapshot(Output{clbUtilsDcs::gDataOriginCDBPayload, "MFT_NoiseMap", 0}, *imageDcs.get());
451+
output.snapshot(Output{clbUtilsDcs::gDataOriginCDBWrapper, "MFT_NoiseMap", 0}, infoDcs);
452+
}
453+
385454
void NoiseCalibratorSpec::endOfStream(o2::framework::EndOfStreamContext& ec)
386455
{
387456
if (mOutputType.compare("CCDB") == 0) {
@@ -390,11 +459,12 @@ void NoiseCalibratorSpec::endOfStream(o2::framework::EndOfStreamContext& ec)
390459
LOG(info) << "Sending an object to Production-CCDB-Merge";
391460
sendOutputCcdbMerge(ec.outputs());
392461
} else if (mOutputType.compare("DCS") == 0) {
393-
LOG(info) << "Sending an object to DCS-CCDB";
394-
sendOutputDcs(ec.outputs());
462+
LOG(info) << "Sending an object to DCS-Merge";
463+
sendOutputDcsMerge(ec.outputs());
395464
} else {
396-
LOG(info) << "Sending an object to Production-CCDB and DCS-CCDB";
397-
sendOutputCcdbDcs(ec.outputs());
465+
LOG(info) << "Sending an object to Production-CCDB, Production-CCDB-Merge and DCS-Merge";
466+
sendOutputCcdb(ec.outputs());
467+
sendOutputDcsMerge(ec.outputs());
398468
sendOutputCcdbMerge(ec.outputs());
399469
}
400470
}
@@ -454,7 +524,7 @@ DataProcessorSpec getNoiseCalibratorSpec(bool useDigits)
454524
{"tstart", VariantType::Int64, -1ll, {"Start of validity timestamp"}},
455525
{"tend", VariantType::Int64, -1ll, {"End of validity timestamp"}},
456526
{"path-CCDB", VariantType::String, "/MFT/Calib/NoiseMap", {"Path to write to in CCDB"}},
457-
{"path-CCDB-merge", VariantType::String, "/MFT/Calib/NoiseMapMerged", {"Path to write merged file to in CCDB"}},
527+
{"path-CCDB-single", VariantType::String, "/MFT/Calib/NoiseMapSingle", {"Path to write merged file to in CCDB"}},
458528
{"path-DCS", VariantType::String, "/MFT/Config/NoiseMap", {"Path to write to in DCS"}},
459529
{"meta", VariantType::String, "", {"meta data to write in CCDB"}},
460530
{"send-to-server", VariantType::String, "CCDB-DCS", {"meta data to write in DCS-CCDB"}},

Framework/Core/include/Framework/DeviceMetricsInfo.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@
1212
#ifndef O2_FRAMEWORK_DEVICEMETRICSINFO_H_
1313
#define O2_FRAMEWORK_DEVICEMETRICSINFO_H_
1414

15-
#include "Framework/RuntimeError.h"
1615
#include "Framework/CompilerBuiltins.h"
1716
#include "Framework/Traits.h"
1817
#include <array>
1918
#include <cstddef>
2019
#include <cstdint>
2120
#include <span>
2221
#include <vector>
22+
#include <iosfwd>
2323

2424
namespace o2::framework
2525
{

GPU/GPUTracking/Global/GPUChainTrackingClusterizer.cxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -706,6 +706,8 @@ int32_t GPUChainTracking::RunTPCClusterizer(bool synchronizeOutput)
706706
nnApplications[lane].initClusterizer(nn_settings, clustererNNShadow);
707707
}
708708
AllocateRegisteredMemory(clustererNN.mMemoryId);
709+
// nnApplications[lane].createBoundary(clustererNNShadow);
710+
// nnApplications[lane].createIndexLookup(clustererNNShadow);
709711
});
710712
if (doGPU) {
711713
WriteToConstantMemory(RecoStep::TPCClusterFinding, (char*)&processors()->tpcNNClusterer - (char*)processors(), &processorsShadow()->tpcNNClusterer, sizeof(GPUTPCNNClusterizer) * NSECTORS, mRec->NStreams() - 1, &mEvents->init);

GPU/GPUTracking/TPCClusterFinder/GPUTPCNNClusterizer.cxx

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -65,33 +65,6 @@ void* GPUTPCNNClusterizer::setIOPointers(void* mem)
6565
return mem;
6666
}
6767

68-
// std::vector<int32_t> GPUTPCNNClusterizer::pointerSizes() {
69-
// std::vector<int32_t> sizes(7, -1);
70-
// if (mNnClusterizerBatchedMode > 0) {
71-
// if (mNnInferenceInputDType == 0 && mNnClusterizerElementSize > 0) {
72-
// sizes[0] = mNnClusterizerBatchedMode * mNnClusterizerElementSize; // inputData16
73-
// } else if (mNnInferenceInputDType == 1 && mNnClusterizerElementSize > 0) {
74-
// sizes[1] = mNnClusterizerBatchedMode * mNnClusterizerElementSize; // inputData32
75-
// }
76-
// sizes[2] = 2 * mNnClusterizerBatchedMode; // mClusterFlags
77-
// if (mNnClusterizerModelClassNumOutputNodes > 0) {
78-
// sizes[3] = mNnClusterizerBatchedMode * mNnClusterizerModelClassNumOutputNodes; // modelProbabilities
79-
// }
80-
// if (!mNnClusterizerUseCfRegression) {
81-
// if (mNnClusterizerModelReg1NumOutputNodes > 0) {
82-
// sizes[4] = mNnClusterizerBatchedMode * mNnClusterizerModelReg1NumOutputNodes; // outputDataReg1
83-
// }
84-
// if (mNnClusterizerModelReg2NumOutputNodes > 0) {
85-
// sizes[5] = mNnClusterizerBatchedMode * mNnClusterizerModelReg2NumOutputNodes; // outputDataReg2
86-
// }
87-
// }
88-
// }
89-
// if (mNnClusterizerTotalClusters > 0) {
90-
// sizes[6] = mNnClusterizerTotalClusters; // mOutputDataClass
91-
// }
92-
// return sizes;
93-
// }
94-
9568
void GPUTPCNNClusterizer::RegisterMemoryAllocation()
9669
{
9770
AllocateAndInitializeLate();

GPU/GPUTracking/TPCClusterFinder/GPUTPCNNClusterizer.h

Lines changed: 41 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -37,31 +37,51 @@ class GPUTPCNNClusterizer : public GPUProcessor
3737

3838
// Neural network clusterization
3939

40-
int mNnClusterizerSizeInputRow = 3;
41-
int mNnClusterizerSizeInputPad = 3;
42-
int mNnClusterizerSizeInputTime = 3;
43-
int mNnClusterizerElementSize = -1;
44-
bool mNnClusterizerAddIndexData = true;
40+
int32_t mNnClusterizerSizeInputRow = 3;
41+
int32_t mNnClusterizerSizeInputPad = 3;
42+
int32_t mNnClusterizerSizeInputTime = 3;
43+
int32_t mNnClusterizerChargeArraySize = -1;
44+
int32_t mNnClusterizerElementSize = -1;
45+
int8_t mNnClusterizerAddIndexData = 1;
4546
float mNnClassThreshold = 0.01;
46-
bool mNnSigmoidTrafoClassThreshold = 1;
47-
bool mNnClusterizerSetDeconvolutionFlags = true;
48-
int mNnClusterizerUseCfRegression = 0;
49-
int mNnClusterizerBatchedMode = 1;
50-
int mNnClusterizerTotalClusters = 1;
51-
int mNnClusterizerVerbosity = 0;
52-
int mNnClusterizerBoundaryFillValue = -1;
53-
int mNnClusterizerModelClassNumOutputNodes = -1;
54-
int mNnClusterizerModelReg1NumOutputNodes = -1;
55-
int mNnClusterizerModelReg2NumOutputNodes = -1;
56-
int mNnInferenceInputDType = 0; // 0: float16, 1: float32
57-
int mNnInferenceOutputDType = 0; // 0: float16, 1: float32
58-
int mISector = -1;
59-
int mDeviceId = -1;
47+
int8_t mNnSigmoidTrafoClassThreshold = 1;
48+
int8_t mNnClusterizerSetDeconvolutionFlags = 1;
49+
int32_t mNnClusterizerUseCfRegression = 0;
50+
int32_t mNnClusterizerBatchedMode = 1;
51+
int32_t mNnClusterizerTotalClusters = 1;
52+
int32_t mNnClusterizerVerbosity = 0;
53+
int32_t mNnClusterizerBoundaryFillValue = -1;
54+
int32_t mNnClusterizerModelClassNumOutputNodes = -1;
55+
int32_t mNnClusterizerModelReg1NumOutputNodes = -1;
56+
int32_t mNnClusterizerModelReg2NumOutputNodes = -1;
57+
int32_t mNnInferenceInputDType = 0; // 0: float16, 1: float32
58+
int32_t mNnInferenceOutputDType = 0; // 0: float16, 1: float32
59+
int32_t mISector = -1;
60+
int32_t mDeviceId = -1;
61+
62+
// GPU optimizations
63+
uint32_t mNnClusterizerFullRowSize = 0;
64+
uint32_t mNnClusterizerFullPadSize = 0;
65+
uint32_t mNnClusterizerFullTimeSize = 0;
66+
uint32_t mNnClusterizerPadTimeSize = 0;
67+
uint32_t mNnClusterizerRowTimeSize = 0;
68+
uint32_t mNnClusterizerRowTimeSizeFull = 0;
69+
70+
// Boundary lookup table
71+
// int32_t mBoundaryMapSizeRow = 0;
72+
// int32_t mBoundaryMapSizePadsPerRow = 0;
73+
// int32_t mBoundaryMapSize = 0;
74+
// int32_t mBoundaryPadding = 11; // Padding on each side of the boundary map to account for pad_offset
75+
// int8_t* mIsBoundary = nullptr;
76+
77+
// Index lookup table
78+
// int32_t mIndexLookupSize = 0;
79+
// int32_t* mIndexLookup = nullptr;
6080

6181
// Memory allocation for neural network
6282

63-
bool* mClusterFlags = nullptr; // mSplitInTime, mSplitInPad. Techincally both flags are set in the same way -> ClusterAccumulator.cx=nullptr
64-
int* mOutputDataClass = nullptr;
83+
int8_t* mClusterFlags = nullptr; // mSplitInTime, mSplitInPad. Techincally both flags are set in the same way -> ClusterAccumulator.cx=nullptr
84+
int32_t* mOutputDataClass = nullptr;
6585

6686
// FP32
6787
float* mInputData_32 = nullptr;

GPU/GPUTracking/TPCClusterFinder/GPUTPCNNClusterizerHost.cxx

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
#include "GPUSettings.h"
2020
#include "ML/3rdparty/GPUORTFloat16.h"
2121
#include "GPUReconstruction.h"
22+
#include "GPUTPCGeometry.h"
23+
#include "DataFormatsTPC/Constants.h"
2224

2325
#ifdef GPUCA_HAS_ONNX
2426
#include <onnxruntime_cxx_api.h>
@@ -87,8 +89,20 @@ void GPUTPCNNClusterizerHost::initClusterizer(const GPUSettingsProcessingNNclust
8789
clustererNN.mNnClusterizerSizeInputRow = settings.nnClusterizerSizeInputRow;
8890
clustererNN.mNnClusterizerSizeInputPad = settings.nnClusterizerSizeInputPad;
8991
clustererNN.mNnClusterizerSizeInputTime = settings.nnClusterizerSizeInputTime;
92+
clustererNN.mNnClusterizerFullRowSize = 2 * settings.nnClusterizerSizeInputRow + 1;
93+
clustererNN.mNnClusterizerFullPadSize = 2 * settings.nnClusterizerSizeInputPad + 1;
94+
clustererNN.mNnClusterizerFullTimeSize = 2 * settings.nnClusterizerSizeInputTime + 1;
95+
clustererNN.mNnClusterizerChargeArraySize = clustererNN.mNnClusterizerFullRowSize * clustererNN.mNnClusterizerFullPadSize * clustererNN.mNnClusterizerFullTimeSize;
96+
clustererNN.mNnClusterizerPadTimeSize = clustererNN.mNnClusterizerFullPadSize * clustererNN.mNnClusterizerFullTimeSize;
97+
clustererNN.mNnClusterizerRowTimeSize = clustererNN.mNnClusterizerFullRowSize * clustererNN.mNnClusterizerFullTimeSize;
98+
clustererNN.mNnClusterizerRowTimeSizeFull = clustererNN.mNnClusterizerRowTimeSize + (settings.nnClusterizerAddIndexData ? 3 : 0);
99+
clustererNN.mNnClusterizerElementSize = clustererNN.mNnClusterizerChargeArraySize + (settings.nnClusterizerAddIndexData ? 3 : 0);
100+
// clustererNN.mBoundaryMapSizeRow = 3 * clustererNN.mNnClusterizerSizeInputRow + o2::tpc::constants::MAXGLOBALPADROW;
101+
// clustererNN.mBoundaryPadding = 11; // padding on each side to account for pad_offset. N=11 since then mIsBoundary = 24320 ~< (1.5 x 2^14 = 24576) && N must be bigger than (NPads[row(end_iroc + 1)] - NPads[row(end_iroc)])/2 (=6) for pad_offset to work
102+
// clustererNN.mBoundaryMapSizePadsPerRow = GPUTPCGeometry::NPads(o2::tpc::constants::MAXGLOBALPADROW - 1) + 2 * clustererNN.mBoundaryPadding;
103+
// clustererNN.mBoundaryMapSize = clustererNN.mBoundaryMapSizeRow * clustererNN.mBoundaryMapSizePadsPerRow;
104+
// clustererNN.mIndexLookupSize = 3 * clustererNN.mNnClusterizerChargeArraySize; // local row, pad, time shift from flat index
90105
clustererNN.mNnClusterizerAddIndexData = settings.nnClusterizerAddIndexData;
91-
clustererNN.mNnClusterizerElementSize = ((2 * settings.nnClusterizerSizeInputRow + 1) * (2 * settings.nnClusterizerSizeInputPad + 1) * (2 * settings.nnClusterizerSizeInputTime + 1)) + (settings.nnClusterizerAddIndexData ? 3 : 0);
92106
clustererNN.mNnClusterizerBatchedMode = settings.nnClusterizerBatchedMode;
93107
clustererNN.mNnClusterizerBoundaryFillValue = settings.nnClusterizerBoundaryFillValue;
94108
clustererNN.mNnSigmoidTrafoClassThreshold = settings.nnSigmoidTrafoClassThreshold;
@@ -116,6 +130,39 @@ void GPUTPCNNClusterizerHost::initClusterizer(const GPUSettingsProcessingNNclust
116130
}
117131
}
118132

133+
// void GPUTPCNNClusterizerHost::createBoundary(GPUTPCNNClusterizer& clustererNN)
134+
// {
135+
// // Call after init of the clustererNN elements
136+
// for (int r = 0; r < clustererNN.mBoundaryMapSizeRow; r++) {
137+
// int8_t skipCheckInRow = 0;
138+
// for (int p = 0; p < clustererNN.mBoundaryMapSizePadsPerRow; p++) {
139+
// int32_t i = r * clustererNN.mBoundaryMapSizePadsPerRow + p;
140+
// clustererNN.mIsBoundary[i] = 1;
141+
// if (!skipCheckInRow && (p >= clustererNN.mBoundaryPadding || r >= clustererNN.mNnClusterizerSizeInputRow)) {
142+
// if (r < (GPUTPCGeometry::EndIROC() + clustererNN.mNnClusterizerSizeInputRow)) {
143+
// clustererNN.mIsBoundary[i] = (int32_t)((p - clustererNN.mBoundaryPadding) >= static_cast<int>(GPUTPCGeometry::NPads(r - clustererNN.mNnClusterizerSizeInputRow)));
144+
// } else if (r >= (GPUTPCGeometry::EndIROC() + 2 * clustererNN.mNnClusterizerSizeInputRow) && r < (o2::tpc::constants::MAXGLOBALPADROW + 2 * clustererNN.mNnClusterizerSizeInputRow)) {
145+
// clustererNN.mIsBoundary[i] = (int32_t)((p - clustererNN.mBoundaryPadding) >= static_cast<int>(GPUTPCGeometry::NPads(r - 2 * clustererNN.mNnClusterizerSizeInputRow)));
146+
// }
147+
// skipCheckInRow = (clustererNN.mIsBoundary[i] == 1); // No need to check further pads in this row
148+
// }
149+
// }
150+
// }
151+
// }
152+
153+
// void GPUTPCNNClusterizerHost::createIndexLookup(GPUTPCNNClusterizer& clustererNN)
154+
// {
155+
// for (int32_t i = 0; i < clustererNN.mNnClusterizerChargeArraySize; i++) {
156+
// int32_t r = CAMath::Floor(i / ((2 * clustererNN.mNnClusterizerSizeInputPad + 1) * (2 * clustererNN.mNnClusterizerSizeInputTime + 1))) - clustererNN.mNnClusterizerSizeInputRow;
157+
// int32_t rest_1 = i % ((2 * clustererNN.mNnClusterizerSizeInputPad + 1) * (2 * clustererNN.mNnClusterizerSizeInputTime + 1));
158+
// int32_t p = CAMath::Floor(rest_1 / (2 * clustererNN.mNnClusterizerSizeInputTime + 1)) - clustererNN.mNnClusterizerSizeInputPad;
159+
// int32_t t = (rest_1 % (2 * clustererNN.mNnClusterizerSizeInputTime + 1)) - clustererNN.mNnClusterizerSizeInputTime;
160+
// clustererNN.mIndexLookup[3 * i] = r;
161+
// clustererNN.mIndexLookup[3 * i + 1] = p;
162+
// clustererNN.mIndexLookup[3 * i + 2] = t;
163+
// }
164+
// }
165+
119166
// MockedOrtAllocator implementation to be able to use volatile assignment
120167
struct MockedOrtAllocator : OrtAllocator {
121168
MockedOrtAllocator(GPUReconstruction* = nullptr, OrtMemoryInfo* = nullptr);

GPU/GPUTracking/TPCClusterFinder/GPUTPCNNClusterizerHost.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ class GPUTPCNNClusterizerHost
4949

5050
void init(const GPUSettingsProcessingNNclusterizer&);
5151
void initClusterizer(const GPUSettingsProcessingNNclusterizer&, GPUTPCNNClusterizer&);
52+
void createBoundary(GPUTPCNNClusterizer&);
53+
void createIndexLookup(GPUTPCNNClusterizer&);
5254

5355
// ONNX
5456
void directOrtAllocator(Ort::Env*, Ort::MemoryInfo*, GPUReconstruction*, bool = false);

0 commit comments

Comments
 (0)