GPU glossary
The vocabulary of the Compute layer.
Plain definitions of the terms that appear in GPU specifications, vendor benchmarks and utilisation reports, written for the people who finance and operate the facilities those GPUs run in.
The terms are in four groups, from the physical units inside a GPU to the measurements that show whether it is doing useful work. Each definition is written for owners, operators and investors who need to read a specification sheet, a benchmark or a utilisation report with a critical eye. Where a term bears directly on the economics of a facility, the definition says how.
Groups build on each other. Hardware terms describe what a GPU is made of, device software describes how work is expressed for it, host software describes what an operator runs, and performance describes the gap between what a GPU could do and what it does.
Group 01
Device hardware
Specification sheets quote core counts, memory sizes and peak rates. Which units AI workloads actually use decides which of those figures matter.
- CUDA device architecture
The common hardware design behind NVIDIA GPUs. A GPU is built as many small processors that run the same instruction across large groups of threads at once, with a memory system arranged to feed them. CUDA names both this architecture and the software platform written for it. Each generation keeps the same broad shape while changing the mix of compute units, memory and interconnect, which is why one programming model has survived two decades of hardware.
See also Streaming Multiprocessor, CUDA programming model, CUDA software platform
- Streaming MultiprocessorSM
The basic processing block of an NVIDIA GPU, roughly the counterpart of a CPU core. Each SM holds its own schedulers, arithmetic units, register file and fast local memory, and a data centre GPU contains well over a hundred of them. Work is handed to SMs as thread blocks, and how fully those SMs are kept busy is the first thing to examine when a GPU underperforms.
Each small block on the die is one SM. The Hopper die holds 144 across eight GPCs; 132 are enabled on the H100 SXM part. See also Streaming Multiprocessor architecture, Thread Block, Streaming Multiprocessor utilisation
- Core
A general term for the individual execution units inside a Streaming Multiprocessor. On a GPU the word covers several different unit types, including CUDA Cores for ordinary arithmetic and Tensor Cores for matrix maths, so a headline core count says little on its own. Unlike a CPU core, a GPU core has no scheduler or instruction fetch of its own; the SM supplies those.
The execution units of one SM: 128 CUDA Cores in rows and four Tensor Cores, one per partition. See also CUDA Core, Tensor Core
- Special Function UnitSFU
A unit inside the SM that computes transcendental functions such as exponentials, logarithms, sines and reciprocals in hardware. There are far fewer SFUs than CUDA Cores, so code that leans heavily on these functions can stall on them. The activation functions used in neural networks are a common source of SFU demand.
Four Special Function Units per partition, 16 per SM, against 128 CUDA Cores. See also Pipe utilisation
- Load/Store UnitLSU
The unit inside the SM that moves data between registers and the memory hierarchy. Every read from or write to shared, cache or global memory passes through an LSU. When a workload is memory-bound, the LSUs and the memory paths behind them, rather than the arithmetic units, set the pace.
Eight Load/Store Units per partition. Every access to shared, cache or global memory passes through one of them. See also Memory hierarchy, Memory-bound
- Warp Scheduler
The part of the SM that chooses, each clock cycle, which warp issues its next instruction. An SM has several warp schedulers, each managing a pool of resident warps and switching between them whenever one is waiting on memory. This cheap switching is how GPUs hide latency instead of avoiding it, and it only works when enough warps are resident to choose from.
One warp scheduler and dispatch unit per partition. Each cycle it picks one resident warp to issue. See also Warp, Latency hiding, Occupancy
- CUDA Core
An execution unit for ordinary scalar arithmetic: one floating-point or integer operation per clock cycle on one thread's data. CUDA Cores handle the general-purpose parts of a program. For the matrix multiplications that dominate AI training and inference they are far slower than Tensor Cores, so comparisons built on CUDA Core counts overstate what matters for AI workloads.
The 128 CUDA Cores of one SM, 32 per partition. Each handles one thread's scalar instruction per cycle. See also Tensor Core, Core
- Tensor Core
A specialised execution unit that performs a small matrix multiply-and-accumulate in a single operation rather than one element at a time. Tensor Cores are where almost all of the floating-point throughput quoted for a modern AI GPU comes from, and they support reduced-precision formats such as FP16, BF16, FP8 and FP4 that trade numeric precision for speed. The headline figure on a specification sheet is usually a Tensor Core peak at the lowest precision, often with sparsity assumed.
One Tensor Core per partition. These four units supply nearly all of the SM's quoted matrix throughput. See also Peak rate, Arithmetic bandwidth, Pipe utilisation
- Streaming Multiprocessor architecture
The internal layout of an SM in a given GPU generation: how many schedulers, CUDA Cores, Tensor Cores, load/store units and special function units it contains, the size of its register file and shared memory, and how they are grouped into partitions. Architecture names such as Ampere, Hopper and Blackwell refer mainly to changes at this level. Two GPUs with the same SM count can differ several-fold in Tensor Core throughput for this reason.
See also Streaming Multiprocessor, Compute Capability
- Texture Processing ClusterTPC
A grouping of two SMs that share some front-end and texture hardware. The name is inherited from graphics, where texture sampling mattered. For AI workloads the TPC is mostly an organisational unit, though some newer features let the SMs in a pair cooperate. It sits between the SM and the Graphics Processing Cluster in the GPU's hierarchy.
A TPC is a pair of SMs. Nine TPCs make up each GPC on the Hopper die. See also Graphics Processing Cluster
- Graphics Processing ClusterGPC
The largest subdivision inside a GPU die, containing several TPCs and therefore a set of SMs, plus shared dispatch hardware. A data centre GPU has a handful of GPCs. Some features, such as thread block clusters on recent architectures, let the SMs within one GPC share data directly, which is why the GPC boundary matters to performance engineers.
The eight GPCs of the Hopper die, four either side of the L2 cache. Each holds 18 SMs. See also Texture Processing Cluster, Thread Block
- Register File
A large block of very fast storage inside each SM, divided among the threads that are resident on it. Registers are the fastest memory on the GPU, but the register file is finite: the more registers each thread uses, the fewer threads can be resident at once. That trade-off, called register pressure, is one of the main constraints on occupancy.
One 64 KB register file per partition, 256 KB per SM, divided among every thread resident on it. See also Registers, Register pressure, Occupancy
- L1 Data Cache
A small, fast cache inside each SM that holds recently used data from global memory. On modern NVIDIA GPUs the same physical storage is split between L1 cache and programmer-managed shared memory, with the split configurable per kernel. A high L1 hit rate means the SM is being fed from local memory rather than waiting on the much slower path to GPU RAM.
The 256 KB per SM that serves as both L1 data cache and shared memory. The kernel chooses the split. See also Shared Memory, Memory hierarchy
- GPU RAM
The main memory attached to the GPU, separate from the host system's RAM. Data centre GPUs use high-bandwidth memory, HBM, stacked next to the processor die. Both its capacity and its bandwidth are first-order constraints on AI workloads: capacity decides how large a model fits on one device, and bandwidth decides how fast weights can be read during inference. HBM supply is one of the tightest constraints on the whole accelerator market.
The HBM stacks beside the die. They sit on the same package as the processor, which is what makes their bandwidth possible. See also Global Memory, Memory bandwidth
- Tensor Memory AcceleratorTMA
A hardware unit, introduced with the Hopper architecture, that copies multi-dimensional blocks of data between global memory and shared memory without occupying threads. Offloading these bulk copies frees the SM's threads and registers for computation and makes it practical to keep Tensor Cores fed. Code written to use TMA is one reason newer GPUs reach a higher share of their peak rate than older ones.
The Tensor Memory Accelerator, shared by the SM's four partitions. It moves tiles between global and shared memory without using threads. See also Shared Memory, Tensor Core
- Tensor Memory
A dedicated block of on-chip memory added in the Blackwell architecture to hold the accumulator values that Tensor Cores produce, relieving pressure on the register file. It is managed explicitly by the kernel rather than used as a cache. Features like this are why the realised throughput gain between GPU generations depends on software being rewritten to use them.
See also Register File, CUDA Tile programming model
Group 02
Device software
NVIDIA's advantage is the programming model and the two decades of software written against it. That is why switching accelerators costs more than the hardware price difference, and why a GPU's useful life depends on software being rewritten for each generation.
- CUDA programming model
The abstract description of a GPU that programmers write against: a hierarchy of threads grouped into blocks and grids, a hierarchy of memory with different speeds and scopes, and kernels that run across that hierarchy. The model hides the physical layout of SMs and cores so that the same code runs on different GPUs. It is the layer that gives NVIDIA its software moat: two decades of libraries and skills are written against it.
See also Thread hierarchy, Memory hierarchy, Kernel
- Compute Capability
A version number, such as 9.0 for Hopper or 10.0 for Blackwell, that identifies which features of the programming model a GPU supports. Compiled code targets a compute capability, and code compiled for a newer one will not run on older hardware. In practice it is the field to check when asking whether a given software stack can run on a given fleet.
See also Streaming Multiprocessor architecture, nvcc
- Thread hierarchy
The way the programming model groups work: individual threads are grouped into thread blocks, blocks are grouped into a grid, and on recent architectures blocks can also be grouped into clusters. Each level maps to a level of the hardware, with threads running on cores, blocks on SMs and the grid across the whole GPU. Getting this mapping right is most of what GPU programming consists of.
Thread, warp, block, grid. Each level is scheduled by, and runs on, the hardware unit beside it. See also Thread, Thread Block, Thread Block Grid
- Thread
The smallest unit of work in the programming model: one sequence of instructions operating on one piece of data. A GPU kernel is written as if for a single thread and then launched across thousands or millions of them. Threads are cheap to create and are not scheduled individually; the hardware handles them in warps.
One thread runs on one core and owns its registers. - Warp
A group of 32 threads that the hardware executes together, issuing the same instruction to all of them at once. The warp is the real unit of scheduling on an NVIDIA GPU, even though programmers write in terms of threads. When threads within a warp need to take different paths through the code, the warp must run each path in turn, which is the source of warp divergence.
Thirty-two threads form a warp, the unit a warp scheduler issues to. See also Warp Scheduler, Warp divergence, Warpgroup
- Warpgroup
A set of four consecutive warps, 128 threads, introduced with the Hopper architecture as the unit that issues instructions to the newer Tensor Cores. Operations at the warpgroup level allow much larger matrix tiles per instruction than warp-level ones. It is an example of the programming model growing a new level to match the hardware.
See also Warp, Tensor Core
- Thread Block
A group of threads, up to 1,024, that run on the same SM and can cooperate through shared memory and synchronisation barriers. The thread block is the unit in which work is handed to an SM, and a block never moves once placed. Choosing block size well decides how many blocks fit on an SM at once and therefore how well latency is hidden.
A thread block is placed on one SM and uses that SM's shared memory. See also Cooperative Thread Array, Shared Memory, Occupancy
- Cooperative Thread ArrayCTA
The hardware-level name for a thread block, used in the lower-level PTX and SASS documentation. The two terms describe the same thing from different sides: programmers say thread block, the compiler and hardware say CTA. On recent architectures, CTAs can be grouped into clusters that span several SMs.
See also Thread Block, Parallel Thread Execution
- Thread Block Grid
The full set of thread blocks launched for one kernel, arranged in one, two or three dimensions to match the shape of the data. The grid can be far larger than the GPU can run at once; the hardware works through it block by block as SMs become free. Grid size is set per launch, which is how one kernel scales across GPUs of different sizes.
The grid spans the whole GPU and its blocks work from global memory. See also Thread Block, Kernel
- Kernel
A function written to run on the GPU, launched from the host across a grid of threads. Everything a GPU computes, from a matrix multiply to an attention layer, is one or more kernels. Kernel quality determines how much of a GPU's theoretical throughput is actually delivered, which is why a facility's realised output depends on software as well as hardware.
See also Thread Block Grid, CUDA C++, Peak rate
- Memory hierarchy
The ordered set of memory types a thread can use, from fastest and smallest to slowest and largest: registers, shared memory and L1 cache, L2 cache, and global memory in GPU RAM. Each step down is roughly an order of magnitude slower. Most performance work on a GPU is about keeping data as high in this hierarchy as possible for as long as possible.
Registers, shared memory and global memory, each scoped to a level of the thread hierarchy. See also Registers, Shared Memory, Global Memory
- Registers
Per-thread storage, the fastest memory on the device, allocated from the SM's register file. Each thread gets its own registers and they are private to it. The compiler decides how many a kernel needs; when that number is high, fewer threads fit on the SM, and when it exceeds the limit, values spill to much slower memory.
See also Register File, Register pressure
- Global Memory
The memory space backed by GPU RAM, visible to every thread on the device and to the host. It is the largest memory on the GPU and by far the slowest to access from a thread, with latency measured in hundreds of cycles. Model weights, activations and datasets live here, so global memory bandwidth is the ceiling for any memory-bound workload.
See also GPU RAM, Memory bandwidth, Memory coalescing
- Parallel Thread ExecutionPTX
NVIDIA's intermediate instruction set: a stable, virtual assembly language that compilers target and that the driver translates into the actual machine code for a specific GPU. PTX lets code compiled years ago run on hardware released later. It is also where much of NVIDIA's compatibility guarantee lives, and the layer that competing chip makers find hardest to replicate.
See also Streaming Assembler, nvcc, NVRTC
- Streaming AssemblerSASS
The real machine code that an NVIDIA GPU executes, specific to each architecture. PTX is translated into SASS either at compile time or by the driver at load time. SASS is not publicly documented in full, which keeps the lowest layer of the stack proprietary; performance engineers read it through NVIDIA's disassembly tools when PTX does not explain what the hardware is doing.
- CUDA Tile programming model
A newer programming model, introduced alongside Blackwell, in which the programmer describes operations on tiles of data rather than on individual threads, and the compiler maps those tiles onto warps, Tensor Cores and memory. It raises the level of abstraction in the same way the thread model once did for graphics hardware. Its purpose is to make high Tensor Core utilisation reachable without hand-tuned kernels.
See also cuTile, Tensor Core, CUDA programming model
Group 03
Host software
Drivers, libraries and tools are what a facility actually operates and what customers actually run. They also produce every utilisation and health figure that an owner reports to customers and financiers.
- CUDA software platform
The complete set of software NVIDIA ships for programming its GPUs: the drivers, the compiler, the runtime and driver interfaces, the maths and deep learning libraries, and the profiling and management tools. It runs on the host CPU and controls the device. It is the reason most AI software is written for NVIDIA hardware first and ported elsewhere later, if at all.
See also CUDA programming model, NVIDIA GPU drivers, cuBLAS
- CUDA C++
The extended dialect of C++ in which most GPU kernels are written. It adds a small number of keywords and built-in variables for launching kernels, identifying threads and placing data in the memory hierarchy. Higher-level frameworks such as PyTorch ultimately call kernels written in CUDA C++ or generated from it.
- NVIDIA GPU drivers
The software that lets the operating system and applications talk to the GPU. The driver has a kernel-mode part that runs inside the operating system and a user-mode part that applications link against. Driver versions determine which CUDA versions and which GPUs are supported, and keeping thousands of nodes on compatible driver versions is a real operational task.
The driver's two halves: the user-mode library that applications link against, and the kernel module that addresses the hardware. See also nvidia.ko, libcuda.so
- nvidia.ko
The kernel-mode component of the NVIDIA driver on Linux, loaded into the operating system kernel. It handles the lowest-level work: memory mapping, interrupts, power states and the command queues that the GPU reads from. The open-source variant of this module is now the default for data centre GPUs.
nvidia.ko is the only component that addresses the GPU directly. See also NVIDIA GPU drivers
- libcuda.so
The user-mode driver library on Linux, and the implementation of the CUDA Driver API. Every CUDA program, whatever language or framework it uses, ends up calling into this library. It ships with the driver rather than with the CUDA toolkit, which is why the two must be version-compatible.
libcuda.so implements the Driver API and ships with the driver, not with the toolkit. See also CUDA Driver API, libcudart.so
- CUDA Driver API
The low-level programming interface to the GPU, exposed by libcuda.so. It gives explicit control over contexts, modules, memory and kernel launches and is used by language runtimes and frameworks that need that control. Most application code uses the simpler Runtime API instead.
The Driver API sits directly above the kernel module. Runtimes and frameworks that need fine control call it. See also CUDA Runtime API, libcuda.so
- CUDA Runtime API
The higher-level programming interface most CUDA programs use, implemented in libcudart.so and layered over the Driver API. It manages contexts and modules automatically and offers a simpler model for memory and kernel launches. The familiar functions for allocating GPU memory and copying data belong to this interface.
The Runtime API wraps the Driver API for application code. Most CUDA programs stop here. See also CUDA Driver API, libcudart.so
- libcudart.so
The shared library that implements the CUDA Runtime API. It ships with the CUDA toolkit and is usually bundled with, or statically linked into, each application. Because it sits above the driver, an application can carry its own runtime version while depending on a sufficiently recent driver underneath.
libcudart.so is bundled with the application, so it can move independently of the driver beneath it. See also CUDA Runtime API, libcuda.so
- nvcc
The CUDA compiler driver. It splits CUDA C++ source into host code, which it hands to the system's C++ compiler, and device code, which it compiles to PTX and SASS for the compute capabilities requested. Build times and the choice of target architectures are set here.
nvcc and NVRTC turn CUDA C++ into PTX and SASS, ahead of time and at runtime respectively. See also Parallel Thread Execution, Compute Capability, NVRTC
- NVRTC
A library for compiling CUDA C++ to PTX at runtime, inside a running program, rather than ahead of time. It allows frameworks to generate kernels specialised for the exact shapes and types they encounter. Just-in-time compilation of this kind is now routine in inference and training stacks.
See also nvcc, Parallel Thread Execution
- CUDA Binary Utilities
Command-line tools in the toolkit for inspecting compiled GPU code, including a disassembler that shows the SASS inside a binary and a tool that lists the architectures a binary targets. They are how engineers confirm what the compiler actually produced.
See also Streaming Assembler
- CUDA Graph
A way of recording a sequence of kernel launches and memory operations once and replaying it many times as a single unit. Replaying a graph removes most of the per-launch overhead from the host. For inference workloads made of many small kernels, graphs can be the difference between a GPU that idles between launches and one that stays busy.
- cuBLAS
NVIDIA's library of basic linear algebra routines for the GPU, above all matrix multiplication. It contains hand-tuned kernels for each architecture, and almost every training and inference framework calls it. The gap between a naive matrix multiply and the cuBLAS version is a practical measure of how much performance lives in software.
cuBLAS, cuDNN and CUTLASS sit between frameworks and the runtime. Most matrix work in a framework ends up in one of them. See also CUTLASS, Tensor Core
- cuDNN
NVIDIA's library of primitives for deep neural networks: convolutions, attention, normalisation, activation functions and similar operations, tuned per architecture. Frameworks call cuDNN for the layers it covers and fall back to their own kernels elsewhere. Its depth is one reason moving a mature workload off NVIDIA hardware costs more than the hardware price difference.
See also cuBLAS, CUDA software platform
- CUTLASS
An open-source C++ template library from NVIDIA for building high-performance matrix multiplication and related kernels. Where cuBLAS is a finished product, CUTLASS is the toolkit for people who need custom variants, such as fused operations in attention layers. Many of the fastest published kernels for recent GPUs are built on it.
- CuTe
The core layer of CUTLASS: a set of abstractions for describing how tensors are laid out in memory and across threads, and for moving data between layouts. It makes the tiling and data-movement patterns that Tensor Cores require explicit and composable. Most of the complexity in a modern matrix kernel is in these layouts rather than in the arithmetic.
- CuTe DSL
A Python interface to the CuTe abstractions that generates GPU code without writing C++ templates. It shortens the loop between designing a kernel and measuring it, and brings CUTLASS-grade performance within reach of teams that work mainly in Python.
- cuTile
A Python-based implementation of the CUDA Tile programming model, in which kernels are written in terms of operations on tiles and the compiler handles the mapping onto hardware. It is the entry point to the tile model for most developers and is intended to make near-peak Tensor Core performance accessible without low-level work.
See also CUDA Tile programming model, CuTe DSL
- CUPTI
The CUDA Profiling Tools Interface: a library that exposes hardware performance counters and activity records to profiling tools. Products such as Nsight Systems are built on it, and so are the monitoring agents that report what a fleet is actually doing. Any serious measurement of GPU utilisation ultimately comes through CUPTI or NVML.
CUPTI exposes the hardware counters. Nsight Systems and fleet monitoring agents read them through it. See also Nsight Systems, NVML, Pipe utilisation
- Nsight Systems
NVIDIA's system-wide profiler. It records a timeline of CPU activity, kernel launches, memory transfers and GPU execution so that an engineer can see where time goes and where the GPU is idle. It answers the question of whether a slow workload is limited by the GPU, the host or the data path between them.
See also CUPTI, Overhead, Performance bottleneck
- NVML
The NVIDIA Management Library: a programming interface for monitoring and managing GPUs, covering temperature, power draw, memory use, clock speeds, error counts and the coarse utilisation figures most dashboards report. Fleet telemetry, orchestration systems and the nvidia-smi tool are built on it.
NVML, its library libnvml.so and the nvidia-smi tool report GPU state to operators and schedulers. See also libnvml.so, nvidia-smi
- libnvml.so
The shared library that implements NVML on Linux, shipped with the driver. Monitoring agents and schedulers link against it directly. It is the practical source of the GPU health and power data that an operator reports to customers and lenders.
See also NVML
- nvidia-smi
The NVIDIA System Management Interface, a command-line tool built on NVML that shows the state of every GPU in a node: utilisation, memory, temperature, power and running processes. It is the first thing an operator runs when a node misbehaves. Its headline utilisation figure only reports whether any kernel was running, not how hard the GPU was working, and should not be mistaken for a measure of productive output.
See also NVML, Streaming Multiprocessor utilisation, Pipe utilisation
Group 04
Performance
A facility earns on the throughput it achieves. A specification sheet quotes the throughput it could achieve. These terms describe the gap between the two and the measurements that show where it comes from.
- Performance bottleneck
The resource that limits how fast a workload can run: arithmetic throughput, memory bandwidth, latency, host overhead or something else. Every workload has one, and speeding up anything other than the bottleneck changes nothing. Finding it is most of performance engineering, and it is the first question to ask when a facility's measured output falls short of its specification.
See also Roofline model, Compute-bound, Memory-bound
- Peak rate
The theoretical maximum throughput of a GPU for a given operation and precision, quoted on specification sheets in floating-point operations per second or bytes per second. No real workload reaches it; well-tuned matrix multiplications reach a large fraction and most other work reaches far less. Revenue models built on peak rates rather than achieved rates are a recurring source of disappointment.
The flat roof is the peak rate. Nothing above it is attainable, and most workloads sit well below it. See also Arithmetic bandwidth, Memory bandwidth, Pipe utilisation
- Roofline model
A simple chart that shows the best performance a workload can achieve on a given GPU as a function of its arithmetic intensity. Below a certain intensity the ceiling is set by memory bandwidth and rises with intensity; above it the ceiling is flat at the arithmetic peak. Placing a workload on the roofline shows immediately whether it is memory-bound or compute-bound and how far it is from the limit.
See also Arithmetic intensity, Arithmetic bandwidth, Memory bandwidth
- Arithmetic intensity
The number of arithmetic operations a workload performs per byte of data it moves from memory. High intensity means the GPU can do a lot of work on each value it fetches and is likely to be compute-bound; low intensity means it is fetching more than it computes and is likely to be memory-bound. Large-batch training has high intensity; token-by-token inference has low intensity.
Arithmetic intensity is the horizontal axis. Doing more work per byte fetched moves a workload right, out of the memory-bound region. See also Roofline model, Compute-bound, Memory-bound
- Arithmetic bandwidth
The rate at which a GPU can perform arithmetic, usually expressed in floating-point operations per second for a given precision. It is the flat part of the roofline. For AI workloads the relevant figure is the Tensor Core rate at the precision actually used.
Arithmetic bandwidth sets the height of the flat roof. See also Peak rate, Tensor Core, Compute-bound
- Memory bandwidth
The rate at which data can be moved between GPU RAM and the processor, measured in bytes per second. It is the sloped part of the roofline and the binding constraint for memory-bound work such as inference decoding, where each generated token requires reading the full set of model weights. Memory bandwidth, more than arithmetic peak, often determines how many tokens per second a GPU can serve.
Memory bandwidth sets the slope. Doubling it lifts the whole sloped section. See also GPU RAM, Memory-bound, Little's law
- Compute-bound
A workload whose speed is limited by how fast the GPU can perform arithmetic rather than by how fast it can fetch data. Compute-bound work sits under the flat part of the roofline and benefits from faster or more numerous Tensor Cores and from lower-precision formats. Training large models is the main compute-bound workload in AI.
Compute-bound work sits under the flat roof, where only faster arithmetic helps. See also Memory-bound, Arithmetic intensity
- Memory-bound
A workload whose speed is limited by memory bandwidth, because it performs too few operations per byte fetched to keep the arithmetic units busy. Most inference serving at small batch sizes is memory-bound. For such work, a GPU with more memory bandwidth outperforms one with a higher arithmetic peak, which matters when choosing hardware for an inference-heavy facility.
Memory-bound work sits under the slope, where only more bandwidth or higher intensity helps. See also Compute-bound, Memory bandwidth
- Overhead
Time spent on work that is neither computation nor useful data movement: launching kernels, synchronising, waiting on the host, or moving data across the slower link between host and device. Overhead is why a workload made of many small kernels can leave the GPU mostly idle even when each kernel is efficient. CUDA Graphs and larger batch sizes are the usual remedies.
See also CUDA Graph, Nsight Systems
- Latency hiding
The technique of keeping a GPU busy by switching between many resident warps so that while one waits for memory another computes. GPUs are designed around this rather than around the large caches and prediction logic that CPUs use. It depends on having enough independent work resident at once, which is what occupancy measures.
Latency hiding on one scheduler. While a warp is stalled on memory the scheduler issues from another. The two cycles with no issue are the ones where every resident warp was waiting. See also Warp Scheduler, Occupancy, Little's law
- Little's law
A result from queueing theory: the average number of items in a system equals their arrival rate multiplied by the time each spends there. Applied to a GPU, it says how many memory requests must be in flight to sustain a given bandwidth at a given latency. It explains why high memory bandwidth requires high occupancy, and why a GPU with few resident warps cannot use the bandwidth it paid for.
See also Latency hiding, Memory bandwidth, Occupancy
- Occupancy
The ratio of warps actually resident on an SM to the maximum the SM could hold. It is limited by how many registers and how much shared memory each thread block uses. Higher occupancy gives the warp schedulers more to choose from and so hides latency better, though beyond a point more occupancy does not help and the fastest kernels often run below the maximum.
Four warp slots over ten cycles. Warps are resident in 29 of the 40 slots, an occupancy of about 73 percent. See also Register pressure, Latency hiding, Thread Block
- Register pressure
The demand a kernel places on the register file. When each thread needs many registers, fewer threads fit on the SM, which lowers occupancy; when the demand exceeds what is available, the compiler spills values to local memory, which is far slower. Managing register pressure is a central trade-off in kernel tuning.
See also Register File, Registers, Occupancy
- Memory coalescing
The hardware's ability to combine the memory requests of the 32 threads in a warp into as few transactions as possible when those threads access adjacent addresses. Coalesced access uses the full width of the memory bus; scattered access wastes most of it. Data layout decisions that preserve coalescing can change effective bandwidth by an order of magnitude.
See also Global Memory, Warp, Memory bandwidth
- Bank conflict
A slowdown that occurs when several threads in a warp try to access shared memory addresses that map to the same memory bank in the same cycle, forcing the accesses to be serialised. Shared memory is divided into 32 banks precisely to allow 32 simultaneous accesses, so conflicts undo its main advantage. Tile layouts are often padded specifically to avoid them.
See also Shared Memory, Warp
- Warp divergence
What happens when threads within one warp take different branches of a conditional. Because a warp issues one instruction at a time, the hardware runs each branch in turn with the non-participating threads idle, so a fully divergent warp can run at a fraction of its potential. Code is structured so that threads in the same warp follow the same path wherever possible.
See also Warp, Branch efficiency
- Branch efficiency
The proportion of branch instructions in which all threads of a warp took the same path. It is the profiler's measure of warp divergence: an efficiency of 100 percent means no divergence, and anything much below it points to control flow that should be restructured.
See also Warp divergence
- Warp execution state
The condition of a resident warp at a given cycle: selected and issuing an instruction, eligible but not selected, or stalled waiting on something. Profilers break stalls down by cause, such as waiting on memory, on a barrier or on a dependent instruction. The distribution of these states across a kernel shows directly why the SM is not issuing every cycle.
Each cell is one warp in one cycle: issued, eligible but not selected, stalled, or no warp resident. See also Scoreboard stall, Issue efficiency, Warp Scheduler
- Scoreboard stall
A stall in which a warp cannot issue its next instruction because that instruction depends on a result, usually a memory load, that has not yet arrived. The scoreboard is the hardware structure that tracks these dependencies. Long scoreboard stalls are the signature of a memory-bound kernel with too little latency hiding.
See also Warp execution state, Memory-bound, Latency hiding
- Active cycle
A clock cycle in which an SM has at least one warp resident and so is doing or waiting on work, as opposed to a cycle in which it is empty. Counting active cycles against elapsed cycles separates time when the SM had nothing to do from time when it had work but was stalled. The two problems have different fixes.
Eight of the ten cycles have at least one resident warp. The last two are idle, not stalled, and need a different fix. See also Issue efficiency, Streaming Multiprocessor utilisation
- Issue efficiency
The fraction of active cycles in which a warp scheduler actually issued an instruction. It measures how well latency is being hidden: low issue efficiency means the scheduler frequently found every resident warp stalled. Along with pipe utilisation it is the most direct hardware measure of whether a GPU's time is being used.
Over the eight active cycles the scheduler issued six instructions. In cycles 3 and 6 every resident warp was stalled, so issue efficiency is 75 percent. See also Active cycle, Pipe utilisation, Warp execution state
- Pipe utilisation
How busy each class of execution unit within the SM is: the Tensor Cores, the CUDA Cores, the load/store units and the special function units, each reported separately. For AI workloads the figure that matters is Tensor Core pipe utilisation, which is routinely far lower than the coarse GPU utilisation number that monitoring tools display. This is the metric closest to what a customer is actually paying for.
See also Tensor Core, Streaming Multiprocessor utilisation, nvidia-smi
- Streaming Multiprocessor utilisationSM utilisation
The share of time, across the GPU, that SMs are active. It is a more meaningful figure than the single utilisation percentage from nvidia-smi, which only reports whether any kernel was running on the device at all, but it still does not say how hard active SMs were working. A GPU can show high SM utilisation while its Tensor Cores sit mostly idle. Pipe utilisation, one level down, shows whether the work is productive.
See also Pipe utilisation, nvidia-smi, Active cycle
Where this leads
What Outpace does with this vocabulary.
The performance group describes the gap between what a GPU could do and what it does. Outpace underwrites that gap. The thesis sets out why contracted, productive output matters more than installed capacity.
Build the next infrastructure project with Outpace.
Outpace works with project owners, infrastructure partners, capital partners and enterprise customers.