pub struct EnginePlan {
pub clock_hz: Fact<f64>,
pub array_dsp_blocks: u32,
pub array_soft_macs: Fact<f64>,
pub scale_lanes: u32,
pub scale_lane_alms: Fact<f64>,
pub vector_dsp_blocks: u32,
pub beat: Beat,
pub state_chunk_lines: u64,
}Expand description
How the decode engine spends the device: the multiplier budget, the block-scale lanes, the memory beat and the clock it closes at.
Fields§
§clock_hz: Fact<f64>The array’s clock.
array_dsp_blocks: u32DSP blocks in the 4-bit array, ARRAY_MACS_PER_DSP multiply-adds each per cycle.
array_soft_macs: Fact<f64>Multiply-adds of a 4-bit weight code and an 8-bit activation code carried in logic beside the DSP blocks.
scale_lanes: u32Block-scale lanes, each one cycle a weight block at SCALE_LANE_DSPS DSP blocks and its logic.
scale_lane_alms: Fact<f64>Logic one lane takes: its sub-block multipliers, the exact two-term sum, its rounding.
vector_dsp_blocks: u32DSP blocks in f32 mode for the vector units, one multiply-add each per cycle.
beat: Beat§state_chunk_lines: u64Lines of a recurrent state a stream engine reads before it writes them back: the memory’s bus turns twice a chunk, and the engine holds a chunk read ahead and a chunk written behind.
Implementations§
Source§impl EnginePlan
impl EnginePlan
Sourcepub fn standard() -> EnginePlan
pub fn standard() -> EnginePlan
The plan the engine is built to: 768 DSP blocks of f32 vector units, 24,576 soft multiply-adds, as many
block-scale lanes as the array’s multiply-adds fill at LANE_MIX a lane cycle, the rest of the DSP blocks in
the array, 64 data bits of every beat, and a recurrent state rewritten 512 lines at a time — a value head’s
binary16 state of 128 by 128, at 64 bytes a line.
Sourcepub fn full_beat() -> EnginePlan
pub fn full_beat() -> EnginePlan
The standard plan reading and writing all 72 bits of every beat.
Sourcepub fn array_rate(&self) -> f64
pub fn array_rate(&self) -> f64
Multiply-adds per second the array retires.
Sourcepub fn scale_rate(&self) -> f64
pub fn scale_rate(&self) -> f64
Lane cycles per second the block-scale lanes retire.
Sourcepub fn dsp_blocks(&self) -> u32
pub fn dsp_blocks(&self) -> u32
DSP blocks the plan spends: the array’s, the lanes’, the vector units’.
Sourcepub fn alms(&self) -> f64
pub fn alms(&self) -> f64
ALMs the plan’s soft multiply-adds and lanes take, at the modeled 15 a soft multiply-add.
Sourcepub fn vector_rate(&self) -> f64
pub fn vector_rate(&self) -> f64
f32 multiply-adds per second the vector units retire.
Trait Implementations§
Source§impl Clone for EnginePlan
impl Clone for EnginePlan
Source§fn clone(&self) -> EnginePlan
fn clone(&self) -> EnginePlan
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for EnginePlan
impl Debug for EnginePlan
Source§impl PartialEq for EnginePlan
impl PartialEq for EnginePlan
Source§impl Serialize for EnginePlan
impl Serialize for EnginePlan
impl Copy for EnginePlan
impl StructuralPartialEq for EnginePlan
Auto Trait Implementations§
impl Freeze for EnginePlan
impl RefUnwindSafe for EnginePlan
impl Send for EnginePlan
impl Sync for EnginePlan
impl Unpin for EnginePlan
impl UnsafeUnpin for EnginePlan
impl UnwindSafe for EnginePlan
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.