Skip to main content

TensorGraph

Struct TensorGraph 

Source
pub struct TensorGraph {
    pub identity: Option<Identity>,
    pub io: Option<StepIo>,
    pub tensors: BTreeMap<String, Tensor>,
    pub ops: Vec<Op>,
}
Expand description

A cut of a model’s one program as a graph.

Fields§

§identity: Option<Identity>

The cut it was lifted from.

§io: Option<StepIo>

The names it reads and writes across steps.

§tensors: BTreeMap<String, Tensor>§ops: Vec<Op>

The ops in program order, the schedule order every backend starts from.

Implementations§

Source§

impl TensorGraph

Source

pub fn lift( rp: &RecognizedProgram, identity: Option<Identity>, io: Option<StepIo>, storage: &dyn Fn(&str) -> Storage, ) -> Result<TensorGraph, GraphError>

The graph of a walked program: storage says where each constant’s values live (the IR reads no checkpoint), and identity and io are the cut it was lifted from and the names it carries across steps.

Source

pub fn placed( &self, storage: &dyn Fn(&str) -> Storage, io: Option<StepIo>, ) -> TensorGraph

The graph with each constant’s values where storage says and io the names it carries across steps, which its host reads: a graph lifted before its constants were placed, placed as TensorGraph::lift places them.

Source

pub fn lift_stages( rp: &RecognizedProgram, identity: Option<Identity>, io: Option<StepIo>, storage: &dyn Fn(&str) -> Storage, ) -> TensorGraph

The graph of the statements the front end lifted, whatever else the program holds: a backend that reports the statements it could not lift on its own lowers the rest. A tensor a statement the front end passed over computes is an activation of the shape the program gives it.

Source

pub fn lift_source( source: &str, storage: &dyn Fn(&str) -> Storage, ) -> Result<Lifted, SpatialReject>

The front end’s walk of source and the graph of what it lifts (TensorGraph::lift_stages): the one way a backend reaches the ops of a source.

Source

pub fn of_cut( spec: &ModelSpec, cut: Cut, io: Option<StepIo>, storage: &dyn Fn(&str) -> Storage, ) -> Result<TensorGraph, GraphError>

The graph of the cut cut of spec’s program, recording the cut’s identity: io the names it carries across steps, storage where each constant’s values live.

Source

pub fn of_op( op: TensorOpSpec, ins: Vec<(Symbol, usize, Fill)>, out: Symbol, interner: &Interner, ) -> TensorGraph

The graph of one op over operands the source declares, each (symbol, length, fill), and its result out: a statement a backend recognizes on its own, outside any walk of a program. Every symbol the op’s spec names is one of its operands or its result.

Source

pub fn shape_of(&self, tensor: &str, n: usize) -> (usize, usize)

The (rows, cols) the program gives tensor, where that accounts for the n elements an op counts — the 1 × n row otherwise.

Source

pub fn touches(&self) -> Touches<'_>

Which ops touch each tensor — read it, write it, or name the rows it lands in — taken once, for questions asked of many tensors.

Source

pub fn of_role(&self, role: Role) -> impl Iterator<Item = &Tensor>

The tensors of one role, by name.

Source

pub fn readers(&self, tensor: &str) -> Vec<usize>

The ops that read tensor, by index.

Source

pub fn producer(&self, tensor: &str) -> Option<usize>

The op that computes tensor into its own buffer.

Source

pub fn writes_in_place(&self) -> BTreeSet<String>

Every tensor an op writes in place, however deep in a fused op it is written: what it updates as state, and every table or wider tensor a destination lands rows or units in.

Source

pub fn caches(&self) -> BTreeSet<String>

The attention caches: every state tensor an attention reads its keys or values from, itself or through the head slices cut from it (a latent cache’s values are its rows’ first part).

Trait Implementations§

Source§

impl Clone for TensorGraph

Source§

fn clone(&self) -> TensorGraph

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 TensorGraph

Source§

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

Formats the value using the given formatter. Read more

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,