Skip to content

Commit 55621f0

Browse files
committed
Merge branch 'onnxruntime-cpu' into gpu_clusterizer
2 parents 027e225 + c6cb3e6 commit 55621f0

274 files changed

Lines changed: 11180 additions & 3396 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CODEOWNERS

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
/Common/Constants @shahor02
1919
/Common/Field @shahor02
2020
/Common/MathUtils @shahor02
21-
/Common/SimConfig @sawenzel @benedikt-voelkel
21+
/Common/SimConfig @sawenzel
2222
#/Common/Topologies
2323
#/Common/Types
2424
/Common/Utils @sawenzel
@@ -37,10 +37,10 @@
3737
/DataFormats/Detectors/ITSMFT @mcoquet642 @mconcas @shahor02
3838
/DataFormats/Detectors/MUON @AliceO2Group/muon-experts @shahor02
3939
/DataFormats/Detectors/PHOS @peressounko @kharlov
40-
/DataFormats/Detectors/Passive @sawenzel @benedikt-voelkel
40+
/DataFormats/Detectors/Passive @sawenzel
4141
/DataFormats/Detectors/TOF @noferini
4242
/DataFormats/Detectors/TPC @davidrohr @wiechula @shahor02
43-
/DataFormats/Detectors/TRD @f3sch @bazinski @martenole @wille10
43+
/DataFormats/Detectors/TRD @f3sch @bazinski @wille10
4444
/DataFormats/Detectors/Upgrades @mconcas
4545
/DataFormats/Detectors/Upgrades/ITS3 @fgrosa @arossi81
4646
/DataFormats/Detectors/ZDC @coppedis
@@ -53,25 +53,25 @@
5353
/DataFormats/Reconstruction @shahor02
5454
#/DataFormats/TimeFrame
5555
/DataFormats/common @shahor02
56-
/DataFormats/simulation @sawenzel @benedikt-voelkel
56+
/DataFormats/simulation @sawenzel
5757

58-
/Detectors/Base @sawenzel @shahor02 @benedikt-voelkel
58+
/Detectors/Base @sawenzel @shahor02
5959
/Detectors/Calibration @chiarazampolli @shahor02
6060
/Detectors/CPV @peressounko @kharlov
6161
/Detectors/EMCAL @mfasDa @jokonig
6262
/Detectors/FIT @jotwinow @afurs @andreasmolander @arvindkhuntia @mslupeck
6363
/Detectors/FOCAL @maxrauch @mfasDa @iarsene @matthiasrichter
64-
/Detectors/Geometry @sawenzel @shahor02 @benedikt-voelkel
64+
/Detectors/Geometry @sawenzel @shahor02
6565
/Detectors/GlobalTracking @shahor02
6666
/Detectors/GlobalTrackingWorkflow @shahor02
6767
/Detectors/HMPID @gvolpe79
6868
/Detectors/ITSMFT @mcoquet642 @mconcas @shahor02
6969
/Detectors/MUON @AliceO2Group/muon-experts @shahor02
7070
/Detectors/PHOS @peressounko @kharlov
71-
/Detectors/Passive @sawenzel @benedikt-voelkel
71+
/Detectors/Passive @sawenzel
7272
/Detectors/TOF @noferini
7373
/Detectors/TPC @davidrohr @wiechula @shahor02
74-
/Detectors/TRD @f3sch @bazinski @martenole @wille10
74+
/Detectors/TRD @f3sch @bazinski @wille10
7575
/Detectors/Upgrades @mconcas
7676
/Detectors/Upgrades/ITS3 @fgrosa @arossi81 @mconcas @f3sch
7777
/Detectors/ZDC @coppedis
@@ -110,13 +110,13 @@
110110
/GPU @davidrohr
111111
#/GPU/Common
112112
#/GPU/GPUTracking
113-
/GPU/GPUTracking/TRDTracking @davidrohr @martenole
113+
/GPU/GPUTracking/TRDTracking @davidrohr
114114
/GPU/TPCFastTransformation @davidrohr @sgorbuno
115115
/GPU/TPCSpaceChargeBase @davidrohr @ehellbar
116116

