CUDA Device Architecture
The unified GPU hardware design behind CUDA, built from many identical, general-purpose Streaming Multiprocessors instead of a fixed graphics pipeline.
CUDA stands for Compute Unified Device Architecture. The name covers several distinct things: a high-level device architecture, a parallel programming model for hardware with that design, and a software platform that extends languages like C with that programming model. This article covers the device architecture.
The vision for CUDA is set out in the Lindholm et al., 2008 white paper. It is well worth reading: it is the original source of many claims, diagrams and even turns of phrase in NVIDIA's documentation.
Key idea The defining feature of a compute unified device architecture is simplicity: one kind of uniform, general-purpose hardware unit instead of many specialized ones.
Before CUDA: fixed pipelines#
Before the GeForce 8800 and the Tesla data center GPUs that followed it, NVIDIA GPUs used a complex pipeline shader architecture. Software shader stages were mapped onto heterogeneous, specialized hardware units.
That design was hard on both sides. Software engineers had to map their programs onto a fixed pipeline, and hardware engineers had to guess the load ratios between pipeline steps.
The unified design#
In a unified architecture, the hardware units are entirely uniform, and each can perform a wide range of computations. These units are the Streaming Multiprocessors (SMs). Their main subcomponents are CUDA Cores and, on recent GPUs, Tensor Cores.
Further reading#
- Fabien Sanglard's blog post: an accessible introduction to the history and design of CUDA hardware, with high-quality cited sources such as NVIDIA's Fermi Compute Architecture white paper.
- Lindholm et al., 2008: the well-written, thorough paper introducing the Tesla architecture.
- NVIDIA's Tesla P100 white paper: less scholarly, but documents features critical for today's large neural network workloads, like NVLink and on-package high-bandwidth memory.
Related#
- Streaming Multiprocessor: the uniform unit at the heart of the design
- CUDA Programming Model: the software abstraction for this hardware
- CUDA Software Platform: the other meaning of "CUDA"