---
title: "ClikaRT::nn::PagedParams"
sidebar_label: "PagedParams"
description: "Shared block-pool geometry for the cache's paged rows. block_size must be a power of two in [16, 512] (a kernel addressing contract); num_blocks is the pool capacity; max_blocks_per_seq caps one seque…"
---

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

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

**Header:** `ClikaRT/nn/kv_cache.h`

Shared block-pool geometry for the cache's paged rows. [`block_size`](./PagedParams.md#block_size) must be a power of two in \[16, 512\] (a kernel addressing contract); [`num_blocks`](./PagedParams.md#num_blocks) is the pool capacity; [`max_blocks_per_seq`](./PagedParams.md#max_blocks_per_seq) caps one sequence's block-table row.

[`num_blocks`](./PagedParams.md#num_blocks) budgets the FULL-attention paged rows only. A WINDOWED paged row ([`KVLayerSpec::window`](./KVLayerSpec.md#window)` > 0`) provisions its own pool on top: `max_seqs × (⌈window/block_size⌉ + 1)` blocks per distinct window value, a small, deterministic footprint (it can never exhaust), logged at construction so the cache's memory is never under-reported.

## Data members

### block\_size {#block_size}

<div class="api-signature">

`int32_t` **`block_size`** `= 0`

</div>

tokens per block

<div class="api-declared">

Declared in `ClikaRT/nn/kv_cache.h`, line 168

</div>

### num\_blocks {#num_blocks}

<div class="api-signature">

`int64_t` **`num_blocks`** `= 0`

</div>

full rows' shared pool capacity in blocks

<div class="api-declared">

Declared in `ClikaRT/nn/kv_cache.h`, line 169

</div>

### max\_blocks\_per\_seq {#max_blocks_per_seq}

<div class="api-signature">

`int32_t` **`max_blocks_per_seq`** `= 0`

</div>

per-sequence block-table ceiling (full rows)

<div class="api-declared">

Declared in `ClikaRT/nn/kv_cache.h`, line 170

</div>
