pub enum Capability {
Alu(AluOp),
Func(FuncUnit),
Select,
Memory,
Simd(LaneTy),
Dataflow(Dataflow),
Precision(Precision),
MemTier(MemTier),
Fusion(usize),
Metapipeline(usize),
Banks(usize),
CounterNest(usize),
}Expand description
A capability a program cell requires from a target — the unit of the ADL’s typed refusal.
Variants§
Alu(AluOp)
A combinational ALU op (LoopCell::Arith).
Func(FuncUnit)
A sequential functional unit (LoopCell::Func — division / float / popcount / …).
Select
The predicated-select mux (LoopCell::Select) — every fabric carries it.
Memory
Any state-plane access (LoopCell::{MemRead,HeapRead,HeapWrite,HeapAlloc}) — needs a heap.
Simd(LaneTy)
A packed-SIMD tile (LoopCell::VectorArith) of a given lane type — needs a matching target.simd.
Dataflow(Dataflow)
The GEMM dataflow a lowering demands (Dataflow::Reduction is the universal baseline).
Precision(Precision)
A numeric MAC format a lowering demands.
MemTier(MemTier)
A memory tier a schedule demands (on-chip SRAM / HBM / DDR).
Fusion(usize)
A fusion window a lowering demands — the target must fuse at least this many ops into one stage.
Metapipeline(usize)
A metapipeline depth a lowering demands — the target sustains at least this many pipelined stages of compute between buffers (Plasticine: the PCU’s pipeline stages; a scalar array: 1).
Banks(usize)
A scratchpad banking factor a lowering demands — the target’s memory unit serves at least this many concurrent lane accesses per cycle (Plasticine PMU: 16 banks; a flat heap: 1).
CounterNest(usize)
A nested-counter depth a lowering demands — the loop-nest depth the target’s control can drive without a CPU (Plasticine: the PCU’s counter chain; at least 1 everywhere).
Trait Implementations§
Source§impl Clone for Capability
impl Clone for Capability
Source§fn clone(&self) -> Capability
fn clone(&self) -> Capability
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for Capability
impl Debug for Capability
Source§impl PartialEq for Capability
impl PartialEq for Capability
impl Copy for Capability
impl Eq for Capability
impl StructuralPartialEq for Capability
Auto Trait Implementations§
impl Freeze for Capability
impl RefUnwindSafe for Capability
impl Send for Capability
impl Sync for Capability
impl Unpin for Capability
impl UnsafeUnpin for Capability
impl UnwindSafe for Capability
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.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.