---
title: "ClikaRT::device::DeviceProperties"
sidebar_label: "DeviceProperties"
description: "A device's static capabilities. A plain value type; copy it freely."
---

<!-- Generated by tools/doxygen2mdx from Doxygen XML. Do not edit. -->

<span class="api-kind api-kind--struct">struct</span>

**Header:** `ClikaRT/compute/device_properties.h`

Static capabilities of a compute device: what a hand-written kernel needs to size its launch and pick a code path: SM/core count, compute capability, warp size, shared-memory budget, and which dtypes the hardware accelerates. Query it once (e.g. in a custom op's setup) and cache the result.

A device's static capabilities. A plain value type; copy it freely.

Field meanings are normalized across backends: [`sm_count`](./DeviceProperties.md#sm_count) is SMs on CUDA, compute units elsewhere; [`warp_size`](./DeviceProperties.md#warp_size) is the warp/wave/subgroup width (32 on NVIDIA); `compute_capability_*` is the CUDA SM version (8, 6 → SM 8.6) or the nearest equivalent generation tag on other backends. A field the backend does not report is left 0 / false / empty.

## Data members

### name {#name}

<div class="api-signature">

`std::string` **`name`**

</div>

Human-readable device name.

<div class="api-declared">

Declared in `ClikaRT/compute/device_properties.h`, line 41

</div>

### kind {#kind}

<div class="api-signature">

[`DeviceKind`](./index.md#DeviceKind) **`kind`** `=` [`DeviceKind::Unknown`](./index.md#DeviceKind)

</div>

Where the device sits relative to the host ([`DeviceKind`](./index.md#DeviceKind)): an integrated part shares the host's memory, a discrete one has its own, the CPU is the host itself. `Unknown` when the backend reports no kind.

<div class="api-declared">

Declared in `ClikaRT/compute/device_properties.h`, line 46

</div>

### driver\_version {#driver_version}

<div class="api-signature">

`std::string` **`driver_version`**

</div>

The installed driver's version as the backend reports it (CUDA: the driver's CUDA version, for example "13.3"; Vulkan: the vendor driver version). Empty when the device has no driver notion (the CPU).

<div class="api-declared">

Declared in `ClikaRT/compute/device_properties.h`, line 50

</div>

### backend\_runtime\_version {#backend_runtime_version}

<div class="api-signature">

`std::string` **`backend_runtime_version`**

</div>

The backend runtime this library loaded for the device (CUDA: the CUDA runtime version it carries, for example "12.6"; Vulkan: the Vulkan API version in use). Empty when not applicable.

<div class="api-declared">

Declared in `ClikaRT/compute/device_properties.h`, line 54

</div>

### sm\_count {#sm_count}

<div class="api-signature">

`std::int32_t` **`sm_count`** `= 0`

</div>

SMs (CUDA) / compute units.

<div class="api-declared">

Declared in `ClikaRT/compute/device_properties.h`, line 56

</div>

### compute\_capability\_major {#compute_capability_major}

<div class="api-signature">

`std::int32_t` **`compute_capability_major`** `= 0`

</div>

e.g. 8 for SM 8.6.

<div class="api-declared">

Declared in `ClikaRT/compute/device_properties.h`, line 57

</div>

### compute\_capability\_minor {#compute_capability_minor}

<div class="api-signature">

`std::int32_t` **`compute_capability_minor`** `= 0`

</div>

e.g. 6 for SM 8.6.

<div class="api-declared">

Declared in `ClikaRT/compute/device_properties.h`, line 58

</div>

### warp\_size {#warp_size}

<div class="api-signature">

`std::int32_t` **`warp_size`** `= 0`

</div>

Warp/wave/subgroup width.

<div class="api-declared">

Declared in `ClikaRT/compute/device_properties.h`, line 59

</div>

### max\_threads\_per\_block {#max_threads_per_block}

<div class="api-signature">

`std::int32_t` **`max_threads_per_block`** `= 0`

</div>

per-block/workgroup thread ceiling

<div class="api-declared">

Declared in `ClikaRT/compute/device_properties.h`, line 60

</div>

### shared\_memory\_per\_block\_bytes {#shared_memory_per_block_bytes}

<div class="api-signature">

`std::uint32_t` **`shared_memory_per_block_bytes`** `= 0`

</div>

Per-block shared memory.

<div class="api-declared">

Declared in `ClikaRT/compute/device_properties.h`, line 62

</div>

### total\_memory\_bytes {#total_memory_bytes}

<div class="api-signature">

`std::uint64_t` **`total_memory_bytes`** `= 0`

</div>

Total device memory.

<div class="api-declared">

Declared in `ClikaRT/compute/device_properties.h`, line 63

</div>

### is\_integrated {#is_integrated}

<div class="api-signature">

`bool` **`is_integrated`** `= false`

</div>

The device's memory IS the host's RAM (a Jetson-class part): no separate heap, so the host's figures describe it too.

<div class="api-declared">

Declared in `ClikaRT/compute/device_properties.h`, line 66

</div>

### has\_tensor\_cores {#has_tensor_cores}

<div class="api-signature">

`bool` **`has_tensor_cores`** `= false`

</div>

Matrix/tensor engine present (TC/XMX/…).

<div class="api-declared">

Declared in `ClikaRT/compute/device_properties.h`, line 68

</div>

### supports\_fp16 {#supports_fp16}

<div class="api-signature">

`bool` **`supports_fp16`** `= false`

</div>

native fp16 arithmetic

<div class="api-declared">

Declared in `ClikaRT/compute/device_properties.h`, line 69

</div>

### supports\_bf16 {#supports_bf16}

<div class="api-signature">

`bool` **`supports_bf16`** `= false`

</div>

native bf16 arithmetic

<div class="api-declared">

Declared in `ClikaRT/compute/device_properties.h`, line 70

</div>

### supports\_fp8\_e4m3 {#supports_fp8_e4m3}

<div class="api-signature">

`bool` **`supports_fp8_e4m3`** `= false`

</div>

native fp8 E4M3 arithmetic

<div class="api-declared">

Declared in `ClikaRT/compute/device_properties.h`, line 71

</div>

### prefix\_continuation\_bit\_exact {#prefix_continuation_bit_exact}

<div class="api-signature">

`bool` **`prefix_continuation_bit_exact`** `= false`

</div>

A prompt's last token yields the same logits, bit for bit, whether it is computed inside a multi-row prompt prefill or as a one-token step over a cache that already holds the rows before it. True where every kernel on that path runs one program regardless of the row count (the CPU); false where the kernel route keys on the shape (the GPU backends: a multi-row GEMM beside a one-row GEMV, a prefill attention tier beside a decode tier). A serving layer that must answer a repeated prompt byte-identically to its first answer reads this and, where it is false, computes the last prompt token as a one-token step in both shapes.

<div class="api-declared">

Declared in `ClikaRT/compute/device_properties.h`, line 83

</div>

### unavailable\_reason {#unavailable_reason}

<div class="api-signature">

`std::string` **`unavailable_reason`**

</div>

Why the device, though present, cannot run work under this build (for example a CUDA build whose kernels carry no code for the device's compute capability). Empty when the device serves; a request placed on a device carrying a reason fails with the same text.

<div class="api-declared">

Declared in `ClikaRT/compute/device_properties.h`, line 89

</div>
