Skip to content

Commit 35746f4

Browse files
committed
GPU: Unify applying settings for sync reco between standalone and GPUWorkflow
1 parent af304aa commit 35746f4

File tree

7 files changed

+35
-27
lines changed

7 files changed

+35
-27
lines changed

GPU/GPUTracking/Global/GPUChainTracking.cxx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1011,3 +1011,17 @@ void GPUChainTracking::SetO2Propagator(const o2::base::Propagator* prop)
10111011
GPUFatal("GPU magnetic field for propagator requested, but received an O2 propagator without GPU field");
10121012
}
10131013
}
1014+
1015+
void GPUChainTracking::ApplySyncSettings(GPUSettingsProcessing& proc, GPUSettingsRec& rec, GPUDataTypes::RecoStepField& steps, bool syncMode, int32_t dEdxMode)
1016+
{
1017+
if (syncMode) {
1018+
rec.useMatLUT = false;
1019+
rec.tpc.rebuildTrackMaxNonIntCov = 0.f;
1020+
}
1021+
if (proc.rtc.optSpecialCode == -1) {
1022+
proc.rtc.optSpecialCode = syncMode;
1023+
}
1024+
if (dEdxMode != -2) {
1025+
steps.setBits(GPUDataTypes::RecoStep::TPCdEdx, dEdxMode == -1 ? !syncMode : dEdxMode > 0);
1026+
}
1027+
}

GPU/GPUTracking/Global/GPUChainTracking.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ struct GPUNewCalibValues;
6666
struct GPUTriggerOutputs;
6767
struct CfFragment;
6868
class GPUTPCClusterFinder;
69+
struct GPUSettingsProcessing;
70+
struct GPUSettingsRec;
6971

