Skip to content

Commit 281f6ce

Browse files
authored
Make sure 16 bytes alignment is still enforced (#15302)
Unaligned vectorised accesses on aarch64 are not available and result in verified sporadic crashes in the CI.
1 parent 756fb42 commit 281f6ce

2 files changed

Lines changed: 6 additions & 1 deletion

File tree

GPU/TPCFastTransformation/TPCFastSpaceChargeCorrection.cxx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ void TPCFastSpaceChargeCorrection::setActualBufferAddress(char* actualFlatBuffer
147147
}
148148
size_t bufferSize = scBufferOffset + scBufferSize;
149149
for (int32_t is = 0; is < 3; is++) {
150+
bufferSize = alignSize(bufferSize, SplineType::getParameterAlignmentBytes());
150151
mCorrectionData[is] = reinterpret_cast<char*>(mFlatBufferPtr + bufferSize);
151152
bufferSize += mSectorDataSizeBytes[is] * mGeo.getNumberOfSectors();
152153
}
@@ -255,7 +256,7 @@ void TPCFastSpaceChargeCorrection::setActualBufferAddress(char* actualFlatBuffer
255256

256257
for (int32_t is = 0; is < 3; is++) {
257258
size_t oldCorrectionDataOffset = alignSize(oldBufferSize, SplineType::getParameterAlignmentBytes());
258-
size_t correctionDataOffset = bufferSize;
259+
size_t correctionDataOffset = alignSize(bufferSize, SplineType::getParameterAlignmentBytes());
259260
mCorrectionData[is] = reinterpret_cast<char*>(mFlatBufferPtr + correctionDataOffset);
260261
memmove(mCorrectionData[is], mFlatBufferPtr + oldCorrectionDataOffset, mSectorDataSizeBytes[is] * mGeo.getNumberOfSectors());
261262
oldBufferSize = oldCorrectionDataOffset + mSectorDataSizeBytes[is] * mGeo.getNumberOfSectors();
@@ -508,6 +509,7 @@ void TPCFastSpaceChargeCorrection::finishConstruction()
508509
size_t bufferSize = scBufferOffsets[0] + scBufferSize;
509510
size_t correctionDataOffset[3];
510511
for (int32_t is = 0; is < 3; is++) {
512+
bufferSize = alignSize(bufferSize, SplineType::getParameterAlignmentBytes());
511513
correctionDataOffset[is] = bufferSize;
512514
mSectorDataSizeBytes[is] = 0;
513515
for (int32_t j = 0; j < mGeo.getNumberOfRows(); j++) {
@@ -524,6 +526,7 @@ void TPCFastSpaceChargeCorrection::finishConstruction()
524526
const SplineTypeInvYZ& splineInvYZ = reinterpret_cast<const SplineTypeInvYZ&>(spline);
525527
mSectorDataSizeBytes[is] += splineInvYZ.getSizeOfParameters();
526528
}
529+
mSectorDataSizeBytes[is] = alignSize(mSectorDataSizeBytes[is], SplineType::getParameterAlignmentBytes());
527530
}
528531
bufferSize += mSectorDataSizeBytes[is] * mGeo.getNumberOfSectors();
529532
}

GPU/TPCFastTransformation/TPCFastTransformPOD.cxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ size_t TPCFastTransformPOD::estimateSize(const TPCFastSpaceChargeCorrection& ori
6767
}
6868
// space for splines data
6969
for (int is = 0; is < 3; is++) {
70+
nextDynOffs = FlatObject::alignSize(nextDynOffs, SplineType::getParameterAlignmentBytes());
7071
nextDynOffs += origCorr.mSectorDataSizeBytes[is] * TPCFastTransformGeo::getNumberOfSectors();
7172
}
7273
nextDynOffs = alignOffset(nextDynOffs);
@@ -159,6 +160,7 @@ TPCFastTransformPOD* TPCFastTransformPOD::create(char* buff, size_t buffSize, co
159160

160161
// copy spline data
161162
for (int is = 0; is < 3; is++) {
163+
nextDynOffs = FlatObject::alignSize(nextDynOffs, SplineType::getParameterAlignmentBytes());
162164
float* data = reinterpret_cast<float*>(buff + nextDynOffs);
163165
LOGP(debug, "splinID={} start offset {} -> {}", is, nextDynOffs, (void*)data);
164166

0 commit comments

Comments
 (0)