--- myst: html_meta: description: ATen C++ API — the foundational tensor library powering PyTorch, including tensor operations, types, and CUDA support. keywords: PyTorch, C++, ATen, tensor, operations, CUDA --- # ATen: Tensor Library ATen (A Tensor Library) is the foundational tensor and mathematical operation library on which all of PyTorch is built. It provides the core `Tensor` class and hundreds of mathematical operations that work on tensors. **When to use ATen directly:** - When writing low-level tensor operations or custom kernels - When you need direct access to tensor data and metadata - When working with the PyTorch internals or extending PyTorch **Basic usage:** ```cpp #include // Create tensors at::Tensor a = at::ones({2, 3}); at::Tensor b = at::randn({2, 3}); // Perform operations at::Tensor c = a + b; at::Tensor d = at::matmul(a.t(), b); // Move to GPU if (at::cuda::is_available()) { at::Tensor gpu_tensor = c.to(at::kCUDA); } ``` For most applications, prefer using the higher-level `torch::` namespace (see {doc}`../nn/index`, {doc}`../optim/index`) which provides a more user-friendly API. ## Header Files The following headers are part of the ATen public API: - `ATen/ATen.h` - Main ATen header - `ATen/Backend.h` - Backend enumeration - `ATen/core/Tensor.h` - Tensor class - `ATen/core/ivalue.h` - IValue type (see {doc}`../c10/index`) - `ATen/core/ScalarType.h` - Data type definitions - `ATen/TensorOptions.h` - Tensor creation options - `ATen/Scalar.h` - Scalar type - `ATen/Layout.h` - Tensor layout - `ATen/DeviceGuard.h` - Device context management - `ATen/native/TensorShape.h` - Tensor shape operations - `ATen/cuda/CUDAContext.h` - CUDA context (see {doc}`../cuda/index`) - `ATen/cudnn/Descriptors.h` - cuDNN descriptors - `ATen/mkl/Descriptors.h` - MKL descriptors ```{note} The core `at::Tensor` class is defined in a generated header file (`TensorBody.h`) that only exists after building PyTorch. The documentation below describes the API manually. ``` ## ATen Categories ```{toctree} :maxdepth: 1 tensor creation indexing accessors ```