Skip to content

Commit 800bfae

Browse files
davidrohrehellbar
authored andcommitted
GPU TEMPORARY WORKAROUND - AVOID ROCM COMPILER BUG
1 parent d56b3e9 commit 800bfae

File tree

1 file changed

+14
-24
lines changed

1 file changed

+14
-24
lines changed

GPU/GPUTracking/Merger/GPUTPCGMTrackParam.cxx

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -226,25 +226,14 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
226226
}
227227
CADEBUG(printf("\n"));
228228

229-
int32_t retValUpd = 0, retValInt = 0;
229+
int32_t retValUpd;
230230
float threshold = 3.f + (lastUpdateX >= 0 ? (CAMath::Abs(mX - lastUpdateX) / 2) : 0.f);
231231
if (mNDF > (int32_t)param.rec.tpc.mergerNonInterpolateRejectMinNDF && (CAMath::Abs(yy - mP[0]) > threshold || CAMath::Abs(zz - mP[1]) > threshold)) {
232232
retValUpd = GPUTPCGMPropagator::updateErrorClusterRejectedDistance;
233233
} else {
234-
int8_t rejectChi2 = 0;
235-
if (attempt == 0) {
236-
if (param.rec.tpc.mergerInterpolateErrors && CAMath::Abs(ihit - ihitMergeFirst) <= 1) {
237-
if (iWay == nWays - 3) {
238-
rejectChi2 = GPUTPCGMPropagator::rejectInterFill;
239-
} else if (iWay == nWays - 2) {
240-
rejectChi2 = GPUTPCGMPropagator::rejectInterReject;
241-
} else if (iWay == nWays - 1) {
242-
rejectChi2 = (param.rec.tpc.mergerInterpolateRejectAlsoOnCurrentPosition && GetNDF() > (int32_t)param.rec.tpc.mergerNonInterpolateRejectMinNDF) ? GPUTPCGMPropagator::rejectDirect : 0;
243-
}
244-
} else {
245-
rejectChi2 = allowChangeClusters && goodRows > 5;
246-
}
247-
}
234+
int8_t rejectChi2 = attempt ? 0 // In second attempt, we do not reject
235+
: (param.rec.tpc.mergerInterpolateErrors && CAMath::Abs(ihit - ihitMergeFirst) <= 1) ? (finalOutInFit ? (GPUTPCGMPropagator::rejectInterFill + !(iWay & 1)) : 0) // reject via interpolation
236+
: (allowChangeClusters && goodRows > 5); // normal rejection during the fit
248237

249238
float err2Y, err2Z;
250239
const float time = merger->GetConstantMem()->ioPtrs.clustersNative ? merger->GetConstantMem()->ioPtrs.clustersNative->clustersLinear[cluster.num].getTime() : -1.f;
@@ -255,6 +244,7 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
255244

256245
prop.GetErr2(err2Y, err2Z, param, zz, cluster.row, clusterState, cluster.sector, time, invAvgCharge, invCharge);
257246

247+
int retValInt = 0;
258248
if (rejectChi2 >= GPUTPCGMPropagator::rejectInterFill) {
259249
if (rejectChi2 == GPUTPCGMPropagator::rejectInterReject && interpolation.hit[ihit].errorY < (GPUCA_PAR_MERGER_INTERPOLATION_ERROR_TYPE_A)0) {
260250
rejectChi2 = GPUTPCGMPropagator::rejectDirect;
@@ -263,7 +253,9 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
263253
}
264254
}
265255

266-
if (param.rec.tpc.rejectEdgeClustersInTrackFit && uncorrectedY > -1e6f && param.rejectEdgeClusterByY(uncorrectedY, cluster.row, CAMath::Sqrt(mC[0]))) { // uncorrectedY > -1e6f implies allowChangeClusters
256+
if (retValInt) {
257+
retValUpd = retValInt;
258+
} else if (param.rec.tpc.rejectEdgeClustersInTrackFit && uncorrectedY > -1e6f && param.rejectEdgeClusterByY(uncorrectedY, cluster.row, CAMath::Sqrt(mC[0]))) { // uncorrectedY > -1e6f implies allowChangeClusters
267259
retValUpd = GPUTPCGMPropagator::updateErrorClusterRejectedEdge;
268260
} else {
269261
retValUpd = prop.Update(yy, zz, cluster.row, param, clusterState, rejectChi2, refit, err2Y, err2Z);
@@ -277,8 +269,8 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
277269
CADEBUG(printf("\t%21sFit Alpha %8.3f , X %8.3f - Y %8.3f, Z %8.3f - QPt %7.2f (%7.2f), SP %5.2f (%5.2f), DzDs %5.2f %16s --- Cov sY %8.3f sZ %8.3f sSP %8.3f sPt %8.3f - YPt %8.3f - FErr %d %d\n", "", prop.GetAlpha(), mX, mP[0], mP[1], mP[4], prop.GetQPt0(), mP[2], prop.GetSinPhi0(), mP[3], "", sqrtf(mC[0]), sqrtf(mC[2]), sqrtf(mC[5]), sqrtf(mC[14]), mC[10], retValUpd, retValInt));
278270
// clang-format on
279271

280-
ConstrainSinPhi(); // TODO: Limit using ConstrainSinPhi everywhere!
281-
if (!retValUpd && !retValInt) // track is updated
272+
ConstrainSinPhi(); // TODO: Limit using ConstrainSinPhi everywhere!
273+
if (!retValUpd) // track is updated
282274
{
283275
lastUpdateX = mX;
284276
covYYUpd = mC[0];
@@ -320,16 +312,14 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
320312
}
321313
}
322314
}
323-
} else if (retValInt || retValUpd >= GPUTPCGMPropagator::updateErrorClusterRejected) { // cluster far away form the track
324-
if (retValInt || allowChangeClusters) {
315+
} else if (retValUpd >= GPUTPCGMPropagator::updateErrorClusterRejected) { // cluster far away form the track
316+
if (allowChangeClusters) {
325317
MarkClusters(clusters, ihitMergeFirst, ihit, wayDirection, GPUTPCGMMergedTrackHit::flagRejectDistance);
326318
} else if (finalFit) {
327319
MarkClusters(clusters, ihitMergeFirst, ihit, wayDirection, GPUTPCGMMergedTrackHit::flagRejectErr);
328320
}
329-
if (!retValInt) {
330-
nMissed++;
331-
nMissed2++;
332-
}
321+
nMissed++;
322+
nMissed2++;
333323
} else {
334324
break; // bad chi2 for the whole track, stop the fit
335325
}

0 commit comments

Comments
 (0)