Skip to content

Commit 18b692e

Browse files
committed
GPU: Fix some settings must not be constexpr with RTC since they can change
1 parent 1c282ce commit 18b692e

24 files changed

Lines changed: 66 additions & 64 deletions

Detectors/TPC/workflow/src/EntropyEncoderSpec.cxx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ void EntropyEncoderSpec::run(ProcessingContext& pc)
148148
if (clusters.nTracks && clusters.solenoidBz != -1e6f && clusters.solenoidBz != mParam->bzkG) {
149149
throw std::runtime_error("Configured solenoid Bz does not match value used for track model encoding");
150150
}
151-
if (clusters.nTracks && clusters.maxTimeBin != -1e6 && clusters.maxTimeBin != mParam->par.continuousMaxTimeBin) {
151+
if (clusters.nTracks && clusters.maxTimeBin != -1e6 && clusters.maxTimeBin != mParam->continuousMaxTimeBin) {
152152
throw std::runtime_error("Configured max time bin does not match value used for track model encoding");
153153
}
154154
mCTFCoder.setSelectedIRFrames(pc.inputs().get<gsl::span<o2::dataformats::IRFrame>>("selIRFrames"));
@@ -162,7 +162,7 @@ void EntropyEncoderSpec::run(ProcessingContext& pc)
162162
const float totalT = std::max(mFastTransform->getMaxDriftTime(0), mFastTransform->getMaxDriftTime(GPUCA_NSLICES / 2));
163163

164164
unsigned int offset = 0, lasti = 0;
165-
const unsigned int maxTime = (mParam->par.continuousMaxTimeBin + 1) * o2::tpc::ClusterNative::scaleTimePacked - 1;
165+
const unsigned int maxTime = (mParam->continuousMaxTimeBin + 1) * o2::tpc::ClusterNative::scaleTimePacked - 1;
166166
#ifdef WITH_OPENMP
167167
#pragma omp parallel for firstprivate(offset, lasti) num_threads(mNThreads)
168168
#endif

GPU/GPUTracking/Base/GPUParam.cxx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ void GPUParam::SetDefaults(float solenoidBz)
119119
par.assumeConstantBz = false;
120120
par.toyMCEventsFlag = false;
121121
par.continuousTracking = false;
122-
par.continuousMaxTimeBin = 0;
122+
continuousMaxTimeBin = 0;
123123
par.debugLevel = 0;
124124
par.earlyTpcTransform = false;
125125
}
@@ -131,7 +131,7 @@ void GPUParam::UpdateSettings(const GPUSettingsGRP* g, const GPUSettingsProcessi
131131
par.assumeConstantBz = g->constBz;
132132
par.toyMCEventsFlag = g->homemadeEvents;
133133
par.continuousTracking = g->continuousMaxTimeBin != 0;
134-
par.continuousMaxTimeBin = g->continuousMaxTimeBin == -1 ? GPUSettings::TPC_MAX_TF_TIME_BIN : g->continuousMaxTimeBin;
134+
continuousMaxTimeBin = g->continuousMaxTimeBin == -1 ? GPUSettings::TPC_MAX_TF_TIME_BIN : g->continuousMaxTimeBin;
135135
}
136136
par.earlyTpcTransform = rec.tpc.forceEarlyTransform == -1 ? (!par.continuousTracking) : rec.tpc.forceEarlyTransform;
137137
qptB5Scaler = CAMath::Abs(bzkG) > 0.1f ? CAMath::Abs(bzkG) / 5.006680f : 1.f; // Repeat here, since passing in g is optional
@@ -140,9 +140,9 @@ void GPUParam::UpdateSettings(const GPUSettingsGRP* g, const GPUSettingsProcessi
140140
UpdateRun3ClusterErrors(p->param.tpcErrorParamY, p->param.tpcErrorParamZ);
141141
}
142142
if (w) {
143-
par.dodEdx = w->steps.isSet(GPUDataTypes::RecoStep::TPCdEdx);
143+
par.dodEdx = dodEdxDownscaled = w->steps.isSet(GPUDataTypes::RecoStep::TPCdEdx);
144144
if (par.dodEdx && p && p->tpcDownscaledEdx != 0) {
145-
par.dodEdx = (rand() % 100) < p->tpcDownscaledEdx;
145+
dodEdxDownscaled = (rand() % 100) < p->tpcDownscaledEdx;
146146
}
147147
}
148148
}