117-
/Generators @sawenzel @benedikt-voelkel
117+
/Generators @sawenzel @jackal1-66
118118

119-
/Steer @sawenzel @shahor02 @benedikt-voelkel
119+
/Steer @sawenzel @shahor02
120120

121121
/Testing
122122

Common/Constants/include/CommonConstants/PhysicsConstants.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ enum Pdg {
7575
kHyperTriton = 1010010030,
7676
kHyperHydrogen4 = 1010010040,
7777
kHyperHelium4 = 1010020040,
78-
kHyperHelium5 = 1010020050
78+
kHyperHelium5 = 1010020050,
79+
kHyperHelium4Sigma = 1110020040
7980
};
8081

8182
/// \brief Declarations of masses for additional particles
@@ -124,6 +125,7 @@ constexpr double MassHyperTriton = 2.99131;
124125
constexpr double MassHyperHydrogen4 = 3.9226;
125126
constexpr double MassHyperHelium4 = 3.9217;
126127
constexpr double MassHyperHelium5 = 4.841;
128+
constexpr double MassHyperHelium4Sigma = 3.995;
127129

128130
/// \brief Declarations of masses for particles in ROOT PDG_t
129131
constexpr double MassDown = 0.00467;
@@ -194,6 +196,7 @@ constexpr double MassKaonNeutral = MassK0;
194196
constexpr double MassLambda = MassLambda0;
195197
constexpr double MassHyperhydrog4 = MassHyperHydrogen4;
196198
constexpr double MassHyperhelium4 = MassHyperHelium4;
199+
constexpr double MassHyperhelium4sigma = MassHyperHelium4Sigma;
197200

198201
// Light speed
199202
constexpr float LightSpeedCm2S = 299792458.e2; // C in cm/s

Common/Constants/include/CommonConstants/make_pdg_header.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ class Pdg(Enum):
131131
kHyperHydrogen4 = 1010010040
132132
kHyperHelium4 = 1010020040
133133
kHyperHelium5 = 1010020050
134+
kHyperHelium4Sigma = 1110020040
134135

135136

136137
dbPdg = ROOT.o2.O2DatabasePDG

Common/ML/src/ort_interface.cxx

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ void OrtModel::reset(std::unordered_map<std::string, std::string> optionsMap)
107107
(pImplOrt->sessionOptions).SetLogSeverityLevel(OrtLoggingLevel(loggingLevel));
108108

109109
pImplOrt->env = std::make_shared<Ort::Env>(OrtLoggingLevel(loggingLevel), (optionsMap["onnx-environment-name"].empty() ? "onnx_model_inference" : optionsMap["onnx-environment-name"].c_str()));
110-
(pImplOrt->session).reset(new Ort::Session{*(pImplOrt->env), modelPath.c_str(), pImplOrt->sessionOptions});
110+
pImplOrt->session = std::make_shared<Ort::Session>(*(pImplOrt->env), modelPath.c_str(), pImplOrt->sessionOptions);
111111

