Skip to content

Commit a71a2ba

Browse files
committed
GPU: Unify applying settings for sync reco between standalone and GPUWorkflow
1 parent bfac7fc commit a71a2ba

File tree

7 files changed

+34
-26
lines changed

7 files changed

+34
-26
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: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -369,9 +369,6 @@ int32_t SetupReconstruction()
369369
} else if (chainTracking->GetTRDGeometry() == nullptr) {
370370
steps.steps.setBits(GPUDataTypes::RecoStep::TRDTracking, false);
371371
}
372-
if (configStandalone.rundEdx != -1) {
373-
steps.steps.setBits(GPUDataTypes::RecoStep::TPCdEdx, configStandalone.rundEdx > 0);
374-
}
375372
if (configStandalone.runCompression != -1) {
376373
steps.steps.setBits(GPUDataTypes::RecoStep::TPCCompression, configStandalone.runCompression > 0);
377374
}
@@ -426,18 +423,10 @@ int32_t SetupReconstruction()
426423
}
427424
}
428425

429-
if (configStandalone.testSyncAsync || configStandalone.testSync) {
430-
// Set settings for synchronous
431-
if (configStandalone.rundEdx == -1) {
432-
steps.steps.setBits(GPUDataTypes::RecoStep::TPCdEdx, 0);
433-
}
434-
recSet.useMatLUT = false;
435-
if (configStandalone.testSyncAsync) {
436-
procSet.eventDisplay = nullptr;
437-
}
438-
}
439-
if (configStandalone.proc.rtc.optSpecialCode == -1) {
440-
configStandalone.proc.rtc.optSpecialCode = configStandalone.testSyncAsync || configStandalone.testSync;
426+
// Set settings for synchronous
427+
GPUChainTracking::ApplySyncSettings(procSet, recSet, steps.steps, configStandalone.testSyncAsync || configStandalone.testSync, configStandalone.rundEdx);
428+
if (configStandalone.testSyncAsync) {
429+
procSet.eventDisplay = nullptr;
441430
}
442431

443432
rec->SetSettings(&grp, &recSet, &procSet, &steps);
@@ -458,13 +447,12 @@ int32_t SetupReconstruction()
458447
procSet.runQA = false;
459448
procSet.eventDisplay = eventDisplay.get();
460449
procSet.runCompressionStatistics = 0;
461-
procSet.rtc.optSpecialCode = 0;
462450
if (recSet.tpc.rejectionStrategy >= GPUSettings::RejectionStrategyB) {
463451
procSet.tpcInputWithClusterRejection = 1;
464452
}
465453
recSet.tpc.disableRefitAttachment = 0xFF;
466454
recSet.maxTrackQPtB5 = CAMath::Min(recSet.maxTrackQPtB5, recSet.tpc.rejectQPtB5);
467-
recSet.useMatLUT = true;
455+
GPUChainTracking::ApplySyncSettings(procSet, recSet, steps.steps, false, configStandalone.rundEdx);
468456
recAsync->SetSettings(&grp, &recSet, &procSet, &steps);
469457
}
470458

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)