29 s.mNHits = tracker.mData.mRows[s.mIRow].mNHits;
37 for (int32_t ih = iThread; ih < s.mNHits; ih += nThreads) {
38 int64_t lHitNumberOffset =
row.mHitNumberOffset;
39 uint32_t linkUpData = tracker.mData.mLinkUpData[lHitNumberOffset + ih];
41 if (tracker.mData.mLinkDownData[lHitNumberOffset + ih] ==
CALINK_INVAL && linkUpData !=
CALINK_INVAL && tracker.mData.mLinkUpData[rowUp.mHitNumberOffset + linkUpData] !=
CALINK_INVAL) {
43 uint32_t nextRowStartHits;
45 startHits = tracker.mTrackletTmpStartHits + s.mIRow * tracker.mNMaxRowStartHits;
46 nextRowStartHits = CAMath::AtomicAddShared(&s.mNRowStartHits, 1u);
47 if (nextRowStartHits >= tracker.mNMaxRowStartHits) {
48 tracker.raiseError(GPUErrors::ERROR_ROWSTARTHIT_OVERFLOW, tracker.ISector() * 1000 + s.mIRow, nextRowStartHits, tracker.mNMaxRowStartHits);
49 CAMath::AtomicExchShared(&s.mNRowStartHits, tracker.mNMaxRowStartHits);
53 startHits = tracker.mTrackletStartHits;
54 nextRowStartHits = CAMath::AtomicAdd(&tracker.mCommonMem->nStartHits, 1u);
55 if (nextRowStartHits >= tracker.mNMaxStartHits) {
56 tracker.raiseError(GPUErrors::ERROR_STARTHIT_OVERFLOW, tracker.ISector() * 1000 + s.mIRow, nextRowStartHits, tracker.mNMaxStartHits);
57 CAMath::AtomicExch(&tracker.mCommonMem->nStartHits, tracker.mNMaxStartHits);
61 startHits[nextRowStartHits].Set(s.mIRow, ih);
68 uint32_t nOffset = CAMath::AtomicAdd(&tracker.mCommonMem->nStartHits, s.mNRowStartHits);
69 tracker.mRowStartHitCountOffset[s.mIRow] = s.mNRowStartHits;
70 if (nOffset + s.mNRowStartHits > tracker.mNMaxStartHits) {
71 tracker.raiseError(GPUErrors::ERROR_STARTHIT_OVERFLOW, tracker.ISector() * 1000 + s.mIRow, nOffset + s.mNRowStartHits, tracker.mNMaxStartHits);
72 CAMath::AtomicExch(&tracker.mCommonMem->nStartHits, tracker.mNMaxStartHits);