112112
for (size_t i = 0; i < (pImplOrt->session)->GetInputCount(); ++i) {
113113
mInputNames.push_back((pImplOrt->session)->GetInputNameAllocated(i, pImplOrt->allocator).get());
@@ -145,7 +145,7 @@ void OrtModel::reset(std::unordered_map<std::string, std::string> optionsMap)
145145

146146
void OrtModel::resetSession()
147147
{
148-
(pImplOrt->session).reset(new Ort::Session{*(pImplOrt->env), modelPath.c_str(), pImplOrt->sessionOptions});
148+
pImplOrt->session = std::make_shared<Ort::Session>(*(pImplOrt->env), modelPath.c_str(), pImplOrt->sessionOptions);
149149
}
150150

151151
template <class I, class O>
@@ -156,8 +156,9 @@ std::vector<O> OrtModel::v2v(std::vector<I>& input, bool clearInput)
156156
} else {
157157
std::vector<O> output(input.size());
158158
std::transform(std::begin(input), std::end(input), std::begin(output), [](I f) { return O(f); });
159-
if (clearInput)
159+
if (clearInput) {
160160
input.clear();
161+
}
161162
return output;
162163
}
163164
}
@@ -167,7 +168,7 @@ std::vector<O> OrtModel::inference(std::vector<I>& input)
167168
{
168169
std::vector<int64_t> inputShape{(int64_t)(input.size() / mInputShapes[0][1]), (int64_t)mInputShapes[0][1]};
169170
std::vector<Ort::Value> inputTensor;
170-
inputTensor.emplace_back(Ort::Value::CreateTensor<O>(pImplOrt->memoryInfo, (reinterpret_cast<O*>(input)).data(), input.size(), inputShape.data(), inputShape.size()));
171+
inputTensor.emplace_back(Ort::Value::CreateTensor<O>(pImplOrt->memoryInfo, reinterpret_cast<O*>(input.data()), input.size(), inputShape.data(), inputShape.size()));
171172
// input.clear();
172173
auto outputTensors = (pImplOrt->session)->Run(pImplOrt->runOptions, inputNamesChar.data(), inputTensor.data(), inputTensor.size(), outputNamesChar.data(), outputNamesChar.size());
173174
O* outputValues = reinterpret_cast<O*>(outputTensors[0].template GetTensorMutableData<O>());
@@ -182,7 +183,7 @@ std::vector<O> OrtModel::inference(std::vector<std::vector<I>>& input)
182183
std::vector<Ort::Value> inputTensor;
183184
for (auto i : input) {
184185
std::vector<int64_t> inputShape{(int64_t)(i.size() / mInputShapes[0][1]), (int64_t)mInputShapes[0][1]};
185-
inputTensor.emplace_back(Ort::Value::CreateTensor<O>(pImplOrt->memoryInfo, (reinterpret_cast<O*>(i)).data(), i.size(), inputShape.data(), inputShape.size()));
186+
inputTensor.emplace_back(Ort::Value::CreateTensor<O>(pImplOrt->memoryInfo, reinterpret_cast<O*>(i.data()), i.size(), inputShape.data(), inputShape.size()));
186187
}
187188
// input.clear();
188189
auto outputTensors = (pImplOrt->session)->Run(pImplOrt->runOptions, inputNamesChar.data(), inputTensor.data(), inputTensor.size(), outputNamesChar.data(), outputNamesChar.size());
@@ -195,8 +196,9 @@ std::vector<O> OrtModel::inference(std::vector<std::vector<I>>& input)
195196
std::string OrtModel::printShape(const std::vector<int64_t>& v)
196197
{
197198
std::stringstream ss("");
198-
for (size_t i = 0; i < v.size() - 1; i++)
199+
for (size_t i = 0; i < v.size() - 1; i++) {
199200
ss << v[i] << "x";
201+
}
200202
ss << v[v.size() - 1];
201203
return ss.str();
202204
}

Common/MathUtils/include/MathUtils/SMatrixGPU.h

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "GPUCommonMath.h"
3030
#include "GPUCommonAlgorithm.h"
3131
#include "GPUCommonLogger.h"
32+
#include "GPUCommonTypeTraits.h"
3233

3334
namespace o2::math_utils::detail
3435
{
@@ -446,6 +447,8 @@ class SMatrixGPU
446447
GPUdi() SMatrixGPU(SMatrixNoInit) {}
447448
GPUd() SMatrixGPU(SMatrixIdentity);
448449
GPUd() SMatrixGPU(const SMatrixGPU<T, D1, D2, R>& rhs);
450+
template <class R2>
451+
GPUd() SMatrixGPU(const SMatrixGPU<T, D1, D2, R2>& rhs);
449452
template <class A, class R2>
450453
GPUd() SMatrixGPU(const Expr<A, T, D1, D2, R2>& rhs);
451454
template <class M>
@@ -466,6 +469,9 @@ class SMatrixGPU
466469
GPUd() const T& operator()(unsigned int i, unsigned int j) const;
467470
GPUd() T& operator()(unsigned int i, unsigned int j);
468471

472+
template <typename Y, typename X>
473+
GPUd() friend X& operator<<(Y& y, const SMatrixGPU&);
474+
469475
class SMatrixRowGPU
470476
{
471477
public:
@@ -497,6 +503,11 @@ class SMatrixGPU
497503
GPUd() SMatrixRowGPU operator[](unsigned int i) { return SMatrixRowGPU(*this, i); }
498504
template <class R2>
499505
GPUd() SMatrixGPU<T, D1, D2, R>& operator+=(const SMatrixGPU<T, D1, D2, R2>& rhs);
506+
GPUd() SMatrixGPU<T, D1, D2, R>& operator*=(const T& rhs);
507+
template <class R2>
508+
GPUd() SMatrixGPU<T, D1, D2, R>& operator*=(const SMatrixGPU<T, D1, D2, R2>& rhs);
509+
template <class A, class R2>
510+
GPUd() SMatrixGPU<T, D1, D2, R>& operator*=(const Expr<A, T, D1, D2, R2>& rhs);
500511

501512
GPUd() bool Invert();
502513
GPUd() bool IsInUse(const T* p) const;
@@ -505,6 +516,15 @@ class SMatrixGPU
505516
R mRep;
506517
};
507518

519+
#ifndef __OPENCL__ // TODO: current C++ for OpenCL 2021 is at C++17, so no concepts. But we don't need this trick for OpenCL anyway, so we can just hide it.
520+
template <class T, unsigned int D1, unsigned int D2, class R, typename Y, typename X = Y>
521+
requires(sizeof(typename X::traits_type::pos_type) != 0) // do not provide a template to fair::Logger, etc... (pos_type is a member type of all std::ostream classes)
522+
GPUd() X& operator<<(Y& y, const SMatrixGPU<T, D1, D2, R>&)
523+
{
524+
return y;
525+
}
526+
#endif
527+
508528
template <class T, unsigned int D1, unsigned int D2, class R>
509529
GPUdi() SMatrixGPU<T, D1, D2, R>::SMatrixGPU(SMatrixIdentity)
510530
{
@@ -528,6 +548,13 @@ GPUdi() SMatrixGPU<T, D1, D2, R>::SMatrixGPU(const SMatrixGPU<T, D1, D2, R>& rhs
528548
mRep = rhs.mRep;
529549
}
530550

551+
template <class T, unsigned int D1, unsigned int D2, class R>
552+
template <class R2>
553+
GPUd() SMatrixGPU<T, D1, D2, R>::SMatrixGPU(const SMatrixGPU<T, D1, D2, R2>& rhs)
554+
{
555+
operator=(rhs);
556+
}
557+
531558
template <class T, unsigned int D1, unsigned int D2, class R>
532559
GPUdi() T* SMatrixGPU<T, D1, D2, R>::begin()
533560
{
@@ -1387,6 +1414,29 @@ GPUdi() SMatrixGPU<T, D1, D2, R>& SMatrixGPU<T, D1, D2, R>::operator+=(const SMa
13871414
return *this;
13881415
}
13891416

1417+
template <class T, unsigned int D1, unsigned int D2, class R>
1418+
GPUdi() SMatrixGPU<T, D1, D2, R>& SMatrixGPU<T, D1, D2, R>::operator*=(const T & rhs)
1419+
{
1420+
for (unsigned int i = 0; i < R::kSize; ++i) {
1421+
mRep.Array()[i] *= rhs;
1422+
}
1423+
return *this;
1424+
}
1425+
1426+
template <class T, unsigned int D1, unsigned int D2, class R>
1427+
template <class R2>
1428+
GPUdi() SMatrixGPU<T, D1, D2, R>& SMatrixGPU<T, D1, D2, R>::operator*=(const SMatrixGPU<T, D1, D2, R2>& rhs)
1429+
{
1430+
return operator=(*this* rhs);
1431+
}
1432+
1433+
template <class T, unsigned int D1, unsigned int D2, class R>
1434+
template <class A, class R2>
1435+
GPUdi() SMatrixGPU<T, D1, D2, R>& SMatrixGPU<T, D1, D2, R>::operator*=(const Expr<A, T, D1, D2, R2>& rhs)
1436+
{
1437+
return operator=(*this* rhs);
1438+
}
1439+
13901440
template <class T, unsigned int D1, unsigned int D2, class R>
13911441
struct TranspPolicyGPU {
13921442
enum {

Common/SimConfig/include/SimConfig/SimConfig.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ struct SimConfigData {
8383
bool mNoGeant = false; // if Geant transport should be turned off (when one is only interested in the generated events)
8484
bool mIsUpgrade = false; // true if the simulation is for Run 5
8585
std::string mFromCollisionContext = ""; // string denoting a collision context file; If given, this file will be used to determine number of events
86+
//
8687
bool mForwardKine = false; // true if tracks and event headers are to be published on a FairMQ channel (for reading by other consumers)
8788
bool mWriteToDisc = true; // whether we write simulation products (kine, hits) to disc
8889
VertexMode mVertexMode = VertexMode::kDiamondParam; // by default we should use die InteractionDiamond parameter
@@ -177,6 +178,10 @@ class SimConfig
177178
bool writeToDisc() const { return mConfigData.mWriteToDisc; }
178179
VertexMode getVertexMode() const { return mConfigData.mVertexMode; }
179180

181+
// returns the pair of collision context filename as well as event prefix encoded
182+
// in the mFromCollisionContext string. Returns empty string if information is not available or set.
183+
std::pair<std::string, std::string> getCollContextFilenameAndEventPrefix() const;
184+
180185
private:
181186
SimConfigData mConfigData; //!
182187

Common/SimConfig/src/SimConfig.cxx

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ void SimConfig::initOptions(boost::program_options::options_description& options
7676
"noGeant", bpo::bool_switch(), "prohibits any Geant transport/physics (by using tight cuts)")(
7777
"forwardKine", bpo::bool_switch(), "forward kinematics on a FairMQ channel")(
7878
"noDiscOutput", bpo::bool_switch(), "switch off writing sim results to disc (useful in combination with forwardKine)");
79-
options.add_options()("fromCollContext", bpo::value<std::string>()->default_value(""), "Use a pregenerated collision context to infer number of events to simulate, how to embedd them, the vertex position etc. Takes precedence of other options such as \"--nEvents\".");
79+
options.add_options()("fromCollContext", bpo::value<std::string>()->default_value(""), "Use a pregenerated collision context to infer number of events to simulate, how to embedd them, the vertex position etc. Takes precedence of other options such as \"--nEvents\". The format is COLLISIONCONTEXTFILE.root[:SIGNALNAME] where SIGNALNAME is the event part in the context which is relevant.");
8080
}
8181

8282
void SimConfig::determineActiveModules(std::vector<std::string> const& inputargs, std::vector<std::string> const& skippedModules, std::vector<std::string>& activeModules, bool isUpgrade)
@@ -270,6 +270,21 @@ void SimConfig::determineReadoutDetectors(std::vector<std::string> const& active
270270
}
271271
}
272272

273+
std::pair<std::string, std::string> SimConfig::getCollContextFilenameAndEventPrefix() const
274+
{
275+
// we decompose the argument to fetch
276+
// (a) collision contextfilename
277+
// (b) sim prefix to use from the context
278+
auto pos = mConfigData.mFromCollisionContext.find(':');
279+
std::string collcontextfile{mConfigData.mFromCollisionContext};
280+
std::string simprefix{mConfigData.mOutputPrefix};
281+
if (pos != std::string::npos) {
282+
collcontextfile = mConfigData.mFromCollisionContext.substr(0, pos);
283+
simprefix = mConfigData.mFromCollisionContext.substr(pos + 1);
284+
}
285+
return std::make_pair(collcontextfile, simprefix);
286+
}
287+
273288
bool SimConfig::resetFromParsedMap(boost::program_options::variables_map const& vm)
274289
{
275290
using o2::detectors::DetID;
@@ -333,17 +348,8 @@ bool SimConfig::resetFromParsedMap(boost::program_options::variables_map const&
333348
mConfigData.mFilterNoHitEvents = true;
334349
}
335350
mConfigData.mFromCollisionContext = vm["fromCollContext"].as<std::string>();
336-
// we decompose the argument to fetch
337-
// (a) collision contextfilename
338-
// (b) sim prefix to use from the context
339-
auto pos = mConfigData.mFromCollisionContext.find(':');
340-
std::string collcontextfile{mConfigData.mFromCollisionContext};
341-
std::string simprefix{mConfigData.mOutputPrefix};
342-
if (pos != std::string::npos) {
343-
collcontextfile = mConfigData.mFromCollisionContext.substr(0, pos);
344-
simprefix = mConfigData.mFromCollisionContext.substr(pos + 1);
345-
}
346-
adjustFromCollContext(collcontextfile, simprefix);
351+
auto collcontext_simprefix = getCollContextFilenameAndEventPrefix();
352+
adjustFromCollContext(collcontext_simprefix.first, collcontext_simprefix.second);
347353

348354
// analyse vertex options
349355
if (!parseVertexModeString(vm["vertexMode"].as<std::string>(), mConfigData.mVertexMode)) {

DataFormats/Detectors/TPC/include/DataFormatsTPC/CalibdEdxCorrection.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,8 @@ class CalibdEdxCorrection
9191

9292
void clear();
9393

94-
void writeToFile(std::string_view fileName) const;
95-
void loadFromFile(std::string_view fileName);
94+
void writeToFile(std::string_view fileName, std::string_view objName = "CalibdEdxCorrection") const;
95+
void loadFromFile(std::string_view fileName, std::string_view objName = "CalibdEdxCorrection");
9696

9797
/// \param outFileName name of the output file
9898
void dumpToTree(const char* outFileName = "calib_dedx.root") const;

DataFormats/Detectors/TPC/src/CalibdEdxCorrection.cxx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,16 @@ void CalibdEdxCorrection::clear()
3636
mDims = -1;
3737
}
3838

39-
void CalibdEdxCorrection::writeToFile(std::string_view fileName) const
39+
void CalibdEdxCorrection::writeToFile(std::string_view fileName, std::string_view objName) const
4040
{
4141
std::unique_ptr<TFile> file(TFile::Open(fileName.data(), "recreate"));
42-
file->WriteObject(this, "CalibdEdxCorrection");
42+
file->WriteObject(this, objName.data());
4343
}
4444

45-
void CalibdEdxCorrection::loadFromFile(std::string_view fileName)
45+
void CalibdEdxCorrection::loadFromFile(std::string_view fileName, std::string_view objName)
4646
{
4747
std::unique_ptr<TFile> file(TFile::Open(fileName.data()));
48-
auto tmp = file->Get<CalibdEdxCorrection>("CalibdEdxCorrection");
48+
auto tmp = file->Get<CalibdEdxCorrection>(objName.data());
4949
if (tmp != nullptr) {
5050
*this = *tmp;
5151
}

DataFormats/Detectors/TRD/src/Tracklet64.cxx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,16 @@ std::ostream& operator<<(std::ostream& stream, const Tracklet64& trg)
4040
trg.printStream(stream);
4141
return stream;
4242
}
43+
44+
bool operator<(const Tracklet64& lhs, const Tracklet64& rhs)
45+
{
46+
return (lhs.getDetector() < rhs.getDetector()) ||
47+
(lhs.getDetector() == rhs.getDetector() && lhs.getROB() < rhs.getROB()) ||
48+
(lhs.getDetector() == rhs.getDetector() && lhs.getROB() == rhs.getROB() && lhs.getMCM() < rhs.getMCM()) ||
49+
(lhs.getDetector() == rhs.getDetector() && lhs.getROB() == rhs.getROB() && lhs.getMCM() == rhs.getMCM() && lhs.getPadRow() < rhs.getPadRow()) ||
50+
(lhs.getDetector() == rhs.getDetector() && lhs.getROB() == rhs.getROB() && lhs.getMCM() == rhs.getMCM() && lhs.getPadRow() == rhs.getPadRow() && lhs.getPadCol() < rhs.getPadCol());
51+
}
52+
4353
#endif // GPUCA_GPUCODE_DEVICE
4454

4555
} // namespace trd

0 commit comments

Comments
 (0)