diff --git a/GPU/GPUTracking/Base/GPUReconstructionCPU.h b/GPU/GPUTracking/Base/GPUReconstructionCPU.h index 163b00c804d7f..dfd6176827484 100644 --- a/GPU/GPUTracking/Base/GPUReconstructionCPU.h +++ b/GPU/GPUTracking/Base/GPUReconstructionCPU.h @@ -112,7 +112,6 @@ class GPUReconstructionCPU : public GPUReconstructionKernels (size_t)deviceProp.maxTexture1DLinear) { - GPUError("Invalid maximum texture size of device: %ld < %ld\n", (int64_t)deviceProp.maxTexture1DLinear, (int64_t)(GPUCA_SECTOR_DATA_MEMORY * NSECTORS)); - return (1); - } -#endif #ifndef GPUCA_NO_CONSTANT_MEMORY if (gGPUConstantMemBufferSize > deviceProp.totalConstMem) { GPUError("Insufficient constant memory available on GPU %d < %d!", (int32_t)deviceProp.totalConstMem, (int32_t)gGPUConstantMemBufferSize); @@ -627,18 +621,6 @@ void GPUReconstructionCUDA::loadKernelModules(bool perKernel) } #ifndef __HIPCC__ // CUDA -int32_t GPUReconstructionCUDA::PrepareTextures() -{ -#ifdef GPUCA_USE_TEXTURES - cudaChannelFormatDesc channelDescu2 = cudaCreateChannelDesc(); - size_t offset; - GPUChkErr(cudaBindTexture(&offset, &gAliTexRefu2, mProcessorsShadow->tpcTrackers[0].Data().Memory(), &channelDescu2, NSECTORS * GPUCA_SECTOR_DATA_MEMORY)); - cudaChannelFormatDesc channelDescu = cudaCreateChannelDesc(); - GPUChkErr(cudaBindTexture(&offset, &gAliTexRefu, mProcessorsShadow->tpcTrackers[0].Data().Memory(), &channelDescu, NSECTORS * GPUCA_SECTOR_DATA_MEMORY)); -#endif - return (0); -} - void GPUReconstructionCUDA::startGPUProfiling() { GPUChkErr(cudaProfilerStart()); diff --git a/GPU/GPUTracking/Base/cuda/GPUReconstructionCUDA.h b/GPU/GPUTracking/Base/cuda/GPUReconstructionCUDA.h index b1a3a53a6a62f..106168ef961a5 100644 --- a/GPU/GPUTracking/Base/cuda/GPUReconstructionCUDA.h +++ b/GPU/GPUTracking/Base/cuda/GPUReconstructionCUDA.h @@ -79,7 +79,6 @@ class GPUReconstructionCUDA : public GPUReconstructionKernels gAliTexRefu2; -texture gAliTexRefu; -#endif - #include "GPUReconstructionIncludesDeviceAll.h" #if defined(__HIPCC__) && defined(GPUCA_HAS_GLOBAL_SYMBOL_CONSTANT_MEM) diff --git a/GPU/GPUTracking/Base/opencl/GPUReconstructionOCL.cl b/GPU/GPUTracking/Base/opencl/GPUReconstructionOCL.cl index 10a425e4c76e8..ffdc34d6c9881 100644 --- a/GPU/GPUTracking/Base/opencl/GPUReconstructionOCL.cl +++ b/GPU/GPUTracking/Base/opencl/GPUReconstructionOCL.cl @@ -73,8 +73,6 @@ typedef signed char int8_t; #include "GPUConstantMem.h" #include "GPUReconstructionIncludesDeviceAll.h" -// if (gpu_mem != pTracker.GPUParametersConst()->gpumem) return; //TODO! - #define GPUCA_KRNL(...) GPUCA_KRNLGPU(__VA_ARGS__) #define GPUCA_CONSMEM_PTR GPUglobal() char *gpu_mem, GPUconstant() GPUConstantMem* pConstant, #define GPUCA_CONSMEM (*pConstant) diff --git a/GPU/GPUTracking/Definitions/GPUDef.h b/GPU/GPUTracking/Definitions/GPUDef.h index c77b9ce159306..69723813d384f 100644 --- a/GPU/GPUTracking/Definitions/GPUDef.h +++ b/GPU/GPUTracking/Definitions/GPUDef.h @@ -58,12 +58,6 @@ #define CA_SHARED_CACHE_REF(target, src, size, reftype, ref) GPUglobalref() const reftype* __restrict__ ref = src #endif -#ifdef GPUCA_TEXTURE_FETCH_CONSTRUCTOR - #define CA_TEXTURE_FETCH(type, texture, address, entry) tex1Dfetch(texture, ((char*) address - tracker.Data().GPUTextureBase()) / sizeof(type) + entry); -#else - #define CA_TEXTURE_FETCH(type, texture, address, entry) address[entry]; -#endif - #endif //GPUTPCDEF_H #ifdef GPUCA_CADEBUG diff --git a/GPU/GPUTracking/Definitions/GPUDefParametersDefaults.h b/GPU/GPUTracking/Definitions/GPUDefParametersDefaults.h index 57ad9907ca86f..19301ef2bef9f 100644 --- a/GPU/GPUTracking/Definitions/GPUDefParametersDefaults.h +++ b/GPU/GPUTracking/Definitions/GPUDefParametersDefaults.h @@ -267,7 +267,6 @@ #define GPUCA_PAR_COMP_GATHER_MODE 3 #define GPUCA_PAR_DEDX_STORAGE_TYPE uint16_t #define GPUCA_PAR_MERGER_INTERPOLATION_ERROR_TYPE half - // #define GPUCA_USE_TEXTURES #elif defined(GPUCA_GPUTYPE_OPENCL) #else #error GPU TYPE NOT SET diff --git a/GPU/GPUTracking/Definitions/GPUDefParametersWrapper.h b/GPU/GPUTracking/Definitions/GPUDefParametersWrapper.h index b2c08d689aeb2..8a54ab2163eab 100644 --- a/GPU/GPUTracking/Definitions/GPUDefParametersWrapper.h +++ b/GPU/GPUTracking/Definitions/GPUDefParametersWrapper.h @@ -43,11 +43,6 @@ namespace o2::gpu // #define GPUCA_KERNEL_DEBUGGER_OUTPUT -// Derived parameters -#ifdef GPUCA_USE_TEXTURES - #define GPUCA_TEXTURE_FETCH_CONSTRUCTOR // Fetch data through texture cache -#endif - } // namespace o2::gpu // clang-format on diff --git a/GPU/GPUTracking/Global/GPUChain.h b/GPU/GPUTracking/Global/GPUChain.h index 290ae32cafca8..c4dccb091fc95 100644 --- a/GPU/GPUTracking/Global/GPUChain.h +++ b/GPU/GPUTracking/Global/GPUChain.h @@ -216,7 +216,6 @@ class GPUChain inline GPUChain* GetNextChainInQueue() { return mRec->GetNextChainInQueue(); } - virtual int32_t PrepareTextures() { return 0; } virtual int32_t DoStuckProtection(int32_t stream, deviceEvent event) { return 0; } template diff --git a/GPU/GPUTracking/Global/GPUChainTrackingSectorTracker.cxx b/GPU/GPUTracking/Global/GPUChainTrackingSectorTracker.cxx index 64a9179baf0e6..962b0922eeecc 100644 --- a/GPU/GPUTracking/Global/GPUChainTrackingSectorTracker.cxx +++ b/GPU/GPUTracking/Global/GPUChainTrackingSectorTracker.cxx @@ -103,17 +103,6 @@ int32_t GPUChainTracking::RunTPCTrackingSectors_internal() int32_t streamInitAndOccMap = mRec->NStreams() - 1; if (doGPU) { - for (uint32_t iSector = 0; iSector < NSECTORS; iSector++) { - processorsShadow()->tpcTrackers[iSector].GPUParametersConst()->gpumem = (char*)mRec->DeviceMemoryBase(); - // Initialize Startup Constants - processors()->tpcTrackers[iSector].GPUParameters()->nextStartHit = (((getKernelProperties().minBlocks * BlockCount()) + NSECTORS - 1 - iSector) / NSECTORS) * getKernelProperties().nThreads; - processorsShadow()->tpcTrackers[iSector].SetGPUTextureBase(mRec->DeviceMemoryBase()); - } - - if (PrepareTextures()) { - return (2); - } - // Copy Tracker Object to GPU Memory if (GetProcessingSettings().debugLevel >= 3) { GPUInfo("Copying Tracker objects to GPU"); diff --git a/GPU/GPUTracking/Merger/GPUTPCGMTrackParam.cxx b/GPU/GPUTracking/Merger/GPUTPCGMTrackParam.cxx index ddf01b586cd70..5bd8fd556aa3f 100644 --- a/GPU/GPUTracking/Merger/GPUTPCGMTrackParam.cxx +++ b/GPU/GPUTracking/Merger/GPUTPCGMTrackParam.cxx @@ -580,10 +580,8 @@ GPUd() float GPUTPCGMTrackParam::AttachClusters(const GPUTPCGMMerger* GPUrestric } const GPUTPCTracker& GPUrestrict() tracker = *(Merger -> GetConstantMem()->tpcTrackers + sector); const GPUTPCRow& GPUrestrict() row = tracker.Row(iRow); -#ifndef GPUCA_TEXTURE_FETCH_CONSTRUCTOR GPUglobalref() const cahit2* hits = tracker.HitData(row); GPUglobalref() const calink* firsthit = tracker.FirstHitInBin(row); -#endif //! GPUCA_TEXTURE_FETCH_CONSTRUCTOR if (row.NHits() == 0) { return -1e6f; } @@ -626,8 +624,8 @@ GPUd() float GPUTPCGMTrackParam::AttachClusters(const GPUTPCGMMerger* GPUrestric } for (int32_t k = 0; k <= nz; k++) { const int32_t mybin = bin + k * nBinsY; - const uint32_t hitFst = CA_TEXTURE_FETCH(calink, gAliTexRefu, firsthit, mybin); - const uint32_t hitLst = CA_TEXTURE_FETCH(calink, gAliTexRefu, firsthit, mybin + ny + 1); + const uint32_t hitFst = firsthit[mybin]; + const uint32_t hitLst = firsthit[mybin + ny + 1]; for (uint32_t ih = hitFst; ih < hitLst; ih++) { int32_t id = idOffset + ids[ih]; GPUAtomic(uint32_t)* const weight = weights + id; @@ -636,7 +634,7 @@ GPUd() float GPUTPCGMTrackParam::AttachClusters(const GPUTPCGMMerger* GPUrestric continue; } } - const cahit2 hh = CA_TEXTURE_FETCH(cahit2, gAliTexRefu2, hits, ih); + const cahit2 hh = hits[ih]; const float y = y0 + hh.x * stepY; const float z = z0 + hh.y * stepZ; const float dy = y - uncorrectedY; diff --git a/GPU/GPUTracking/SectorTracker/GPUTPCTracker.h b/GPU/GPUTracking/SectorTracker/GPUTPCTracker.h index e8aac872198f5..3bebdc4fa2b06 100644 --- a/GPU/GPUTracking/SectorTracker/GPUTPCTracker.h +++ b/GPU/GPUTracking/SectorTracker/GPUTPCTracker.h @@ -59,24 +59,14 @@ class GPUTPCTracker : public GPUProcessor void DumpTrackletHits(std::ostream& out); // Same for Track Hits #endif - struct StructGPUParameters { - GPUAtomic(uint32_t) nextStartHit; // Next Tracklet to process - }; - - struct StructGPUParametersConst { - GPUglobalref() char* gpumem; // Base pointer to GPU memory (Needed for OpenCL for verification) - }; - struct commonMemoryStruct { - commonMemoryStruct() : nStartHits(0), nTracklets(0), nRowHits(0), nTracks(0), nLocalTracks(0), nTrackHits(0), nLocalTrackHits(0), gpuParameters() {} - GPUAtomic(uint32_t) nStartHits; // number of start hits - GPUAtomic(uint32_t) nTracklets; // number of tracklets - GPUAtomic(uint32_t) nRowHits; // number of tracklet hits - GPUAtomic(uint32_t) nTracks; // number of reconstructed tracks - int32_t nLocalTracks; // number of reconstructed tracks before extrapolation tracking - GPUAtomic(uint32_t) nTrackHits; // number of track hits - int32_t nLocalTrackHits; // see above - StructGPUParameters gpuParameters; // GPU parameters + GPUAtomic(uint32_t) nStartHits = 0; // number of start hits + GPUAtomic(uint32_t) nTracklets = 0; // number of tracklets + GPUAtomic(uint32_t) nRowHits = 0; // number of tracklet hits + GPUAtomic(uint32_t) nTracks = 0; // number of reconstructed tracks + int32_t nLocalTracks = 0; // number of reconstructed tracks before extrapolation tracking + GPUAtomic(uint32_t) nTrackHits = 0; // number of track hits + int32_t nLocalTrackHits = 0; // see above }; GPUhdi() GPUglobalref() const GPUTPCClusterData* ClusterData() const @@ -205,13 +195,6 @@ class GPUTPCTracker : public GPUProcessor GPUhd() GPUglobalref() GPUTPCRow* TrackingDataRows() const { return (mData.Rows()); } GPUhd() GPUglobalref() int32_t* RowStartHitCountOffset() const { return (mRowStartHitCountOffset); } - GPUhd() GPUglobalref() StructGPUParameters* GPUParameters() const { return (&mCommonMem->gpuParameters); } - GPUhd() StructGPUParametersConst* GPUParametersConst() - { - return (&mGPUParametersConst); - } - GPUhd() const StructGPUParametersConst* GetGPUParametersConst() const { return (&mGPUParametersConst); } - GPUhd() void SetGPUTextureBase(GPUglobalref() const void* val) { mData.SetGPUTextureBase(val); } struct trackSortData { int32_t fTtrack; // Track ID @@ -253,8 +236,6 @@ class GPUTPCTracker : public GPUProcessor GPUglobalref() GPUTPCHitId* mTrackletTmpStartHits = nullptr; // Unsorted start hits GPUglobalref() char* mGPUTrackletTemp = nullptr; // Temp Memory for GPU Tracklet Constructor - StructGPUParametersConst mGPUParametersConst; // Parameters for GPU if this is a GPU tracker - // event GPUglobalref() commonMemoryStruct* mCommonMem = nullptr; // common event memory GPUglobalref() GPUTPCHitId* mTrackletStartHits = nullptr; // start hits for the tracklets diff --git a/GPU/GPUTracking/SectorTracker/GPUTPCTrackingData.h b/GPU/GPUTracking/SectorTracker/GPUTPCTrackingData.h index d7d5e76bc9d44..b08fbed4b319d 100644 --- a/GPU/GPUTracking/SectorTracker/GPUTPCTrackingData.h +++ b/GPU/GPUTracking/SectorTracker/GPUTPCTrackingData.h @@ -29,7 +29,7 @@ class GPUTPCHit; class GPUTPCTrackingData { public: - GPUTPCTrackingData() : mNumberOfHits(0), mNumberOfHitsPlusAlign(0), mClusterIdOffset(0), mGPUTextureBase(nullptr), mRows(nullptr), mLinkUpData(nullptr), mLinkDownData(nullptr), mClusterData(nullptr) {} + GPUTPCTrackingData() : mNumberOfHits(0), mNumberOfHitsPlusAlign(0), mClusterIdOffset(0), mRows(nullptr), mLinkUpData(nullptr), mLinkDownData(nullptr), mClusterData(nullptr) {} #ifndef GPUCA_GPUCODE_DEVICE ~GPUTPCTrackingData() = default; @@ -112,10 +112,6 @@ class GPUTPCTrackingData GPUhdi() GPUglobalref() GPUAtomic(uint32_t) * HitWeights() { return (mHitWeights); } - GPUhdi() void SetGPUTextureBase(GPUglobalref() const void* val) { mGPUTextureBase = val; } - GPUhdi() char* GPUTextureBase() const { return ((char*)mGPUTextureBase); } - GPUhdi() char* GPUTextureBaseConst() const { return ((char*)mGPUTextureBase); } - GPUhdi() GPUglobalref() const GPUTPCClusterData* ClusterData() const { return mClusterData; } private: @@ -135,8 +131,6 @@ class GPUTPCTrackingData int32_t mNumberOfHitsPlusAlign; int32_t mClusterIdOffset; - GPUglobalref() const void* mGPUTextureBase; // pointer to start of GPU texture - GPUglobalref() GPUTPCRow* mRows; // The row objects needed for most accessor functions GPUglobalref() calink* mLinkUpData; // hit index in the row above which is linked to the given (global) hit index diff --git a/GPU/GPUTracking/SectorTracker/GPUTPCTrackletConstructor.cxx b/GPU/GPUTracking/SectorTracker/GPUTPCTrackletConstructor.cxx index 71df683eee1dc..2660f6d8cbf44 100644 --- a/GPU/GPUTracking/SectorTracker/GPUTPCTrackletConstructor.cxx +++ b/GPU/GPUTracking/SectorTracker/GPUTPCTrackletConstructor.cxx @@ -123,10 +123,10 @@ GPUdic(2, 1) void GPUTPCTrackletConstructor::UpdateTracklet(int32_t /*nBlocks*/, break; // SG!!! - jump over the row } - cahit2 hh = CA_TEXTURE_FETCH(cahit22, gAliTexRefu2, tracker.HitData(row), r.mCurrIH); + cahit2 hh = tracker.HitData(row)[r.mCurrIH]; int32_t seedIH = r.mCurrIH; - r.mCurrIH = CA_TEXTURE_FETCH(calink, gAliTexRefs, tracker.HitLinkUpData(row), r.mCurrIH); + r.mCurrIH = tracker.HitLinkUpData(row)[r.mCurrIH]; float x = row.X(); float y = y0 + hh.x * stepY; @@ -282,10 +282,8 @@ GPUdic(2, 1) void GPUTPCTrackletConstructor::UpdateTracklet(int32_t /*nBlocks*/, break; } -#ifndef GPUCA_TEXTURE_FETCH_CONSTRUCTOR GPUglobalref() const cahit2* hits = tracker.HitData(row); GPUglobalref() const calink* firsthit = tracker.FirstHitInBin(row); -#endif //! GPUCA_TEXTURE_FETCH_CONSTRUCTOR tracker.GetConstantMem()->calibObjects.fastTransformHelper->InverseTransformYZtoNominalYZ(tracker.ISector(), iRow, yUncorrected, zUncorrected, yUncorrected, zUncorrected); if (tracker.Param().rec.tpc.rejectEdgeClustersInSeeding && tracker.Param().rejectEdgeClusterByY(yUncorrected, iRow, CAMath::Sqrt(tParam.Err2Y()))) { @@ -318,14 +316,14 @@ GPUdic(2, 1) void GPUTPCTrackletConstructor::UpdateTracklet(int32_t /*nBlocks*/, #endif int32_t nBinsY = row.Grid().Ny(); int32_t mybin = bin + k * nBinsY; - uint32_t hitFst = CA_TEXTURE_FETCH(calink, gAliTexRefu, firsthit, mybin); - uint32_t hitLst = CA_TEXTURE_FETCH(calink, gAliTexRefu, firsthit, mybin + ny + 1); + uint32_t hitFst = firsthit[mybin]; + uint32_t hitLst = firsthit[mybin + ny + 1]; #ifdef __HIPCC__ // Todo: fixme! for (uint32_t ih = hitFst - 1; ++ih < hitLst; /*ih++*/) { #else for (uint32_t ih = hitFst; ih < hitLst; ih++) { #endif - cahit2 hh = CA_TEXTURE_FETCH(cahit2, gAliTexRefu2, hits, ih); + cahit2 hh = hits[ih]; float y = y0 + hh.x * stepY; float z = z0 + hh.y * stepZ; float dy = y - yUncorrected; @@ -353,7 +351,7 @@ GPUdic(2, 1) void GPUTPCTrackletConstructor::UpdateTracklet(int32_t /*nBlocks*/, } } - cahit2 hh = CA_TEXTURE_FETCH(cahit2, gAliTexRefu2, hits, best); + cahit2 hh = hits[best]; float y = y0 + hh.x * stepY + tParam.GetY() - yUncorrected; float z = z0 + hh.y * stepZ + tParam.GetZ() - zUncorrected; @@ -390,8 +388,8 @@ GPUdic(2, 1) void GPUTPCTrackletConstructor::UpdateTracklet(int32_t /*nBlocks*/, const GPUglobalref() GPUTPCRow& GPUrestrict() row2 = tracker.Row(r.mLastRow); GPUglobalref() const cahit2* hits1 = tracker.HitData(row1); GPUglobalref() const cahit2* hits2 = tracker.HitData(row2); - const cahit2 hh1 = CA_TEXTURE_FETCH(cahit2, gAliTexRefu2, hits1, rowHits[r.mFirstRow]); - const cahit2 hh2 = CA_TEXTURE_FETCH(cahit2, gAliTexRefu2, hits2, rowHits[r.mLastRow]); + const cahit2 hh1 = hits1[rowHits[r.mFirstRow]]; + const cahit2 hh2 = hits2[rowHits[r.mLastRow]]; const float z1 = row1.Grid().ZMin() + hh1.y * row1.HstepZ(); const float z2 = row2.Grid().ZMin() + hh2.y * row2.HstepZ(); float oldOffset = tParam.ZOffset(); diff --git a/GPU/GPUTracking/SectorTracker/GPUTPCTrackletConstructor.h b/GPU/GPUTracking/SectorTracker/GPUTPCTrackletConstructor.h index af87d0276f1c7..031c32b2b4334 100644 --- a/GPU/GPUTracking/SectorTracker/GPUTPCTrackletConstructor.h +++ b/GPU/GPUTracking/SectorTracker/GPUTPCTrackletConstructor.h @@ -63,9 +63,6 @@ class GPUTPCTrackletConstructor : public GPUKernelTemplate struct GPUSharedMemory { CA_SHARED_STORAGE(GPUTPCRow mRows[GPUCA_ROW_COUNT]); // rows - int32_t mNextStartHitFirst; // First start hit to be processed by CUDA block during next iteration - int32_t mNextStartHitCount; // Number of start hits to be processed by CUDA block during next iteration - int32_t mNextStartHitFirstRun; // First run for dynamic scheduler? int32_t mNStartHits; // Total number of start hits #ifdef GPUCA_TRACKLET_CONSTRUCTOR_DO_PROFILE