GPU applications often contain several generations of PTX, embedded binaries, runtime-compiled variants, and fallback implementations. Names are useful hints, but they are weak evidence of execution.

Establish identity first

Before changing code, capture the loaded module, kernel symbol, target fingerprint, launch shape, resource usage, and artifact hash. Then connect that identity to the workload record that produced the timing. This prevents a clean benchmark from measuring a different path than production.

Reconstruct the execution model

Disassembly and profiler counters become useful after identity is fixed. Control flow explains divergent work. Register and shared-memory contracts constrain occupancy. Dependency chains reveal where apparent instruction count savings cannot shorten the critical path.

identity first; attribution second; rewrite third

Use paired measurements

Run baseline and candidate against the same recorded inputs, in alternating order, with clock and power state recorded. Keep output equality in the same report as timing. A candidate that cannot identify its artifact or reproduce its outputs is not ready for promotion, regardless of its median.

The discipline is deliberately narrow: optimize what executed, retain what measured, and keep every stronger production claim behind its own gate.

Back to engineering notes