Draft: PERF: Optimize SarSensorModel & GeocentricTranform
Summary
Improvement of the performances of:
-
SarSensorModel::projToSurface()
SarSensorModel::ApplyCoordinateConversion
SarSensorModel::interpolateSensorPosVel
Ratio(Duration, Duration)
EcefToWorld()
Rationale
In continuation on !933 (merged), and the profiling of https://gitlab.orfeo-toolbox.org/s1-tiling/normlim_sigma0 XYZToImage application, the aforementioned functions had a perceptible performance impact.
Implementation Details
EcefToWorld()
: Compute final atan2
on best candidate only
EcefToWorld()
was computing atan2()
on every possible solution. This function is quite costly. In the end (on small test), it was more time consuming than accessing DEM data (XYZToImage application)
SarSensorModel::ApplyCoordinateConversion
: Remove unnecessary allocations
SarSensorModel::ApplyCoordinateConversion
was systematically copying or filling a new vector every time it was called.
These dynamic allocations are not necessary. Polynomials are now evaluated on the fly without storing intermediary coefficients.
SarSensorModel::interpolateSensorPosVel
Don't accumulate on out parameters
It's better to compute accumulations into local (array) variables. Otherwise the compiler cannot assume the current function is the last one to have changed the current value.
Also avoids pow(sqrt(v), 2)
otbDateTime
Inline functions from Ratio()
and NumberOfTicks()
are extremely short functions that are called a lot. They benefit from inlining.
Copyright
The copyright owner is CNES and has signed the ORFEO ToolBox Contributor License Agreement.
Check before merging:
- All discussions are resolved
- At least 2
👍 votes from core developers, no👎 vote. - The feature branch is (reasonably) up-to-date with the base branch
- Dashboard is green
- Copyright owner has signed the ORFEO ToolBox Contributor License Agreement
- Optionally, run
git diff develop... -U0 --no-color | clang-format-diff.py -p1 -i
on latest changes and commit