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
impl TensorGraph
Sourcepub fn lift(
rp: &RecognizedProgram,
identity: Option<Identity>,
io: Option<StepIo>,
storage: &dyn Fn(&str) -> Storage,
) -> Result<TensorGraph, GraphError>
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.
Sourcepub fn placed(
&self,
storage: &dyn Fn(&str) -> Storage,
io: Option<StepIo>,
) -> TensorGraph
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.
Sourcepub fn lift_stages(
rp: &RecognizedProgram,
identity: Option<Identity>,
io: Option<StepIo>,
storage: &dyn Fn(&str) -> Storage,
) -> TensorGraph
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.
Sourcepub fn lift_source(
source: &str,
storage: &dyn Fn(&str) -> Storage,
) -> Result<Lifted, SpatialReject>
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.
Sourcepub fn of_cut(
spec: &ModelSpec,
cut: Cut,
io: Option<StepIo>,
storage: &dyn Fn(&str) -> Storage,
) -> Result<TensorGraph, GraphError>
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.
Sourcepub fn of_op(
op: TensorOpSpec,
ins: Vec<(Symbol, usize, Fill)>,
out: Symbol,
interner: &Interner,
) -> TensorGraph
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.
Sourcepub fn shape_of(&self, tensor: &str, n: usize) -> (usize, usize)
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.
Sourcepub fn touches(&self) -> Touches<'_>
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.
Sourcepub fn of_role(&self, role: Role) -> impl Iterator<Item = &Tensor>
pub fn of_role(&self, role: Role) -> impl Iterator<Item = &Tensor>
The tensors of one role, by name.
Sourcepub fn producer(&self, tensor: &str) -> Option<usize>
pub fn producer(&self, tensor: &str) -> Option<usize>
The op that computes tensor into its own buffer.
Sourcepub fn writes_in_place(&self) -> BTreeSet<String>
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.
Trait Implementations§
Source§impl Clone for TensorGraph
impl Clone for TensorGraph
Source§fn clone(&self) -> TensorGraph
fn clone(&self) -> TensorGraph
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for TensorGraph
impl RefUnwindSafe for TensorGraph
impl Send for TensorGraph
impl Sync for TensorGraph
impl Unpin for TensorGraph
impl UnsafeUnpin for TensorGraph
impl UnwindSafe for TensorGraph
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.