7072
class GPUChainTracking : public GPUChain
7173
{
@@ -86,6 +88,7 @@ class GPUChainTracking : public GPUChain
8688
void ClearErrorCodes(bool cpuOnly = false);
8789
int32_t DoQueuedUpdates(int32_t stream, bool updateSlave = true); // Forces doing queue calib updates, don't call when you are not sure you are allowed to do so!
8890
bool QARanForTF() const { return mFractionalQAEnabled; }
91+
static void ApplySyncSettings(GPUSettingsProcessing& proc, GPUSettingsRec& rec, GPUDataTypes::RecoStepField& steps, bool syncMode, int32_t dEdxMode = -2);
8992

9093
// Structures for input and output data
9194
GPUTrackingInOutPointers& mIOPtrs;

GPU/GPUTracking/Interface/GPUO2Interface.cxx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,3 +268,8 @@ void GPUO2Interface::UseGPUPolynomialFieldInPropagator(o2::base::Propagator* pro
268268
{
269269
prop->setGPUField(&mCtx[0].mRec->GetParam().polynomialField);
270270
}
271+
272+
void GPUO2Interface::ApplySyncSettings(GPUSettingsProcessing& proc, GPUSettingsRec& rec, GPUDataTypes::RecoStepField& steps, bool syncMode, int32_t dEdxMode)
273+
{
274+
GPUChainTracking::ApplySyncSettings(proc, rec, steps, syncMode, dEdxMode);
275+
}

GPU/GPUTracking/Interface/GPUO2Interface.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ struct GPUInterfaceInputUpdate;
6262
struct GPUTrackingOutputs;
6363
struct GPUConstantMem;
6464
struct GPUNewCalibValues;
65+
struct GPUSettingsProcessing;
66+
struct GPUSettingsRec;
6567

6668
struct GPUO2Interface_processingContext;
6769
struct GPUO2Interface_Internals;
@@ -86,6 +88,7 @@ class GPUO2Interface
8688

8789
// Updates all calibration objects that are != nullptr in newCalib
8890
int32_t UpdateCalibration(const GPUCalibObjectsConst& newCalib, const GPUNewCalibValues& newVals, uint32_t iThread = 0);
91+
static void ApplySyncSettings(GPUSettingsProcessing& proc, GPUSettingsRec& rec, GPUDataTypes::RecoStepField& steps, bool syncMode, int32_t dEdxMode = -2);
8992

9093
int32_t registerMemoryForGPU(const void* ptr, size_t size);
9194
int32_t unregisterMemoryForGPU(const void* ptr);

GPU/GPUTracking/Merger/GPUTPCGMTrackParam.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ GPUdii() float GPUTPCGMTrackParam::FindBestInterpolatedHit(GPUTPCGMMerger& GPUre
412412
GPUglobalref() const cahit2* hits = tracker.HitData(rowData);
413413
GPUglobalref() const calink* firsthit = tracker.FirstHitInBin(rowData);
414414
float uncorrectedY = -1e6f, uncorrectedZ;
415-
if (rowData.NHits() && (inter.errorY >= (GPUCA_PAR_MERGER_INTERPOLATION_ERROR_TYPE_A)0 || (mC[0] < param.rec.tpc.rebuildTrackMaxNonIntCov && mC[2] < param.rec.tpc.rebuildTrackMaxNonIntCov))) {
415+
if (rowData.NHits() && (inter.errorY >= (GPUCA_PAR_MERGER_INTERPOLATION_ERROR_TYPE_A)0 || (param.rec.tpc.rebuildTrackMaxNonIntCov > 0 && mC[0] < param.rec.tpc.rebuildTrackMaxNonIntCov && mC[2] < param.rec.tpc.rebuildTrackMaxNonIntCov))) {
416416
const float zOffset = param.par.continuousTracking ? merger.GetConstantMem()->calibObjects.fastTransformHelper->getCorrMap()->convVertexTimeToZOffset(sector, mTOffset, param.continuousMaxTimeBin) : 0;
417417
const float y0 = rowData.Grid().YMin();
418418
const float stepY = rowData.HstepY();

GPU/GPUTracking/Standalone/Benchmark/standalone.cxx

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -373,9 +373,6 @@ int32_t SetupReconstruction()
373373
} else if (chainTracking->GetTRDGeometry() == nullptr) {
374374
steps.steps.setBits(GPUDataTypes::RecoStep::TRDTracking, false);
375375
}
376-
if (configStandalone.rundEdx != -1) {
377-
steps.steps.setBits(GPUDataTypes::RecoStep::TPCdEdx, configStandalone.rundEdx > 0);
378-
}
379376
if (configStandalone.runCompression != -1) {
380377
steps.steps.setBits(GPUDataTypes::RecoStep::TPCCompression, configStandalone.runCompression > 0);
381378
}
@@ -430,20 +427,12 @@ int32_t SetupReconstruction()
430427
}
431428
}
432429

430+
// Set settings for synchronous
431+
GPUChainTracking::ApplySyncSettings(procSet, recSet, steps.steps, configStandalone.testSyncAsync || configStandalone.testSync, configStandalone.rundEdx);
433432
bool runAsyncQA = procSet.runQA;
434-
if (configStandalone.testSyncAsync || configStandalone.testSync) {
435-
// Set settings for synchronous
436-
if (configStandalone.rundEdx == -1) {
437-
steps.steps.setBits(GPUDataTypes::RecoStep::TPCdEdx, 0);
438-
}
439-
recSet.useMatLUT = false;
440-
if (configStandalone.testSyncAsync) {
441-
procSet.eventDisplay = nullptr;
442-
procSet.runQA = false;
443-
}
444-
}
445-
if (configStandalone.proc.rtc.optSpecialCode == -1) {
446-
configStandalone.proc.rtc.optSpecialCode = configStandalone.testSyncAsync || configStandalone.testSync;
433+
if (configStandalone.testSyncAsync) {
434+
procSet.eventDisplay = nullptr;
435+
procSet.runQA = false;
447436
}
448437

449438
rec->SetSettings(&grp, &recSet, &procSet, &steps);
@@ -464,13 +453,12 @@ int32_t SetupReconstruction()
464453
procSet.runQA = runAsyncQA;
465454
procSet.eventDisplay = eventDisplay.get();
466455
procSet.runCompressionStatistics = 0;
467-
procSet.rtc.optSpecialCode = 0;
468456
if (recSet.tpc.rejectionStrategy >= GPUSettings::RejectionStrategyB) {
469457
procSet.tpcInputWithClusterRejection = 1;
470458
}
471459
recSet.tpc.disableRefitAttachment = 0xFF;
472460
recSet.maxTrackQPtB5 = CAMath::Min(recSet.maxTrackQPtB5, recSet.tpc.rejectQPtB5);
473-
recSet.useMatLUT = true;
461+
GPUChainTracking::ApplySyncSettings(procSet, recSet, steps.steps, false, configStandalone.rundEdx);
474462
recAsync->SetSettings(&grp, &recSet, &procSet, &steps);
475463
}
476464

GPU/Workflow/src/GPUWorkflowSpec.cxx

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -228,20 +228,15 @@ void GPURecoWorkflowSpec::init(InitContext& ic)
228228
}
229229
}
230230
mConfig->configInterface.outputToExternalBuffers = true;
231-
if (mConfParam->synchronousProcessing) {
232-
mConfig->configReconstruction.useMatLUT = false;
233-
}
234-
if (mConfig->configProcessing.rtc.optSpecialCode == -1) {
235-
mConfig->configProcessing.rtc.optSpecialCode = mConfParam->synchronousProcessing;
236-
}
231+
const bool runTracking = mSpecConfig.outputTracks || mSpecConfig.outputCompClustersRoot || mSpecConfig.outputCompClustersFlat;
232+
GPUO2Interface::ApplySyncSettings(mConfig->configProcessing, mConfig->configReconstruction, mConfig->configWorkflow.steps, mConfParam->synchronousProcessing, runTracking ? mConfParam->rundEdx : -2);
237233

238234
// Configure the "GPU workflow" i.e. which steps we run on the GPU (or CPU)
239-
if (mSpecConfig.outputTracks || mSpecConfig.outputCompClustersRoot || mSpecConfig.outputCompClustersFlat) {
235+
if (runTracking) {
240236
mConfig->configWorkflow.steps.set(GPUDataTypes::RecoStep::TPCConversion,
241237
GPUDataTypes::RecoStep::TPCSectorTracking,
242238
GPUDataTypes::RecoStep::TPCMerging);
243239
mConfig->configWorkflow.outputs.set(GPUDataTypes::InOutType::TPCMergedTracks);
244-
mConfig->configWorkflow.steps.setBits(GPUDataTypes::RecoStep::TPCdEdx, mConfParam->rundEdx == -1 ? !mConfParam->synchronousProcessing : mConfParam->rundEdx);
245240
}
246241
if (mSpecConfig.outputCompClustersRoot || mSpecConfig.outputCompClustersFlat) {
247242
mConfig->configWorkflow.steps.setBits(GPUDataTypes::RecoStep::TPCCompression, true);

0 commit comments

Comments
 (0)