diff --git a/GPU/GPUTracking/Definitions/GPUSettingsList.h b/GPU/GPUTracking/Definitions/GPUSettingsList.h index fba8539bc4fc7..7db9615e54bf9 100644 --- a/GPU/GPUTracking/Definitions/GPUSettingsList.h +++ b/GPU/GPUTracking/Definitions/GPUSettingsList.h @@ -126,12 +126,12 @@ AddOptionRTC(cfInnerThreshold, unsigned char, 0, "", 0, "Cluster Finder extends AddOptionRTC(cfMinSplitNum, unsigned char, 1, "", 0, "Minimum number of split charges in a cluster for the cluster to be marked as split") AddOptionRTC(cfNoiseSuppressionEpsilon, unsigned char, 10, "", 0, "Cluster Finder: Difference between peak and charge for the charge to count as a minima during noise suppression") AddOptionRTC(cfNoiseSuppressionEpsilonRelative, unsigned char, 76, "", 0, "Cluster Finder: Difference between peak and charge for the charge to count as a minima during noise suppression, relative as fraction of 255") -AddOptionRTC(nWays, char, 3, "", 0, "Do N fit passes in final fit of merger") -AddOptionRTC(nWaysOuter, char, 0, "", 0, "Store outer param") -AddOptionRTC(trackFitRejectMode, char, 5, "", 0, "0: no limit on rejection or missed hits, >0: break after n rejected hits, <0: reject at max -n hits") +AddOptionRTC(nWays, signed char, 3, "", 0, "Do N fit passes in final fit of merger") +AddOptionRTC(nWaysOuter, signed char, 0, "", 0, "Store outer param") +AddOptionRTC(trackFitRejectMode, signed char, 5, "", 0, "0: no limit on rejection or missed hits, >0: break after n rejected hits, <0: reject at max -n hits") AddOptionRTC(dEdxTruncLow, unsigned char, 2, "", 0, "Low truncation threshold, fraction of 128") AddOptionRTC(dEdxTruncHigh, unsigned char, 77, "", 0, "High truncation threshold, fraction of 128") -AddOptionRTC(globalTracking, char, 1, "", 0, "Enable Global Tracking (prolong tracks to adjacent sectors to find short segments)") +AddOptionRTC(globalTracking, signed char, 1, "", 0, "Enable Global Tracking (prolong tracks to adjacent sectors to find short segments)") AddOptionRTC(disableRefitAttachment, unsigned char, 0, "", 0, "Bitmask to disable certain attachment steps during refit (1: attachment, 2: propagation, 4: loop following, 8: mirroring)") AddOptionRTC(rejectionStrategy, unsigned char, GPUCA_NAMESPACE::gpu::GPUSettings::RejectionStrategyA, "", 0, "Enable rejection of TPC clusters for compression (0 = no, 1 = strategy A, 2 = strategy B)") AddOptionRTC(mergeLoopersAfterburner, unsigned char, 1, "", 0, "Run afterburner for additional looper merging") @@ -139,21 +139,21 @@ AddOptionRTC(compressionTypeMask, unsigned char, GPUCA_NAMESPACE::gpu::GPUSettin AddOptionRTC(compressionSortOrder, unsigned char, GPUCA_NAMESPACE::gpu::GPUSettings::SortTime, "", 0, "Sort order of TPC compression (0 = time, 1 = pad, 2 = Z-time-pad, 3 = Z-pad-time, 4 = no sorting (use incoming order))") AddOptionRTC(sigBitsCharge, unsigned char, 4, "", 0, "Number of significant bits for TPC cluster charge in compression mode 1") AddOptionRTC(sigBitsWidth, unsigned char, 3, "", 0, "Number of significant bits for TPC cluster width in compression mode 1") -AddOptionRTC(forceEarlyTransform, char, -1, "", 0, "Force early TPC transformation also for continuous data (-1 = auto)") +AddOptionRTC(forceEarlyTransform, signed char, -1, "", 0, "Force early TPC transformation also for continuous data (-1 = auto)") AddOptionRTC(dropLoopers, unsigned char, 0, "", 0, "Drop looping tracks starting from second loop") AddOptionRTC(mergerCovSource, unsigned char, 2, "", 0, "Method to obtain covariance in track merger: 0 = simple filterErrors method, 1 = use cov from track following, 2 = refit (default)") AddOptionRTC(mergerInterpolateErrors, unsigned char, 1, "", 0, "Use interpolation instead of extrapolation for chi2 based cluster rejection") AddOptionRTC(mergeCE, unsigned char, 1, "", 0, "Merge tracks accross the central electrode") -AddOptionRTC(retryRefit, char, 1, "", 0, "Retry refit with seeding errors and without cluster rejection when fit fails (=2 means retry in same kernel, =1 for separate kernel") -AddOptionRTC(looperInterpolationInExtraPass, char, -1, "", 0, "Perform looper interpolation in an extra pass") -AddOptionRTC(mergerReadFromTrackerDirectly, char, 1, "", 0, "Forward data directly from tracker to merger on GPU") -AddOptionRTC(dropSecondaryLegsInOutput, char, 1, "", 0, "Do not store secondary legs of looping track in TrackTPC") -AddOptionRTC(enablePID, char, 1, "", 0, "Enable PID response") -AddOptionRTC(PID_useNsigma, char, 1, "", 0, "Use nSigma instead of absolute distance in PID response") -AddOptionRTC(adddEdxSubThresholdClusters, char, 1, "", 0, "Add sub threshold clusters in TPC dEdx computation") -AddOptionRTC(rejectEdgeClustersInSeeding, char, 0, "", 0, "Reject edge clusters based on uncorrected track Y during seeding") -AddOptionRTC(rejectEdgeClustersInTrackFit, char, 0, "", 0, "Reject edge clusters based on uncorrected track Y during track fit") -AddOptionArray(PID_remap, char, 9, (0, 1, 2, 3, 4, 5, 6, 7, 8), "", 0, "Remap Ipid to PID_reamp[Ipid] (no remap if<0)") // BUG: CUDA cannot yet hand AddOptionArrayRTC +AddOptionRTC(retryRefit, signed char, 1, "", 0, "Retry refit with seeding errors and without cluster rejection when fit fails (=2 means retry in same kernel, =1 for separate kernel") +AddOptionRTC(looperInterpolationInExtraPass, signed char, -1, "", 0, "Perform looper interpolation in an extra pass") +AddOptionRTC(mergerReadFromTrackerDirectly, signed char, 1, "", 0, "Forward data directly from tracker to merger on GPU") +AddOptionRTC(dropSecondaryLegsInOutput, signed char, 1, "", 0, "Do not store secondary legs of looping track in TrackTPC") +AddOptionRTC(enablePID, signed char, 1, "", 0, "Enable PID response") +AddOptionRTC(PID_useNsigma, signed char, 1, "", 0, "Use nSigma instead of absolute distance in PID response") +AddOptionRTC(adddEdxSubThresholdClusters, signed char, 1, "", 0, "Add sub threshold clusters in TPC dEdx computation") +AddOptionRTC(rejectEdgeClustersInSeeding, signed char, 0, "", 0, "Reject edge clusters based on uncorrected track Y during seeding") +AddOptionRTC(rejectEdgeClustersInTrackFit, signed char, 0, "", 0, "Reject edge clusters based on uncorrected track Y during track fit") +AddOptionArray(PID_remap, signed char, 9, (0, 1, 2, 3, 4, 5, 6, 7, 8), "", 0, "Remap Ipid to PID_reamp[Ipid] (no remap if<0)") // BUG: CUDA cannot yet hand AddOptionArrayRTC AddHelp("help", 'h') EndConfig() @@ -180,13 +180,13 @@ EndConfig() BeginSubConfig(GPUSettingsRec, rec, configStandalone, "REC", 0, "Reconstruction settings", rec) AddOptionRTC(maxTrackQPtB5, float, 1.f / GPUCA_MIN_TRACK_PTB5_DEFAULT, "", 0, "required max Q/Pt (==min Pt) of tracks") -AddOptionRTC(nonConsecutiveIDs, char, false, "", 0, "Non-consecutive cluster IDs as in HLT, disables features that need access to slice data in TPC merger") +AddOptionRTC(nonConsecutiveIDs, signed char, false, "", 0, "Non-consecutive cluster IDs as in HLT, disables features that need access to slice data in TPC merger") AddOptionRTC(fwdTPCDigitsAsClusters, unsigned char, 0, "", 0, "Forward TPC digits as clusters (if they pass the ZS threshold)") AddOptionRTC(bz0Pt10MeV, unsigned char, 60, "", 0, "Nominal Pt to set when bz = 0 (in 10 MeV)") -AddOptionRTC(fitInProjections, char, -1, "", 0, "Fit in projection, -1 to enable full fit for all but passes but the first one") -AddOptionRTC(fitPropagateBzOnly, char, -1, "", 0, "Propagate using Bz only for n passes") -AddOptionRTC(useMatLUT, char, 0, "", 0, "Use material lookup table for TPC refit") -AddOptionRTC(trackingRefitGPUModel, char, 1, "", 0, "Use GPU track model for the Global Track Refit") +AddOptionRTC(fitInProjections, signed char, -1, "", 0, "Fit in projection, -1 to enable full fit for all but passes but the first one") +AddOptionRTC(fitPropagateBzOnly, signed char, -1, "", 0, "Propagate using Bz only for n passes") +AddOptionRTC(useMatLUT, signed char, 0, "", 0, "Use material lookup table for TPC refit") +AddOptionRTC(trackingRefitGPUModel, signed char, 1, "", 0, "Use GPU track model for the Global Track Refit") AddCustomCPP(void SetMinTrackPtB5(float v) { maxTrackQPtB5 = v > 0.001f ? (1.f / v) : (1.f / 0.001f); }) AddSubConfig(GPUSettingsRecTPC, tpc) AddSubConfig(GPUSettingsRecTRD, trd) @@ -228,12 +228,12 @@ AddOption(checkKernelFailures, bool, false, "", 0, "Synchronize after each kerne AddOption(deterministicGPUReconstruction, int, -1, "", 0, "Make CPU and GPU debug output comparable (sort / skip concurrent parts), -1 = automatic if debugLevel >= 6") AddOption(showOutputStat, bool, false, "", 0, "Print some track output statistics") AddOption(runCompressionStatistics, bool, false, "compressionStat", 0, "Run statistics and verification for cluster compression") -AddOption(resetTimers, char, 1, "", 0, "Reset timers every event") +AddOption(resetTimers, signed char, 1, "", 0, "Reset timers every event") AddOption(deviceTimers, bool, true, "", 0, "Use device timers instead of host-based time measurement") AddOption(keepAllMemory, bool, false, "", 0, "Allocate all memory on both device and host, and do not reuse") AddOption(keepDisplayMemory, bool, false, "", 0, "Like keepAllMemory, but only for memory required for event display") AddOption(disableMemoryReuse, bool, false, "", 0, "Disable memory reusage (for debugging only)") -AddOption(memoryAllocationStrategy, char, 0, "", 0, "Memory Allocation Stragegy (0 = auto, 1 = individual allocations, 2 = single global allocation)") +AddOption(memoryAllocationStrategy, signed char, 0, "", 0, "Memory Allocation Stragegy (0 = auto, 1 = individual allocations, 2 = single global allocation)") AddOption(forceMemoryPoolSize, unsigned long, 1, "memSize", 0, "Force size of allocated GPU / page locked host memory", min(0ul)) AddOption(forceHostMemoryPoolSize, unsigned long, 0, "hostMemSize", 0, "Force size of allocated host page locked host memory (overriding memSize)", min(0ul)) AddOption(memoryScalingFactor, float, 1.f, "", 0, "Factor to apply to all memory scalers") @@ -245,28 +245,28 @@ AddOption(ompThreads, int, -1, "omp", 't', "Number of OMP threads to run (-1: al AddOption(ompKernels, unsigned char, 2, "", 0, "Parallelize with OMP inside kernels instead of over slices, 2 for nested parallelization over TPC sectors and inside kernels") AddOption(ompAutoNThreads, bool, true, "", 0, "Auto-adjust number of OMP threads, decreasing the number for small input data") AddOption(nDeviceHelperThreads, int, 1, "", 0, "Number of CPU helper threads for CPU processing") -AddOption(nStreams, char, 8, "", 0, "Number of GPU streams / command queues") -AddOption(nTPCClustererLanes, char, -1, "", 0, "Number of TPC clusterers that can run in parallel (-1 = autoset)") +AddOption(nStreams, signed char, 8, "", 0, "Number of GPU streams / command queues") +AddOption(nTPCClustererLanes, signed char, -1, "", 0, "Number of TPC clusterers that can run in parallel (-1 = autoset)") AddOption(overrideClusterizerFragmentLen, int, -1, "", 0, "Force the cluster max fragment len to a certain value (-1 = autodetect)") -AddOption(trackletSelectorSlices, char, -1, "", 0, "Number of slices to processes in parallel at max") -AddOption(trackletConstructorInPipeline, char, -1, "", 0, "Run tracklet constructor in the pipeline") -AddOption(trackletSelectorInPipeline, char, -1, "", 0, "Run tracklet selector in the pipeline") +AddOption(trackletSelectorSlices, signed char, -1, "", 0, "Number of slices to processes in parallel at max") +AddOption(trackletConstructorInPipeline, signed char, -1, "", 0, "Run tracklet constructor in the pipeline") +AddOption(trackletSelectorInPipeline, signed char, -1, "", 0, "Run tracklet selector in the pipeline") AddOption(fullMergerOnGPU, bool, true, "", 0, "Perform full TPC track merging on GPU instead of only refit") AddOption(delayedOutput, bool, true, "", 0, "Delay output to be parallel to track fit") -AddOption(mergerSortTracks, char, -1, "", 0, "Sort track indizes for GPU track fit") -AddOption(alternateBorderSort, char, -1, "", 0, "Alternative implementation for sorting of border tracks") -AddOption(tpcCompressionGatherMode, char, -1, "", 0, "TPC Compressed Clusters Gather Mode (0: DMA transfer gather gpu to host, 1: serial DMA to host and gather by copy on CPU, 2. gather via GPU kernal DMA access, 3. gather on GPU via kernel, dma afterwards") -AddOption(tpcCompressionGatherModeKernel, char, -1, "", 0, "TPC Compressed Clusters Gather Mode Kernel (0: unbufferd, 1-3: buffered, 4: multi-block)") +AddOption(mergerSortTracks, signed char, -1, "", 0, "Sort track indizes for GPU track fit") +AddOption(alternateBorderSort, signed char, -1, "", 0, "Alternative implementation for sorting of border tracks") +AddOption(tpcCompressionGatherMode, signed char, -1, "", 0, "TPC Compressed Clusters Gather Mode (0: DMA transfer gather gpu to host, 1: serial DMA to host and gather by copy on CPU, 2. gather via GPU kernal DMA access, 3. gather on GPU via kernel, dma afterwards") +AddOption(tpcCompressionGatherModeKernel, signed char, -1, "", 0, "TPC Compressed Clusters Gather Mode Kernel (0: unbufferd, 1-3: buffered, 4: multi-block)") AddOption(tpccfGatherKernel, bool, true, "", 0, "Use a kernel instead of the DMA engine to gather the clusters") AddOption(doublePipeline, bool, false, "", 0, "Double pipeline mode") AddOption(doublePipelineClusterizer, bool, true, "", 0, "Include the input data of the clusterizer in the double-pipeline") -AddOption(prefetchTPCpageScan, char, 0, "", 0, "Prefetch Data for TPC page scan in CPU cache") +AddOption(prefetchTPCpageScan, signed char, 0, "", 0, "Prefetch Data for TPC page scan in CPU cache") AddOption(runMC, bool, false, "", 0, "Process MC labels") AddOption(runQA, int, 0, "qa", 'q', "Enable tracking QA (negative number to provide bitmask for QA tasks)", message("Running QA: %s"), def(1)) AddOption(qcRunFraction, float, 100.f, "", 0, "Percentage of events to process with QC") AddOption(outputSharedClusterMap, bool, false, "", 0, "Ship optional shared cluster map as output for further use") AddOption(disableTPCNoisyPadFilter, bool, false, "", 0, "Disables all TPC noisy pad filters (Not the normal noise filter!)") -AddOption(createO2Output, char, 2, "", 0, "Create Track output in O2 format (2 = skip non-O2 output in GPU track format (reverts to =1 if QA is requested))") +AddOption(createO2Output, signed char, 2, "", 0, "Create Track output in O2 format (2 = skip non-O2 output in GPU track format (reverts to =1 if QA is requested))") AddOption(clearO2OutputFromGPU, bool, false, "", 0, "Free the GPU memory used for O2 output after copying to host, prevents further O2 processing on the GPU") AddOption(ignoreNonFatalGPUErrors, bool, false, "", 0, "Continue running after having received non fatal GPU errors, e.g. abort due to overflow") AddOption(tpcIncreasedMinClustersPerRow, unsigned int, 0, "", 0, "Impose a minimum buffer size for the clustersPerRow during TPC clusterization") @@ -557,13 +557,13 @@ EndConfig() // Derrived parameters used in GPUParam BeginHiddenConfig(GPUSettingsParam, param) AddVariableRTC(dAlpha, float, 0.f) // angular size -AddVariableRTC(assumeConstantBz, char, 0) // Assume a constant magnetic field -AddVariableRTC(toyMCEventsFlag, char, 0) // events were build with home-made event generator -AddVariableRTC(continuousTracking, char, 0) // Continuous tracking, estimate bz and errors for abs(z) = 125cm during seeding -AddVariableRTC(resetTimers, char, 0) // Reset benchmark timers before event processing -AddVariableRTC(dodEdx, char, 0) // Do dEdx computation -AddVariableRTC(earlyTpcTransform, char, 0) // do Early TPC transformation -AddVariableRTC(debugLevel, char, 0) // Debug level +AddVariableRTC(assumeConstantBz, signed char, 0) // Assume a constant magnetic field +AddVariableRTC(toyMCEventsFlag, signed char, 0) // events were build with home-made event generator +AddVariableRTC(continuousTracking, signed char, 0) // Continuous tracking, estimate bz and errors for abs(z) = 125cm during seeding +AddVariableRTC(resetTimers, signed char, 0) // Reset benchmark timers before event processing +AddVariableRTC(dodEdx, signed char, 0) // Do dEdx computation +AddVariableRTC(earlyTpcTransform, signed char, 0) // do Early TPC transformation +AddVariableRTC(debugLevel, signed char, 0) // Debug level AddVariableRTC(continuousMaxTimeBin, int, 0) // Max time bin for continuous tracking EndConfig() diff --git a/GPU/GPUTracking/utils/qconfig.cxx b/GPU/GPUTracking/utils/qconfig.cxx index f8a869ddb5987..82cd8df3a5036 100644 --- a/GPU/GPUTracking/utils/qconfig.cxx +++ b/GPU/GPUTracking/utils/qconfig.cxx @@ -334,10 +334,10 @@ inline int qAddOptionType(qConfigSettings& settings, bool& ref, int& true); } template <> -inline int qAddOptionType(qConfigSettings& settings, char& ref, int& i, const char** argv, const int argc, char /*def*/) +inline int qAddOptionType(qConfigSettings& settings, signed char& ref, int& i, const char** argv, const int argc, signed char /*def*/) { - return qAddOptionGeneric( - settings, ref, i, argv, argc, settings.set, [](const char* a) -> char { + return qAddOptionGeneric( + settings, ref, i, argv, argc, settings.set, [](const char* a) -> signed char { return atoi(a); }, settings.doDefault); diff --git a/GPU/GPUTracking/utils/qconfig_helpers.h b/GPU/GPUTracking/utils/qconfig_helpers.h index 4c80963d949a5..a873e618b05c6 100644 --- a/GPU/GPUTracking/utils/qconfig_helpers.h +++ b/GPU/GPUTracking/utils/qconfig_helpers.h @@ -42,6 +42,11 @@ inline std::string print_type(char val) return std::to_string(val); }; template <> +inline std::string print_type(signed char val) +{ + return std::to_string(val); +}; +template <> inline std::string print_type(unsigned char val) { return std::to_string(val);