Skip to main content

StoreLayout

Struct StoreLayout 

Source
pub struct StoreLayout {
    pub rows: usize,
    pub slots: Vec<(u32, u32)>,
    pub beats: u32,
    pub greedy: bool,
}
Expand description

The token-row store as the engine holds it: beats of LANES f32 elements, slot s’s row r from beat base + r·beats of its entry, every slot wide enough for the widest vector the step’s jobs write to it, and two slots over the same beats only when no point of the step holds both. A greedy store (StoreLayout::greedy) keeps each row’s logits as their arg-max.

Fields§

§rows: usize§slots: Vec<(u32, u32)>

Per slot code: the slot’s first beat and its beats a row.

§beats: u32§greedy: bool

Whether the logits slot holds each row’s arg-max in place of its logits.

Implementations§

Source§

impl StoreLayout

Source

pub fn of(jobs: &[Job], layout: &Layout, rows: usize) -> StoreLayout

The store jobs write over rows rows, each slot’s width the widest any job writes to it, each slot at the lowest beat no slot live beside it holds (StoreLayout::live_together), the widest first — or, where that leaves a row longer than the most beats a point of the step holds together (StoreLayout::widest), in the first order of a fixed sequence of them that lays the row that short, the shortest of them all if none does.

Source

pub fn greedy(jobs: &[Job], layout: &Layout, rows: usize) -> StoreLayout

StoreLayout::of with the head’s read-out never in the store: the logits slot is a beat a row, its first lane the index numerics::argmax picks of the row’s logits and its second that logit’s bits, so the store holds what a greedy step reads back however wide the vocabulary.

Source

pub fn widest(&self, jobs: &[Job]) -> u32

The most beats a row of the store holds at any point of the step jobs, the store laid for: the widest set of its slots a job reads, writes or holds live across it (StoreLayout::live_together) — no layout’s row is shorter.

Source

pub fn live_together(jobs: &[Job]) -> Vec<u32>

For each slot code, the slots some point of the step jobs holds beside it, as a mask of slot codes: those a job reads or writes, and those live across it (StoreLayout::live_out).

Source

pub fn live_out(jobs: &[Job]) -> Vec<u32>

For each job of the step jobs, the slots live out of it, as a mask of slot codes. A slot is live from a job that makes it afresh to the last job that reads it before it is made again, the step taken round (the next step follows it, and the host reads the logits after its last job); a job that writes a slot in part leaves it live.

Source

pub fn beat(&self, slot: Slot, row: usize) -> u32

Where slot slot’s row row starts.

Source

pub fn image(&self, store: &Store) -> Vec<[u32; 16]>

The store’s beats, each element its f32 bits, an element no vector holds zero; a greedy store’s logits slot each row’s arg-max and that logit.

Trait Implementations§

Source§

impl Clone for StoreLayout

Source§

fn clone(&self) -> StoreLayout

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for StoreLayout

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for StoreLayout

Source§

fn eq(&self, other: &StoreLayout) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for StoreLayout

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,