Skip to content

Commit 5798927

Browse files
committed
GPU: Do not reupload unmodified calib objects to GPU
1 parent 963bbcb commit 5798927

File tree

2 files changed

+19
-12
lines changed

2 files changed

+19
-12
lines changed

GPU/GPUTracking/Global/GPUChainTracking.cxx

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -402,53 +402,53 @@ int GPUChainTracking::Init()
402402
return 0;
403403
}
404404

405-
void GPUChainTracking::UpdateGPUCalibObjects(int stream)
405+
void GPUChainTracking::UpdateGPUCalibObjects(int stream, const GPUCalibObjectsConst* ptrMask)
406406
{
407-
if (processors()->calibObjects.fastTransform) {
407+
if (processors()->calibObjects.fastTransform && (ptrMask == nullptr || ptrMask->fastTransform)) {
408408
memcpy((void*)mFlatObjectsShadow.mCalibObjects.fastTransform, (const void*)processors()->calibObjects.fastTransform, sizeof(*processors()->calibObjects.fastTransform));
409409
memcpy((void*)mFlatObjectsShadow.mTpcTransformBuffer, (const void*)processors()->calibObjects.fastTransform->getFlatBufferPtr(), processors()->calibObjects.fastTransform->getFlatBufferSize());
410410
mFlatObjectsShadow.mCalibObjects.fastTransform->clearInternalBufferPtr();
411411
mFlatObjectsShadow.mCalibObjects.fastTransform->setActualBufferAddress(mFlatObjectsShadow.mTpcTransformBuffer);
412412
mFlatObjectsShadow.mCalibObjects.fastTransform->setFutureBufferAddress(mFlatObjectsDevice.mTpcTransformBuffer);
413413
}
414-
if (processors()->calibObjects.fastTransformRef) {
414+
if (processors()->calibObjects.fastTransformRef && (ptrMask == nullptr || ptrMask->fastTransformRef)) {
415415
memcpy((void*)mFlatObjectsShadow.mCalibObjects.fastTransformRef, (const void*)processors()->calibObjects.fastTransformRef, sizeof(*processors()->calibObjects.fastTransformRef));
416416
memcpy((void*)mFlatObjectsShadow.mTpcTransformRefBuffer, (const void*)processors()->calibObjects.fastTransformRef->getFlatBufferPtr(), processors()->calibObjects.fastTransformRef->getFlatBufferSize());
417417
mFlatObjectsShadow.mCalibObjects.fastTransformRef->clearInternalBufferPtr();
418418
mFlatObjectsShadow.mCalibObjects.fastTransformRef->setActualBufferAddress(mFlatObjectsShadow.mTpcTransformRefBuffer);
419419
mFlatObjectsShadow.mCalibObjects.fastTransformRef->setFutureBufferAddress(mFlatObjectsDevice.mTpcTransformRefBuffer);
420420
}
421-
if (processors()->calibObjects.fastTransformHelper) {
421+
if (processors()->calibObjects.fastTransformHelper && (ptrMask == nullptr || ptrMask->fastTransformHelper)) {
422422
memcpy((void*)mFlatObjectsShadow.mCalibObjects.fastTransformHelper, (const void*)processors()->calibObjects.fastTransformHelper, sizeof(*processors()->calibObjects.fastTransformHelper));
423423
mFlatObjectsShadow.mCalibObjects.fastTransformHelper->setCorrMap(mFlatObjectsShadow.mCalibObjects.fastTransform);
424424
mFlatObjectsShadow.mCalibObjects.fastTransformHelper->setCorrMapRef(mFlatObjectsShadow.mCalibObjects.fastTransformRef);
425425
}
426426
#ifdef GPUCA_HAVE_O2HEADERS
427-
if (processors()->calibObjects.dEdxCalibContainer) {
427+
if (processors()->calibObjects.dEdxCalibContainer && (ptrMask == nullptr || ptrMask->dEdxCalibContainer)) {
428428
memcpy((void*)mFlatObjectsShadow.mCalibObjects.dEdxCalibContainer, (const void*)processors()->calibObjects.dEdxCalibContainer, sizeof(*processors()->calibObjects.dEdxCalibContainer));
429429
memcpy((void*)mFlatObjectsShadow.mdEdxSplinesBuffer, (const void*)processors()->calibObjects.dEdxCalibContainer->getFlatBufferPtr(), processors()->calibObjects.dEdxCalibContainer->getFlatBufferSize());
430430
mFlatObjectsShadow.mCalibObjects.dEdxCalibContainer->clearInternalBufferPtr();
431431
mFlatObjectsShadow.mCalibObjects.dEdxCalibContainer->setActualBufferAddress(mFlatObjectsShadow.mdEdxSplinesBuffer);
432432
mFlatObjectsShadow.mCalibObjects.dEdxCalibContainer->setFutureBufferAddress(mFlatObjectsDevice.mdEdxSplinesBuffer);
433433
}
434-
if (processors()->calibObjects.matLUT) {
434+
if (processors()->calibObjects.matLUT && (ptrMask == nullptr || ptrMask->matLUT)) {
435435
memcpy((void*)mFlatObjectsShadow.mCalibObjects.matLUT, (const void*)processors()->calibObjects.matLUT, sizeof(*processors()->calibObjects.matLUT));
436436
memcpy((void*)mFlatObjectsShadow.mMatLUTBuffer, (const void*)processors()->calibObjects.matLUT->getFlatBufferPtr(), processors()->calibObjects.matLUT->getFlatBufferSize());
437437
mFlatObjectsShadow.mCalibObjects.matLUT->clearInternalBufferPtr();
438438
mFlatObjectsShadow.mCalibObjects.matLUT->setActualBufferAddress(mFlatObjectsShadow.mMatLUTBuffer);
439439
mFlatObjectsShadow.mCalibObjects.matLUT->setFutureBufferAddress(mFlatObjectsDevice.mMatLUTBuffer);
440440
}
441-
if (processors()->calibObjects.trdGeometry) {
441+
if (processors()->calibObjects.trdGeometry && (ptrMask == nullptr || ptrMask->trdGeometry)) {
442442
memcpy((void*)mFlatObjectsShadow.mCalibObjects.trdGeometry, (const void*)processors()->calibObjects.trdGeometry, sizeof(*processors()->calibObjects.trdGeometry));
443443
mFlatObjectsShadow.mCalibObjects.trdGeometry->clearInternalBufferPtr();
444444
}
445-
if (processors()->calibObjects.tpcPadGain) {
445+
if (processors()->calibObjects.tpcPadGain && (ptrMask == nullptr || ptrMask->tpcPadGain)) {
446446
memcpy((void*)mFlatObjectsShadow.mCalibObjects.tpcPadGain, (const void*)processors()->calibObjects.tpcPadGain, sizeof(*processors()->calibObjects.tpcPadGain));
447447
}
448-
if (processors()->calibObjects.tpcZSLinkMapping) {
448+
if (processors()->calibObjects.tpcZSLinkMapping && (ptrMask == nullptr || ptrMask->tpcZSLinkMapping)) {
449449
memcpy((void*)mFlatObjectsShadow.mCalibObjects.tpcZSLinkMapping, (const void*)processors()->calibObjects.tpcZSLinkMapping, sizeof(*processors()->calibObjects.tpcZSLinkMapping));
450450
}
451-
if (processors()->calibObjects.o2Propagator) {
451+
if (processors()->calibObjects.o2Propagator && (ptrMask == nullptr || ptrMask->o2Propagator)) {
452452
memcpy((void*)mFlatObjectsShadow.mCalibObjects.o2Propagator, (const void*)processors()->calibObjects.o2Propagator, sizeof(*processors()->calibObjects.o2Propagator));
453453
mFlatObjectsShadow.mCalibObjects.o2Propagator->setGPUField(&processorsDevice()->param.polynomialField);
454454
mFlatObjectsShadow.mCalibObjects.o2Propagator->setBz(param().polynomialField.GetNominalBz());
@@ -618,8 +618,15 @@ void GPUChainTracking::DoQueuedCalibUpdates(int stream)
618618
}
619619
}
620620
if (mRec->IsGPU()) {
621+
std::array<unsigned char, sizeof(GPUTrackingFlatObjects)> oldFlatPtrs, oldFlatPtrsDevice;
622+
memcpy(oldFlatPtrs.data(), (void*)&mFlatObjectsShadow, oldFlatPtrs.size());
623+
memcpy(oldFlatPtrsDevice.data(), (void*)&mFlatObjectsDevice, oldFlatPtrsDevice.size());
621624
mRec->ResetRegisteredMemoryPointers(mFlatObjectsShadow.mMemoryResFlat);
622-
UpdateGPUCalibObjects(stream);
625+
bool ptrsChanged = memcmp(oldFlatPtrs.data(), (void*)&mFlatObjectsShadow, oldFlatPtrs.size()) || memcmp(oldFlatPtrsDevice.data(), (void*)&mFlatObjectsDevice, oldFlatPtrsDevice.size());
626+
if (ptrsChanged) {
627+
GPUInfo("Updating all calib objects since pointers changed");
628+
}
629+
UpdateGPUCalibObjects(stream, ptrsChanged ? nullptr : &mNewCalibObjects);
623630
}
624631
if (mNewCalibValues->newSolenoidField || mNewCalibValues->newContinuousMaxTimeBin) {
625632
GPUSettingsGRP grp = mRec->GetGRPSettings();

GPU/GPUTracking/Global/GPUChainTracking.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ class GPUChainTracking : public GPUChain, GPUReconstructionHelpers::helperDelega
207207
short mMemoryResFlat = -1;
208208
void* SetPointersFlatObjects(void* mem);
209209
};
210-
void UpdateGPUCalibObjects(int stream);
210+
void UpdateGPUCalibObjects(int stream, const GPUCalibObjectsConst* ptrMask = nullptr);
211211
void UpdateGPUCalibObjectsPtrs(int stream);
212212

213213
struct eventStruct // Must consist only of void* ptr that will hold the GPU event ptrs!

0 commit comments

Comments
 (0)