Vectorized updateTransport in TrackVectorFitter
Closes #2 (closed)
Should happen simultaneously with LHCb!1007 (merged)
- TrackVectorFitter updateTransport is now vectorized for the VELO (linear extrapolator) and parabolic propagation use cases.
- The RungeKutta extrapolator is not vectorized (and it would be quite hard to do so), therefore a significant gain is observed if the Extrapolator is set to TrackParabolicExtrapolator.
- The LHCb::Vector::Mem::Store container used to hold AOSOA updated states is no longer required to keep data around. Instead, the updated states are also transposed into AOS format at the end of the fit. This simplifies the entrypoints for TrackVectorFitter, and is actually faster.
- TrackVectorFitter requires to access the horizontally vectorized MagneticFieldGrid methods. Normally, this would be done through the ITrackExtrapolator interface, but here a templated method is required to accommodate any vector width at compile time. As a solution, TVF now employs
SmartIF<ILHCbMagnetSvc> m_magneticFieldService;
const LHCb::MagneticFieldGrid* m_magneticFieldGrid;
to do the job.
- An option to simply turn on the TrackVectorFitter has been added to RecoUpgradeTracking.py. It sets it up for both the Fast and Best sequence.
- The scalar code of TrackVectorFitter has been simplified.
- VectorConfiguration has been simplified and uses a Vectype selector.
- A minor bug of updateResiduals has been fixed, by which iterations with Outlier hits would not correctly populate the error residual.
- With these fixes, in Best sequence TrackVectorFitter is around 1.42x faster than TrackMasterFitter, maintaining the same results (1.5x with only parabolic extrapolation). In Fast sequence, TVF is 1.20x faster (1.34x with only parabolic extrapolation). Major slowdowns are now projectReference and updateMaterialCorrections (47% of TVF in Fast sequence).
Edited by Marco Cattaneo