GPU/GPUTracking/Base/GPUParam.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ struct GPUParam_t {
5757
float bzCLight;
5858
float qptB5Scaler;
5959

60+
signed char dodEdxDownscaled;
61+
int continuousMaxTimeBin;
62+
6063
GPUTPCGeometry tpcGeometry; // TPC Geometry
6164
GPUTPCGMPolynomialField polynomialField; // Polynomial approx. of magnetic field for TPC GM
6265
const unsigned int* occupancyMap; // Ptr to TPC occupancy map

GPU/GPUTracking/DataCompression/GPUTPCDecompressionKernels.cxx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ GPUdii() void GPUTPCDecompressionKernels::Thread<GPUTPCDecompressionKernels::ste
2828
CompressedClusters& GPUrestrict() cmprClusters = decompressor.mInputGPU;
2929
const GPUParam& GPUrestrict() param = processors.param;
3030

31-
const unsigned int maxTime = (param.par.continuousMaxTimeBin + 1) * ClusterNative::scaleTimePacked - 1;
31+
const unsigned int maxTime = (param.continuousMaxTimeBin + 1) * ClusterNative::scaleTimePacked - 1;
3232

3333
for (int i = trackStart + get_global_id(0); i < trackEnd; i += get_global_size(0)) {
3434
decompressTrack(cmprClusters, param, maxTime, i, decompressor.mAttachedClustersOffsets[i], decompressor);
@@ -85,7 +85,7 @@ GPUdii() void GPUTPCDecompressionKernels::decompressTrack(CompressedClusters& cm
8585
pad = param.tpcGeometry.NPads(row) * ClusterNative::scalePadPacked - 1;
8686
}
8787
}
88-
if (param.par.continuousMaxTimeBin > 0 && time >= maxTime) {
88+
if (param.continuousMaxTimeBin > 0 && time >= maxTime) {
8989
if (time >= 0xFFFFFF - 544768) { // Constant 544768 = (2^23 - LHCMAXBUNCHES(3564) * MAXORBITS(256) * scaleTimePacked(64) / BCPERTIMEBIN(8)) / 2)
9090
time = 0;
9191
} else {
@@ -152,8 +152,8 @@ GPUdii() void GPUTPCDecompressionKernels::Thread<GPUTPCDecompressionKernels::ste
152152
if (t < 0) {
153153
t = 0;
154154
}
155-
if (processors.param.par.continuousMaxTimeBin > 0 && t > processors.param.par.continuousMaxTimeBin) {
156-
t = processors.param.par.continuousMaxTimeBin;
155+
if (processors.param.continuousMaxTimeBin > 0 && t > processors.param.continuousMaxTimeBin) {
156+
t = processors.param.continuousMaxTimeBin;
157157
}
158158
cl.setTime(t);
159159
}

GPU/GPUTracking/DataCompression/TPCClusterDecompressor.cxx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ int TPCClusterDecompressor::decompress(const CompressedClusters* clustersCompres
4343
if (clustersCompressed->nTracks && clustersCompressed->solenoidBz != -1e6f && clustersCompressed->solenoidBz != param.bzkG) {
4444
throw std::runtime_error("Configured solenoid Bz does not match value used for track model encoding");
4545
}
46-
if (clustersCompressed->nTracks && clustersCompressed->maxTimeBin != -1e6 && clustersCompressed->maxTimeBin != param.par.continuousMaxTimeBin) {
46+
if (clustersCompressed->nTracks && clustersCompressed->maxTimeBin != -1e6 && clustersCompressed->maxTimeBin != param.continuousMaxTimeBin) {
4747
throw std::runtime_error("Configured max time bin does not match value used for track model encoding");
4848
}
4949
std::vector<ClusterNative> clusters[NSLICES][GPUCA_ROW_COUNT];
@@ -52,7 +52,7 @@ int TPCClusterDecompressor::decompress(const CompressedClusters* clustersCompres
5252
(&locks[0][0])[i].clear();
5353
}
5454
unsigned int offset = 0, lasti = 0;
55-
const unsigned int maxTime = param.par.continuousMaxTimeBin > 0 ? ((param.par.continuousMaxTimeBin + 1) * ClusterNative::scaleTimePacked - 1) : TPC_MAX_TIME_BIN_TRIGGERED;
55+
const unsigned int maxTime = param.continuousMaxTimeBin > 0 ? ((param.continuousMaxTimeBin + 1) * ClusterNative::scaleTimePacked - 1) : TPC_MAX_TIME_BIN_TRIGGERED;
5656
GPUCA_OPENMP(parallel for firstprivate(offset, lasti))
5757
for (unsigned int i = 0; i < clustersCompressed->nTracks; i++) {
5858
if (i < lasti) {
@@ -99,8 +99,8 @@ int TPCClusterDecompressor::decompress(const CompressedClusters* clustersCompres
9999
if (t < 0) {
100100
t = 0;
101101
}
102-
if (param.par.continuousMaxTimeBin > 0 && t > param.par.continuousMaxTimeBin) {
103-
t = param.par.continuousMaxTimeBin;
102+
if (param.continuousMaxTimeBin > 0 && t > param.continuousMaxTimeBin) {
103+
t = param.continuousMaxTimeBin;
104104
}
105105
cl.setTime(t);
106106
}

GPU/GPUTracking/DataCompression/TPCClusterDecompressor.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ inline void TPCClusterDecompressor::decompressTrack(const CompressedClusters* cl
101101
pad = param.tpcGeometry.NPads(row) * ClusterNative::scalePadPacked - 1;
102102
}
103103
}
104-
if (param.par.continuousMaxTimeBin > 0 && time >= maxTime) {
104+
if (param.continuousMaxTimeBin > 0 && time >= maxTime) {
105105
if (time >= 0xFFFFFF - 544768) { // Constant 544768 = (2^23 - LHCMAXBUNCHES(3564) * MAXORBITS(256) * scaleTimePacked(64) / BCPERTIMEBIN(8)) / 2)
106106
time = 0;
107107
} else {

GPU/GPUTracking/DataTypes/GPUTPCClusterOccupancyMap.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ GPUd() unsigned int GPUTPCClusterOccupancyMapBin::getNBins(const GPUParam& param
2222
if (param.rec.tpc.occupancyMapTimeBins == 0) {
2323
return 0;
2424
}
25-
unsigned int maxTimeBin = param.par.continuousTracking ? param.par.continuousMaxTimeBin : TPC_MAX_TIME_BIN_TRIGGERED;
25+
unsigned int maxTimeBin = param.par.continuousTracking ? param.continuousMaxTimeBin : TPC_MAX_TIME_BIN_TRIGGERED;
2626
return (maxTimeBin + param.rec.tpc.occupancyMapTimeBins) / param.rec.tpc.occupancyMapTimeBins; // Not -1, since maxTimeBin is allowed
2727
}
2828

GPU/GPUTracking/Definitions/GPUSettingsList.h

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -565,14 +565,13 @@ EndConfig()
565565

566566
// Derrived parameters used in GPUParam
567567
BeginHiddenConfig(GPUSettingsParam, param)
568-
AddVariableRTC(dAlpha, float, 0.f) // angular size
569-
AddVariableRTC(assumeConstantBz, signed char, 0) // Assume a constant magnetic field
570-
AddVariableRTC(toyMCEventsFlag, signed char, 0) // events were build with home-made event generator
571-
AddVariableRTC(continuousTracking, signed char, 0) // Continuous tracking, estimate bz and errors for abs(z) = 125cm during seeding
572-
AddVariableRTC(dodEdx, signed char, 0) // Do dEdx computation
573-
AddVariableRTC(earlyTpcTransform, signed char, 0) // do Early TPC transformation
574-
AddVariableRTC(debugLevel, signed char, 0) // Debug level
575-
AddVariableRTC(continuousMaxTimeBin, int, 0) // Max time bin for continuous tracking
568+
AddVariableRTC(dAlpha, float, 0.f) // angular size
569+
AddVariableRTC(assumeConstantBz, signed char, 0) // Assume a constant magnetic field
570+
AddVariableRTC(toyMCEventsFlag, signed char, 0) // events were build with home-made event generator
571+
AddVariableRTC(continuousTracking, signed char, 0) // Continuous tracking, estimate bz and errors for abs(z) = 125cm during seeding
572+
AddVariableRTC(dodEdx, signed char, 0) // Do dEdx computation
573+
AddVariableRTC(earlyTpcTransform, signed char, 0) // do Early TPC transformation
574+
AddVariableRTC(debugLevel, signed char, 0) // Debug level
576575
EndConfig()
577576

578577
EndNamespace() // gpu

GPU/GPUTracking/Global/GPUChainTracking.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ bool GPUChainTracking::ValidateSettings()
285285
GPUError("OMP Kernels require mergerReadFromTrackerDirectly");
286286
return false;
287287
}
288-
if (param().par.continuousMaxTimeBin > (int)GPUSettings::TPC_MAX_TF_TIME_BIN) {
288+
if (param().continuousMaxTimeBin > (int)GPUSettings::TPC_MAX_TF_TIME_BIN) {
289289
GPUError("configured max time bin exceeds 256 orbits");
290290
return false;
291291
}

GPU/GPUTracking/Global/GPUChainTrackingClusterizer.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,7 @@ int GPUChainTracking::RunTPCClusterizer_prepare(bool restorePointers)
472472
mCFContext.reset(new GPUTPCCFChainContext);
473473
}
474474
const short maxFragmentLen = GetProcessingSettings().overrideClusterizerFragmentLen;
475-
const unsigned int maxAllowedTimebin = param().par.continuousTracking ? std::max<int>(param().par.continuousMaxTimeBin, maxFragmentLen) : TPC_MAX_TIME_BIN_TRIGGERED;
475+
const unsigned int maxAllowedTimebin = param().par.continuousTracking ? std::max<int>(param().continuousMaxTimeBin, maxFragmentLen) : TPC_MAX_TIME_BIN_TRIGGERED;
476476
mCFContext->tpcMaxTimeBin = maxAllowedTimebin;
477477
const CfFragment fragmentMax{(tpccf::TPCTime)mCFContext->tpcMaxTimeBin + 1, maxFragmentLen};
478478
mCFContext->prepare(mIOPtrs.tpcZS, fragmentMax);

0 commit comments

Comments
 (0)