Repository navigation
Conversation
shinaoka
force-pushed
the
perf/tall-panel-region-cost
branch
from
October 14, 2026 05:00
911e897 to
88fec8d
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No code change. This measures what is actually measurable inside this fork for
tlinalg-rs#46's tall-panel item, and says which half is architectural.The panel does not reach the threads, and four threads is not what stops it. The
unblocked
4096 x 16QR — 16 reflectors, each a(4096 - j) x (16 - j)rank-oneupdate, which is the level-2 panel shape — four-thread pool on CPUs 0-3, best of 20,
smallest over 10 interleaved reps (ms):
qr 4096x161.13x, three quarters of it already spent at two threads, and worse at eight. So the
premise that the panel "stops scaling at four threads" is optimistic: on four cores it
barely starts.
The per-call region cost, three ways. 300 repetitions of one
64 x 64 x 64product,four-thread pool, best of 3 calls, smallest over 5 interleaved reps, µs per repetition:
Fifteen reflectors per panel is 32-57 µs of the panel's 173 µs — a fifth to a third, and
the rest is that each reflector is one
4096 x 15pass over 0.5 MB on a shared memorysystem.
What that means. Batching the reflectors is what the blocked level already does one
level up; the panel is what remains, and its chain is inherently sequential. What is
left to parallelise is inside one reflector, and the fork already does that — the cost
is a fresh rayon region per reflector with the pool parked in between. Reusing the
region across the chain is a caller-owned work model, i.e. the ledger's
Thread policyrow (
tenferro-rs#2000,strided-rs#6), not a threshold. Hence the measurement insteadof half of the change.
Recorded, not taken: the unblocked
m x 16QR is 34% slower threaded atm = 1024and 17% at
2048(0.0535 -> 0.0719, 0.1004 -> 0.1171) and pays only fromm = 3072(0.1483 -> 0.1423, 0.1958 -> 0.1733), while the rank-one arm's
8192-element floor isactive from
m ≈ 546. That floor is load-bearing where it was measured (fa22a69), soit was not moved; whether the loss is the region or the arm's column split is not
separated here.
Record:
docs/worklogs/2026-10-14-tall-panel-region-cost.md. Ledger row DROPPED.Limits: four physical cores, so the eight-thread column is eight workers on four cores.
These are
f64numbers through faer's own API; the campaign's4096 x 256 b1 c64cell isc64through tlinalg's provider and its 13.4 ms / 5 ms panel are not reproduced here.