Register Pressure
The situation where the register file becomes a performance bottleneck, limiting how many threads an SM can run.
Register pressure is the colorful name for when the register file becomes a bottleneck. The root cause: registers in Parallel Thread eXecution (PTX) are virtual and unlimited, but the register files of a Streaming Multiprocessor (SM) are physical and limited.
How it limits performance#
- The register space each thread uses is set by the kernel's Streaming ASSembler (SASS) code.
- All threads in a thread block are scheduled onto the same SM, so a block's total register space also depends on the kernel launch configuration.
- The more space each block needs, the fewer blocks fit on an SM. That reduces occupancy and makes it harder to hide latency.
Key idea Every register a thread uses is multiplied across every thread on the SM, so a few extra registers per thread can cost whole thread blocks of occupancy.
Hardware responses#
This SemiAnalysis article explains how register pressure relates to key features in recent SM architectures:
- Asynchronous copies (added in Ampere)
- The Tensor Memory Accelerator (TMA, added in Hopper)
- Tensor memory (added in Blackwell)
On CPUs#
CPUs face register pressure too. Similar register bottlenecks limit how far loops can be strip-mined during auto-vectorization.
Related#
- Occupancy — what register pressure reduces.
- Register file — the physical resource under pressure.
- Latency hiding — harder with fewer resident warps.