pub struct FullyPreparedCompressedIndex {
pub layer_idx: usize,
pub head_idx: usize,
pub head_dim: usize,
pub num_tokens: usize,
pub num_heads: usize,
pub key_indices_flat: Vec<u32>,
pub key_norms: Vec<f32>,
pub block_count: usize,
pub value_codes: Vec<FibCodeV1>,
pub scorer: FibScorer,
}Expand description
Fully prepared compressed index: pre-unpacks all indices and norms so the scoring loop is just Gram table lookups with no per-call unpacking.
This is the tightest possible hot path for compressed attention scoring.
Fields§
§layer_idx: usizeLayer index this index was built for.
head_idx: usizeHead index this index was built for.
head_dim: usizeHead dimension.
num_tokens: usizeNumber of tokens in the pool.
num_heads: usizeNumber of KV heads.
key_indices_flat: Vec<u32>Pre-unpacked key indices: flat num_entries * block_count u32 buffer,
row-major by code_idx = token_idx * num_heads + head_idx.
Use key_block(code_idx) to get the slice for one entry.
key_norms: Vec<f32>Pre-decoded key norms as f32: one per (token, head) entry.
block_count: usizeNumber of blocks per vector (= head_dim / k where k is the block dim).
value_codes: Vec<FibCodeV1>Pre-unpacked value codes (for decode of selected top-k).
scorer: FibScorerBuilt FibScorer (for query preparation and Gram table access).
Implementations§
Source§impl FullyPreparedCompressedIndex
impl FullyPreparedCompressedIndex
Sourcepub fn key_block(&self, code_idx: usize) -> &[u32]
pub fn key_block(&self, code_idx: usize) -> &[u32]
Get the key indices for one (token, head) entry as a slice.
Sourcepub fn prepare_gram_rows(&self, query: &[f32]) -> Result<PrefetchedGramRows>
pub fn prepare_gram_rows(&self, query: &[f32]) -> Result<PrefetchedGramRows>
Prepare a query and pre-fetch the relevant Gram rows.
This copies block_count rows from the Gram table into a contiguous
buffer, so the per-token scoring loop becomes sequential gathers
from a 2KB working set instead of scattered accesses across 4KB+.
Sourcepub fn score_all_tokens(
&self,
prefetched: &PrefetchedGramRows,
) -> Result<Vec<(usize, f32)>>
pub fn score_all_tokens( &self, prefetched: &PrefetchedGramRows, ) -> Result<Vec<(usize, f32)>>
Score all tokens against pre-fetched Gram rows.
The hot loop is:
for block in 0..block_count:
total += gram_rows[block * N + stored_idx]This is sequential access into a small contiguous buffer — auto-vectorizable and cache-friendly.
Auto Trait Implementations§
impl Freeze for FullyPreparedCompressedIndex
impl RefUnwindSafe for FullyPreparedCompressedIndex
impl Send for FullyPreparedCompressedIndex
impl Sync for FullyPreparedCompressedIndex
impl Unpin for FullyPreparedCompressedIndex
impl UnsafeUnpin for FullyPreparedCompressedIndex
impl UnwindSafe for FullyPreparedCompressedIndex
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.