Skip to main content
The NVIDIA Ampere architecture (compute capability 8.0 and 8.6) introduced significant improvements to Tensor Core operations, including TF32, enhanced BF16 support, and asynchronous memory copy.

Supported GPUs

Ampere was the first architecture to support TensorFloat-32 (TF32), enabling FP32 acceleration through Tensor Cores without code changes.

Key Features

1. TensorFloat-32 (TF32)

TF32 is a 19-bit floating point format that provides the range of FP32 with the performance of FP16 Tensor Cores.
Benefits:
  • 8x throughput vs FP32 on CUDA cores
  • No explicit conversion required
  • Maintains FP32 dynamic range

2. BFloat16 (BF16) Support

BF16 provides better numeric stability than FP16 for many workloads:

3. FP64 Tensor Cores

Ampere introduced the first FP64 Tensor Core operations:
Shape: 8x8x4
  • 8 rows × 8 columns output
  • 4 elements in K dimension
  • 2x throughput vs FP64 CUDA cores

4. Asynchronous Copy (cp.async)

Ampere introduced cp.async for overlapping memory copies with computation:
Usage Pattern:
Always pair cp_async_fence() with cp_async_wait<N>() to ensure proper synchronization.

5. Integer and Sub-byte Precision

INT8 Operations

INT4 Operations

Binary (1-bit) Operations

Binary operations support both AND and XOR modes, useful for neural network quantization and specialized applications.

Instruction Shapes

Multistage Pipeline

Ampere uses cp.async to build efficient multistage pipelines:

Code Example

Here’s a complete Ampere TF32 GEMM example:

Compilation

Compile for Ampere architecture:

Performance Tuning

Optimal Tile Sizes

For Ampere, recommended threadblock shapes:
  • TF32/BF16: 128x128x32, 256x128x32
  • FP16: 128x256x32, 256x128x64
  • INT8: 128x256x64, 256x128x64
  • FP64: 64x64x16, 128x64x16

Pipeline Stages

  • Small kernels: 2-3 stages
  • Large kernels: 4-5 stages
  • Balance between latency hiding and shared memory usage

Shared Memory Configuration

Examples

CUTLASS provides numerous Ampere examples:
  • examples/14_ampere_tf32_tensorop_gemm/ - TF32 GEMM
  • examples/15_ampere_sparse_tensorop_gemm/ - Sparse Tensor Core operations
  • examples/18_ampere_fp64_tensorop_affine2_gemm/ - FP64 Tensor Cores
  • examples/27_ampere_3xtf32_fast_accurate_tensorop_gemm/ - 3xTF32 for accuracy

See Also