Repository navigation
Commit 12bdfeb
committed
GPU: one thread per threadgroup for the looper following on Metal
GPUTPCGMMergerFollowLoopers follows each looper in one thread through
a long serial loop of propagation steps and cluster searches. There
are few loopers, about 206 per event of 30-collision Pb-Pb, so with
256 threads per group they all landed in one threadgroup, where the
lanes of each SIMD group take different paths and run one after the
other: 33 to 41 ms per event in a Metal System Trace, against 0.6 ms
on the CPU. Without the cluster searches the kernel took 0.6 ms, and
32 or 64 threads per group did not help. With one thread per group
every looper runs in its own SIMD group; 16 groups per GPU core leave
room for twice as many loopers as here.
On an M1 Max the kernel took 3.6 to 8.5 ms per event in a trace with
8 groups per core, and the 30-collision Pb-Pb time frame takes 1058 ms
per event instead of 1088 with 8 or 16 groups per core alike (4
interleaved rounds of 10 runs, load average 4 to 7). The clusters are
byte-identical to the CPU's.1 parent 56ed42e commit 12bdfeb
1 file changed
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
31 | | - | |
| 31 | + | |
32 | 32 | | |
33 | 33 | | |
34 | 34 | | |
| |||
0 commit comments