Skip to content

GPU Metal: run the tracklet constructor with 128 threads per group - #16113

Merged
ktf merged 1 commit into
AliceO2Group:devfrom
ktf:pr16113
Nov 12, 2026
Merged

ktf merged 1 commit into
AliceO2Group:devfrom
ktf:pr16113

Conversation

@ktf

@ktf ktf commented Nov 12, 2026

Copy link
Copy Markdown
Member

The tracklet constructor needs the most registers a Metal thread can
have, which leaves room for 384 threads on a core of an M1 Max, so with
256 threads per group only one group fits. With 128 threads per group
two to three groups do, and the kernel takes 20% less time: 516 ms ->
415 ms on a quarter of a 30 kHz Pb-Pb time frame (--debug 1, interleaved
runs), with the same number of tracks. 96 and 192 threads are within
2% of 128; 64, 160, 256 and 384 are slower. The kernel loops over its
start hits with a grid stride and its shared memory does not depend on
the group size.

The tracklet constructor needs the most registers a Metal thread can
have, which leaves room for 384 threads on a core of an M1 Max, so with
256 threads per group only one group fits. With 128 threads per group
two to three groups do, and the kernel takes 20% less time: 516 ms ->
415 ms on a quarter of a 30 kHz Pb-Pb time frame (--debug 1, interleaved
runs), with the same number of tracks. 96 and 192 threads are within
2% of 128; 64, 160, 256 and 384 are slower. The kernel loops over its
start hits with a grid stride and its shared memory does not depend on
the group size.
@ktf
ktf requested a review from davidrohr as a code owner November 12, 2026 13:27
@ktf

ktf commented Nov 12, 2026

Copy link
Copy Markdown
Member Author

Metal only, not checked.

@ktf
ktf merged commit a133e3e into AliceO2Group:dev Nov 12, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant