pub struct DaeSchedule {
pub n_in: usize,
pub layout: Vec<LoopCell>,
pub result: Src,
pub agu_len: usize,
pub is_agu: Vec<bool>,
}Expand description
A decoupled schedule: the SAME cells re-laid-out as [agu lane .. | exec lane ..] (AGU cells first), with
every Src::Val remapped to the new positions. agu_len cells form the address-generation lane; the rest
are the exec lane (compute + memory tiles, memory ops preserving program order).
Fields§
§n_in: usize§layout: Vec<LoopCell>§result: Src§agu_len: usizeThe number of leading layout cells that form the AGU lane (0 ⇒ nothing decoupled).
is_agu: Vec<bool>For each layout cell, whether it belongs to the AGU lane (true) or the exec lane (false).
Implementations§
Source§impl DaeSchedule
impl DaeSchedule
Sourcepub fn agu_is_pure(&self) -> bool
pub fn agu_is_pure(&self) -> bool
Every AGU-lane cell must be a PURE address computation — never a heap tile. The structural heart of the decoupling: the address lane has no side effects, so hoisting it cannot reorder memory.
Sourcepub fn exec_lane_depth(&self) -> usize
pub fn exec_lane_depth(&self) -> usize
The exec lane’s critical-path depth, treating every AGU-lane output as depth 0 (supplied by the parallel lane through the decoupling queue). This is the compute path the clock actually sees.
Sourcepub fn agu_lane_depth(&self) -> usize
pub fn agu_lane_depth(&self) -> usize
The AGU lane’s own critical-path depth (runs concurrently with the exec lane).
Sourcepub fn decoupled_critical_depth(&self) -> usize
pub fn decoupled_critical_depth(&self) -> usize
The throughput-limiting depth of the decoupled schedule: the two lanes run concurrently, so the clock sees the DEEPER of them — not their sum.
Trait Implementations§
Source§impl Clone for DaeSchedule
impl Clone for DaeSchedule
Source§fn clone(&self) -> DaeSchedule
fn clone(&self) -> DaeSchedule
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 DaeSchedule
impl RefUnwindSafe for DaeSchedule
impl Send for DaeSchedule
impl Sync for DaeSchedule
impl Unpin for DaeSchedule
impl UnsafeUnpin for DaeSchedule
impl UnwindSafe for DaeSchedule
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.