---
myst:
html_meta:
description: Device and DeviceType in PyTorch C++ — c10::Device for specifying CPU, CUDA, XPU, and other backends.
keywords: PyTorch, C++, Device, DeviceType, CPU, CUDA, XPU, MPS, c10
---
# Device and DeviceType
PyTorch provides device abstractions for writing code that works across
CPU, CUDA, and other backends.
## Device
```{doxygenstruct} c10::Device
:members:
:undoc-members:
```
**Example:**
```cpp
c10::Device cpu_device(c10::kCPU);
c10::Device cuda_device(c10::kCUDA, 0); // CUDA device 0
if (cuda_device.is_cuda()) {
std::cout << "Using CUDA device " << cuda_device.index() << std::endl;
}
```
## DeviceType
```{cpp:enum-class} c10::DeviceType
Enumeration of supported device types.
```
```{cpp:enumerator} CPU = 0
CPU device.
```
```{cpp:enumerator} CUDA = 1
NVIDIA CUDA GPU.
```
```{cpp:enumerator} HIP = 6
AMD HIP GPU.
```
```{cpp:enumerator} XLA = 9
XLA / TPU.
```
```{cpp:enumerator} Vulkan = 10
Vulkan GPU.
```
```{cpp:enumerator} Metal = 11
Apple Metal GPU.
```
```{cpp:enumerator} XPU = 12
Intel XPU GPU.
```
```{cpp:enumerator} MPS = 13
Apple Metal Performance Shaders.
```
```{cpp:enumerator} Meta = 14
Meta tensors (shape only, no data).
```
```{cpp:enumerator} HPU = 15
Habana HPU.
```
```{cpp:enumerator} Lazy = 17
Lazy tensors.
```
```{cpp:enumerator} IPU = 18
Graphcore IPU.
```
```{cpp:enumerator} MTIA = 19
Meta training and inference accelerator.
```
```{cpp:enumerator} PrivateUse1 = 20
Custom backend registered via `c10::register_privateuse1_backend()`.
```
Convenience constants:
- `c10::kCPU`, `c10::kCUDA`, `c10::kHIP`
- `c10::kXLA`, `c10::kVulkan`, `c10::kMetal`
- `c10::kXPU`, `c10::kMPS`, `c10::kMeta`
- `c10::kHPU`, `c10::kLazy`, `c10::kIPU`, `c10::kMTIA`
- `c10::kPrivateUse1`