pub struct WpeDemands {
pub blocks: usize,
pub registers: usize,
pub cells: usize,
pub cells_per_block: usize,
pub writes: usize,
pub liveins: usize,
pub call_args: usize,
pub konsts: usize,
pub depth: usize,
pub heap_words: usize,
}Expand description
What the corpus actually demands — every field a MEASURED ceiling across the lowering benchmark
suite, never a guess. depth and heap_words are the two that cannot be read off a config and
must be obtained by RUNNING the program; they are also the two the hardware gets silently wrong
(the engine advances sp past DEPTH with no bound check), which is how a DEPTH=4 engine once
shipped against DEPTH=8 programs and answered fib with 8 instead of 21.
Fields§
§blocks: usize§registers: usize§cells: usize§cells_per_block: usize§writes: usize§liveins: usize§call_args: usize§konsts: usize§depth: usize§heap_words: usizeImplementations§
Source§impl WpeDemands
impl WpeDemands
Sourcepub fn of(cfg: &WProgConfig, args: &[&[i64]]) -> WpeDemands
pub fn of(cfg: &WProgConfig, args: &[&[i64]]) -> WpeDemands
What one program demands of an engine: every table the loader receives, read off the image it is sent
as, and the frame depth and heap words its runs over args reach — the two a config cannot tell, and
the two the engine traps on at run time rather than refusing at load.
Sourcepub fn loaded(cfg: &WProgConfig) -> WpeDemands
pub fn loaded(cfg: &WProgConfig) -> WpeDemands
The demands a host can read off a config without running it: every table the loader receives. Depth and heap words are zero — the engine traps those on die.
Sourcepub const fn solve(&self) -> WpeProfile
pub const fn solve(&self) -> WpeProfile
The smallest profile that covers every measured demand with stated headroom.
const so ASIC_PROFILE is derived rather than transcribed.
Sourcepub fn smallest_covering_profile(&self) -> WpeProfile
pub fn smallest_covering_profile(&self) -> WpeProfile
Non-const alias kept for callers that read better this way.
Trait Implementations§
Source§impl Clone for WpeDemands
impl Clone for WpeDemands
Source§fn clone(&self) -> WpeDemands
fn clone(&self) -> WpeDemands
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for WpeDemands
impl Debug for WpeDemands
Source§impl PartialEq for WpeDemands
impl PartialEq for WpeDemands
impl Copy for WpeDemands
impl Eq for WpeDemands
impl StructuralPartialEq for WpeDemands
Auto Trait Implementations§
impl Freeze for WpeDemands
impl RefUnwindSafe for WpeDemands
impl Send for WpeDemands
impl Sync for WpeDemands
impl Unpin for WpeDemands
impl UnsafeUnpin for WpeDemands
impl UnwindSafe for WpeDemands
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.