PrLongLivedTracking speedup with SIMD
This MR modifies part of the PrLongLivedTracking algorithm to achieve an execution speedup using SIMD instructions.
Optimisation of addUhits
The biggest change lies in the addUhits function. The current logic:
- Preselect U hits using the distance to the track
- Copy a track candidate and add a U hit (loop over all the U-hits)
- Run the
simplyFitfunction, extractchi2. - If
chi2is too big or the track is not y-compatible, delete the track.
The proposed idea is to parallelise over U hits using SIMD. Therefore:
- Preselect U hits using the distance to the track. Copy the preselected hits to the
SOAcontainer. - Run
simplyFitSIMD. This function will fit the track candidates with different U hits using SIMD. In addition, it will check thechi2andy-compatibilityrequirements. Only the accepted tracks are stored in the output vector
Affected parts of the code:
-
PrDownTrack.h:Downstream::SOA::Hits -
PrLongLivedTracking.cpp:simplyFitSIMD(),addUHits()
Optimisation of X-track fitting
Current behaviour (scalar):
- Find all the hits that satisfy the tolerance window in
findMatchingHits - For every X hit, create a track candidate, add the X hit (
fitXProjection), and fit (xFit). - Check the track quality and delete the track if it's bad.
The proposed idea is to parallelise over X hits using SIMD. Therefore:
- Collapse the three previous functions into one
createXTracks. - Fitting using SIMD instructions and parallelizing over the second X hits.
Affected parts of the code:
-
PrDownTrack.h:Downstream::SOA::Hits -
PrLongLivedTracking.cpp:findMatchingHits(),fitXProjection(),xFit()
Buffering of additional variables in Downstream::Hit
This MR adds two more variables to the Downstream::Hit object: xAtYEq0 and dxDy. Previously, these quantities were extracted from the hitHandler object every time they were needed for the computations.
Affected parts of the code:
-
PrDownTrack.h:Downstream::Hit -
PrLongLivedTracking.cpp:getPreSelection()
Cleanup
Remove unused sorting in getPreSelection()
This MR closes #614 (closed)
Edited by Volodymyr Svintozelskyi




