The hardware foundation of GPU training/inference is a three-axis trade-off: compute, memory bandwidth, and memory capacity. Take H100 SXM as the baseline: 80GB HBM3 at 3.35TB/s; 989 TFLOPS dense FP16/BF16 (1979 with sparsity), 1979 TFLOPS FP8; 50MB L2, 132 SMs (228KB shared-memory SRAM per SM). The memory hierarchy, fastest to slowest: registers (256KB per SM) → shared memory SRAM → L2 (50MB) → HBM (80GB) → host DRAM/NVMe; each level drops roughly an order of magnitude in bandwidth while gaining capacity.
Memory wall: a 70B model in FP16 is 140GB of weights; reading them once at 3.35TB/s takes
3.35TB/s140GB≈42ms, while one token of forward compute is roughly
2×70B=140GFLOP, needing only
≈0.14ms at 989 TFLOPS — a ~300:1 ratio. Since weights live in HBM and every use re-reads all of them, training/inference is locked to the bandwidth wall (bandwidth-bound). Arithmetic intensity
I=byteFLOP decides the regime: H100's balance point is
3.35TB/s989TFLOP/s≈295FLOP/byte; ops below it are bandwidth-bound (LayerNorm, activations, elementwise), above it compute-bound (large matmuls).