Skip to content

perf: Hand the sympy vacuum kernel dt/ds - #6059

Open
andiwand wants to merge 6 commits into
acts-project:mainfrom
andiwand:perf-sympy-dtds-cache
Open

andiwand wants to merge 6 commits into
acts-project:mainfrom
andiwand:perf-sympy-dtds-cache

Conversation

@andiwand

@andiwand andiwand commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

dt/ds cached in SympyStepper::State rather than formed from mass and momentum inside the vacuum kernel on every step. It is constant while q/p is, so it is refreshed exactly where q/p moves: initialize, both update overloads and a dense step. An assert sits on every consumption site, because a stale cache would show up only as a wrong time.

The dense step's cold vacuum branch keeps the combined kernel, which has no cached value at hand and forms its own.

Cumulative on the vacuum step with covariance transport, on top of #5977 and #5978: -12.1% per step, and -11.8% against the ATLAS stepper.

Stacked on #5978 and #6058.

andiwand and others added 3 commits September 9, 2026 17:55
The covariance-transport split of acts-project#5977, now for the dense step. The dense
kernel is emitted twice, with the jacobian half kept or dropped, and
sympyDenseStep takes the choice as a template parameter, a translation unit
each, so neither body tests an empty jacobian span on every trial.

The step mode is now a path and a jacobian flag rather than three named modes,
since the two are independent.

Measured on the dense step: -1% with covariance transport, -3% without.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeF2fKMGhEAZV7A7b8BsM8
detail::Gsf::updateStepper wrote the filtered free parameters and the
covariance straight onto a component state. The single stepper never saw the
write, so it could not maintain what its state derives from the parameters.

The component now goes through SingleStepper::update, the same call the KF and
the single-stepper CKF make after a filter step. Beyond the parameters and the
covariance that also refreshes the cached field and the bound-to-free jacobian,
so the GSF no longer transports the filtered covariance with the jacobian of
the predicted parameters. This moves the GSF output, hence the reference
updates.

LoopComponentProxy::update carried the same defect and had no caller. It now
delegates to the single stepper, and the GSF calls it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeF2fKMGhEAZV7A7b8BsM8
dt/ds cached in SympyStepper::State rather than formed from mass and momentum
inside the vacuum kernel on every step. It is constant while q/p is, so it is
refreshed exactly where q/p moves: initialize, both update overloads and a
dense step. An assert sits on every consumption site, because a stale cache
would show up only as a wrong time.

The dense step's cold vacuum branch keeps the combined kernel, which has no
cached value at hand and forms its own.

Cumulative on the vacuum step with covariance transport, on top of acts-project#5977 and
acts-project#5978: -12.1% per step, and -11.8% against the ATLAS stepper.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeF2fKMGhEAZV7A7b8BsM8
@andiwand andiwand added this to the next milestone Sep 9, 2026
@github-actions github-actions Bot added Component - Core Affects the Core module Component - Documentation Affects the documentation Track Fitting Public API labels Sep 9, 2026
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Public API surface diff

+1 added, 0 breaking.

➕ Added public API

New public data members (1)
  • Acts::SympyStepper::State::dtds

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

📊: Physics performance monitoring for dba1fb7

Full contents

physmon summary

The four ODD GSF root file hashes and the two GSF physmon entries. Nothing else
moves: 38 of the 40 physmon comparisons stay green, and inside the two GSF ones
912 checks pass. The 20 that fail are all the KolmogorovTest on a gaussian-fit
summary profile, which churns once any input histogram moves. The raw
distributions agree, pull_qop at KS 1.0 and 0 of 98 ratio bins off.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeF2fKMGhEAZV7A7b8BsM8
@github-actions github-actions Bot added Infrastructure Changes to build tools, continous integration, ... Changes Performance labels Sep 9, 2026
@github-actions github-actions Bot removed the Infrastructure Changes to build tools, continous integration, ... label Sep 14, 2026
# Conflicts:
#	Python/Examples/tests/root_file_hashes.txt
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Component - Core Affects the Core module Public API

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant