From 59bda246692c9ff44955130200e3956c38594ff1 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Tue, 16 Jun 2026 18:23:52 +0200 Subject: [PATCH] GPU TPC: Remove uint16_t storage type support for dEdx (not compatible with saturated signals) --- .../Definitions/Parameters/GPUParameters.csv | 8 +++--- GPU/GPUTracking/dEdx/GPUdEdx.cxx | 2 +- GPU/GPUTracking/dEdx/GPUdEdx.h | 28 +++---------------- 3 files changed, 9 insertions(+), 29 deletions(-) diff --git a/GPU/GPUTracking/Definitions/Parameters/GPUParameters.csv b/GPU/GPUTracking/Definitions/Parameters/GPUParameters.csv index 823a70b24565b..97761a86b966b 100644 --- a/GPU/GPUTracking/Definitions/Parameters/GPUParameters.csv +++ b/GPU/GPUTracking/Definitions/Parameters/GPUParameters.csv @@ -60,8 +60,8 @@ GPUTPCGMO2Output_output,256,,,,,,,,,,,,,,,256 GPUTPCStartHitsFinder,256,,"[1024, 2]","[1024, 7]",256,256,256,256,256,512,512,512,,,,608 GPUTPCStartHitsSorter,256,,"[1024, 5]","[512, 7]",256,256,256,256,256,"[512, 1]","[512, 1]","[512, 1]",,,,608 GPUTPCCFCheckPadBaseline,576,,"[576, 2]","[576, 2]",,,,,,"[576, 2]",,,,,,"[576, 2]" -GPUTPCCFHIPTailConnector,256,,256,256,,,,,,256, -GPUTPCCFHIPClusterizer,256,,256,256,,,,,,256, +GPUTPCCFHIPTailConnector,256,,256,256,,,,,,256,,,,,, +GPUTPCCFHIPClusterizer,256,,256,256,,,,,,256,,,,,, GPUTPCCFChargeMapFiller_fillIndexMap,512,,512,512,,,,,,448,,,,,,448 GPUTPCCFChargeMapFiller_fillFromDigits,512,,512,512,,,,,,448,,,,,,448 GPUTPCCFChargeMapFiller_findFragmentStart,512,,512,512,,,,,,448,,,,,,448 @@ -108,8 +108,8 @@ TRACKLET_SELECTOR_HITS_REG_SIZE,12,0,9,27,,,,,,20,20,20,,,,2 ALTERNATE_BORDER_SORT,1,0,1,1,,,,,,1,1,1,,,,1 SORT_BEFORE_FIT,1,0,1,1,,,,,,1,1,1,,,,1 NO_ATOMIC_PRECHECK,0,0,1,1,,,,,,1,1,1,,,,1 -DEDX_STORAGE_TYPE,"""uint16_t""","""float""","""uint16_t""","""uint16_t""",,,,,,"""uint16_t""","""uint16_t""","""uint16_t""",,,,"""uint16_t""" -MERGER_INTERPOLATION_ERROR_TYPE,"""half""","""float""","""half""","""half""",,,,,,"""half""","""half""","""half""",,,,"""half""" +DEDX_STORAGE_TYPE,"""half""","""float""",,,,,,,,,,,,,, +MERGER_INTERPOLATION_ERROR_TYPE,"""half""","""float""",,,,,,,,,,,,,, COMP_GATHER_KERNEL,4,0,4,4,,,,,,4,4,4,,,,4 COMP_GATHER_MODE,3,0,3,3,,,,,,3,3,3,,,,3 CF_SCAN_WORKGROUP_SIZE,512,0,,,,,,,,,,,,,, diff --git a/GPU/GPUTracking/dEdx/GPUdEdx.cxx b/GPU/GPUTracking/dEdx/GPUdEdx.cxx index 7df2cd90dab1f..2e785c6a63571 100644 --- a/GPU/GPUTracking/dEdx/GPUdEdx.cxx +++ b/GPU/GPUTracking/dEdx/GPUdEdx.cxx @@ -67,7 +67,7 @@ GPUd() float GPUdEdx::GetSortTruncMean(GPUCA_PAR_DEDX_STORAGE_TYPE_A* GPUrestric CAAlgo::sort(array, array + count); float mean = 0; for (int32_t i = trunclow; i < trunchigh; i++) { - mean += (float)array[i] * (1.f / scalingFactor::factor); + mean += (float)array[i]; } return (mean / (trunchigh - trunclow)); } diff --git a/GPU/GPUTracking/dEdx/GPUdEdx.h b/GPU/GPUTracking/dEdx/GPUdEdx.h index c665b1a6bf02e..dad62c1decb53 100644 --- a/GPU/GPUTracking/dEdx/GPUdEdx.h +++ b/GPU/GPUTracking/dEdx/GPUdEdx.h @@ -43,26 +43,6 @@ class GPUdEdx GPUd() float GetSortTruncMean(GPUCA_PAR_DEDX_STORAGE_TYPE_A* array, int32_t count, int32_t trunclow, int32_t trunchigh); GPUd() void checkSubThresh(int32_t roc); - template - struct scalingFactor; - template - struct scalingFactor { - static constexpr float factor = 4.f; - static constexpr float round = 0.5f; - }; - template - struct scalingFactor { - static constexpr float factor = 1.f; - static constexpr float round = 0.f; - }; -#if defined(__CUDACC__) || defined(__HIPCC__) - template - struct scalingFactor { - static constexpr float factor = 1.f; - static constexpr float round = 0.f; - }; -#endif - GPUCA_PAR_DEDX_STORAGE_TYPE_A mChargeTot[MAX_NCL]; // No need for default, just some memory GPUCA_PAR_DEDX_STORAGE_TYPE_A mChargeMax[MAX_NCL]; // No need for default, just some memory float mSubThreshMinTot = 0.f; @@ -79,8 +59,8 @@ GPUdi() void GPUdEdx::checkSubThresh(int32_t roc) if (roc != mLastROC) { if (mNSubThresh && mCount + mNSubThresh < MAX_NCL) { for (int32_t i = 0; i < mNSubThresh; i++) { - mChargeTot[mCount] = (GPUCA_PAR_DEDX_STORAGE_TYPE_A)(mSubThreshMinTot * scalingFactor::factor + scalingFactor::round); - mChargeMax[mCount++] = (GPUCA_PAR_DEDX_STORAGE_TYPE_A)(mSubThreshMinMax * scalingFactor::factor + scalingFactor::round); + mChargeTot[mCount] = (GPUCA_PAR_DEDX_STORAGE_TYPE_A)mSubThreshMinTot; + mChargeMax[mCount++] = (GPUCA_PAR_DEDX_STORAGE_TYPE_A)mSubThreshMinMax; } mNClsROC[mLastROC] += mNSubThresh; mNClsROCSubThresh[mLastROC] += mNSubThresh; @@ -151,8 +131,8 @@ GPUdnii() void GPUdEdx::fillCluster(float qtot, float qmax, int32_t padRow, uint qmax /= residualGainMapGain; qtot /= residualGainMapGain; - mChargeTot[mCount] = (GPUCA_PAR_DEDX_STORAGE_TYPE_A)(qtot * scalingFactor::factor + scalingFactor::round); - mChargeMax[mCount++] = (GPUCA_PAR_DEDX_STORAGE_TYPE_A)(qmax * scalingFactor::factor + scalingFactor::round); + mChargeTot[mCount] = (GPUCA_PAR_DEDX_STORAGE_TYPE_A)qtot; + mChargeMax[mCount++] = (GPUCA_PAR_DEDX_STORAGE_TYPE_A)qmax; mNClsROC[roc]++; if (qtot < mSubThreshMinTot) { mSubThreshMinTot = qtot;