- 98.7%streaming-multiprocessor utilisation in the trace
- 332,965kernel launches in sixty seconds
- 4,236memory allocations, every one in the first second
An early profiling pass on the inference runtime reported a GPU compute efficiency figure and a gap, and the obvious next step was a programme of work to close the gap. Before starting it, I went back to the profile to find out what the number measured. It was the share of kernel time spent in matrix multiplications. The rest was attention, activation and normalisation kernels, all of them necessary, none of them idle.
What the profile said
A sixty-second trace on one consumer Blackwell GPU gave the whole picture.
59.73 seconds of kernel time in a 61.06-second window: 97.8 percent.
Zero allocation after warm-up, as it looks in a profile.
Host-to-device transfers: 96.3 percent of copy time.
The experiment it saved and the one it ran
The gap-closing programme would have chased a number that could not move, because the only way to reduce the non-matrix share is to remove the model's own layers. Instead the profile was used to test a different hypothesis. Fixed-size epochs and a dense slot map had been built so the runtime could capture its decode steps as CUDA graphs, on the theory that launch overhead was a lever. Profiling settled it, because the vendor's executor already manages graphs internally.
The epoch machinery stays for slot integrity, and graph capture was dropped as a lever.
The written rule
The runtime's performance notes now open with the rule this produced.
The same rule separated the cached and uncached tier sweeps into two tables that are never shown as one curve, and overturned a bandwidth-bound conclusion that had rested on an estimate for one card and a measurement for the other.
What this demonstrates
The habit that matters most in performance work: reading the definition of a metric before acting on its value.
A tenth of a percent and a thirteen percent that was not there are both results, and both are written down.
The decision to re-read the profile and the measurement rules were mine; AI coding agents, a mix of frontier and open-source models, ran the profiling under my governance system.