@@ -124,16 +124,10 @@ GPUdii() void GPUTPCNeighboursFinder::Thread<0>(int /*nBlocks*/, int nThreads, i
124124 const float z = z0 + tracker.HitDataZ (row, ih) * stepZ;
125125#endif // GPUCA_TEXTURE_FETCH_NEIGHBORS
126126
127- #if GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP > 0
128- GPUsharedref () calink* neighUp = s.mB [iThread];
129- GPUsharedref () float2* yzUp = s.mA [iThread];
130127#if GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP < GPUCA_MAXN
131- calink neighUp2[GPUCA_MAXN - GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP];
132- float2 yzUp2[GPUCA_MAXN - GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP];
133- #endif
134- #else
135- calink neighUp[GPUCA_MAXN];
136- float2 yzUp[GPUCA_MAXN];
128+ calink neighUp[GPUCA_MAXN - GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP];
129+ float yzUp[GPUCA_MAXN - GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP];
130+ float yzUp2[GPUCA_MAXN - GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP];
137131#endif // GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP > 0
138132
139133 int nNeighUp = 0 ;
@@ -151,15 +145,23 @@ GPUdii() void GPUTPCNeighboursFinder::Thread<0>(int /*nBlocks*/, int nThreads, i
151145 break ;
152146 }
153147
154- #if GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP > 0 && GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP < GPUCA_MAXN
155- if (nNeighUp >= GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP) {
156- neighUp2[nNeighUp - GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP] = (calink)i;
157- yzUp2[nNeighUp - GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP] = CAMath::MakeFloat2 (s.mDnDx * (h.Y () - y), s.mDnDx * (h.Z () - z));
148+ #if GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP < GPUCA_MAXN
149+ #if GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP == 0
150+ if (true ) {
151+ #else
152+ if ((unsigned int )nNeighUp >= GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP) {
153+ #endif
154+ neighUp[nNeighUp - GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP] = (calink)i;
155+ yzUp[nNeighUp - GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP] = s.mDnDx * (h.Y () - y);
156+ yzUp2[nNeighUp - GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP] = s.mDnDx * (h.Z () - z);
158157 } else
159158#endif
160159 {
161- neighUp[nNeighUp] = (calink)i;
162- yzUp[nNeighUp] = CAMath::MakeFloat2 (s.mDnDx * (h.Y () - y), s.mDnDx * (h.Z () - z));
160+ #if GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP > 0
161+ s.mB [nNeighUp][iThread] = (calink)i;
162+ s.mA1 [nNeighUp][iThread] = s.mDnDx * (h.Y () - y);
163+ s.mA2 [nNeighUp][iThread] = s.mDnDx * (h.Z () - z);
164+ #endif
163165 }
164166 if (++nNeighUp >= GPUCA_MAXN) {
165167 // GPUInfo("Neighbors buffer ran full...");
@@ -184,9 +186,11 @@ GPUdii() void GPUTPCNeighboursFinder::Thread<0>(int /*nBlocks*/, int nThreads, i
184186
185187 for (int iUp = 0 ; iUp < nNeighUp; iUp++) {
186188#if GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP > 0 && GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP < GPUCA_MAXN
187- float2 yzup = iUp >= GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP ? yzUp2[iUp - GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP] : yzUp[iUp];
189+ float2 yzup = iUp >= GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP ? CAMath::MakeFloat2 (yzUp[iUp - GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP], yzUp2[iUp - GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP]) : CAMath::MakeFloat2 (s.mA1 [iUp][iThread], s.mA2 [iUp][iThread]);
190+ #elif GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP == GPUCA_MAXN
191+ float2 yzup = CAMath::MakeFloat2 (s.mA1 [iUp][iThread], s.mA2 [iUp][iThread]);
188192#else
189- float2 yzup = yzUp[iUp];
193+ float2 yzup = CAMath::MakeFloat2 ( yzUp[iUp], yzUp2[iUp]) ;
190194#endif
191195 float dy = yzdn.x - yzup.x ;
192196 float dz = yzdn.y - yzup.y ;
@@ -201,7 +205,9 @@ GPUdii() void GPUTPCNeighboursFinder::Thread<0>(int /*nBlocks*/, int nThreads, i
201205
202206 if (bestD <= chi2Cut) {
203207#if GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP > 0 && GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP < GPUCA_MAXN
204- linkUp = bestUp >= GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP ? neighUp2[bestUp - GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP] : neighUp[bestUp];
208+ linkUp = bestUp >= GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP ? neighUp[bestUp - GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP] : s.mB [bestUp][iThread];
209+ #elif GPUCA_NEIGHBOURS_FINDER_MAX_NNEIGHUP == GPUCA_MAXN
210+ linkUp = s.mB [bestUp][iThread];
205211#else
206212 linkUp = neighUp[bestUp];
207213#endif
0 commit comments