Skip to content

Commit 7f28861

Browse files
committed
GPU: Unify applying settings for sync reco between standalone and GPUWorkflow
1 parent 8cc8000 commit 7f28861

File tree

7 files changed

+36
-28
lines changed

7 files changed

+36
-28
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
@@ -56,6 +56,8 @@ struct GPUInterfaceInputUpdate;
5656
struct GPUTrackingOutputs;
5757
struct GPUConstantMem;
5858
struct GPUNewCalibValues;
59+
struct GPUSettingsProcessing;
60+
struct GPUSettingsRec;
5961

6062
struct GPUO2Interface_processingContext;
6163
struct GPUO2Interface_Internals;
@@ -80,6 +82,7 @@ class GPUO2Interface
8082

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

8487
int32_t registerMemoryForGPU(const void* ptr, size_t size);
8588
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
@@ -407,7 +407,7 @@ GPUdii() float GPUTPCGMTrackParam::FindBestInterpolatedHit(GPUTPCGMMerger& GPUre
407407
GPUglobalref() const cahit2* hits = tracker.HitData(rowData);
408408
GPUglobalref() const calink* firsthit = tracker.FirstHitInBin(rowData);
409409
float uncorrectedY = -1e6f, uncorrectedZ;
410-
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))) {
410+
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))) {
411411
const float zOffset = param.par.continuousTracking ? merger.GetConstantMem()->calibObjects.fastTransformHelper->getCorrMap()->convVertexTimeToZOffset(sector, mTOffset, param.continuousMaxTimeBin) : 0;
412412
const float y0 = rowData.Grid().YMin();
413413
const float stepY = rowData.HstepY();

GPU/GPUTracking/Standalone/Benchmark/standalone.cxx

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -374,9 +374,6 @@ int32_t SetupReconstruction()
374374
} else if (chainTracking->GetTRDGeometry() == nullptr) {
375375
steps.steps.setBits(GPUDataTypes::RecoStep::TRDTracking, false);
376376
}
377-
if (configStandalone.rundEdx != -1) {
378-
steps.steps.setBits(GPUDataTypes::RecoStep::TPCdEdx, configStandalone.rundEdx > 0);
379-
}
380377
if (configStandalone.runCompression != -1) {
381378
steps.steps.setBits(GPUDataTypes::RecoStep::TPCCompression, configStandalone.runCompression > 0);
382379
}
@@ -431,23 +428,15 @@ int32_t SetupReconstruction()
431428
}
432429
}
433430

431+
// Set settings for synchronous
432+
GPUChainTracking::ApplySyncSettings(procSet, recSet, steps.steps, configStandalone.testSyncAsync || configStandalone.testSync, configStandalone.rundEdx);
434433
bool runAsyncQA = procSet.runQA && !configStandalone.testSyncAsyncQcInSync;
435-
if (configStandalone.testSyncAsync || configStandalone.testSync) {
436-
// Set settings for synchronous
437-
if (configStandalone.rundEdx == -1) {
438-
steps.steps.setBits(GPUDataTypes::RecoStep::TPCdEdx, 0);
439-
}
440-
recSet.useMatLUT = false;
441-
if (configStandalone.testSyncAsync) {
442-
procSet.eventDisplay = nullptr;
443-
if (!configStandalone.testSyncAsyncQcInSync) {
444-
procSet.runQA = false;
445-
}
434+
if (configStandalone.testSyncAsync) {
435+
procSet.eventDisplay = nullptr;
436+
if (!configStandalone.testSyncAsyncQcInSync) {
437+
procSet.runQA = false;
446438
}
447439
}
448-
if (configStandalone.proc.rtc.optSpecialCode == -1) {
449-
configStandalone.proc.rtc.optSpecialCode = configStandalone.testSyncAsync || configStandalone.testSync;
450-
}
451440

452441
rec->SetSettings(&grp, &recSet, &procSet, &steps);
453442
if (configStandalone.proc.doublePipeline) {
@@ -467,13 +456,12 @@ int32_t SetupReconstruction()
467456
procSet.runQA = runAsyncQA;
468457
procSet.eventDisplay = eventDisplay.get();
469458
procSet.runCompressionStatistics = 0;
470-
procSet.rtc.optSpecialCode = 0;
471459
if (recSet.tpc.rejectionStrategy >= GPUSettings::RejectionStrategyB) {
472460
procSet.tpcInputWithClusterRejection = 1;
473461
}
474462
recSet.tpc.disableRefitAttachment = 0xFF;
475463
recSet.maxTrackQPtB5 = CAMath::Min(recSet.maxTrackQPtB5, recSet.tpc.rejectQPtB5);
476-
recSet.useMatLUT = true;
464+
GPUChainTracking::ApplySyncSettings(procSet, recSet, steps.steps, false, configStandalone.rundEdx);
477465
recAsync->SetSettings(&grp, &recSet, &procSet, &steps);
478466
}
479467

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)