Skip to main content

Roofs

Struct Roofs 

Source
pub struct Roofs {
    pub clock_ghz: Fact<f64>,
    pub mem: Vec<MemRoof>,
    pub compute: Vec<ComputeRoof>,
    pub sources: &'static [&'static str],
}
Expand description

A chip’s roofs.

Fields§

§clock_ghz: Fact<f64>

The clock the per-cycle rates run at, in GHz.

§mem: Vec<MemRoof>§compute: Vec<ComputeRoof>§sources: &'static [&'static str]

The documents every published or derived roof is read from; each such cite names one of them.

Implementations§

Source§

impl Roofs

Source

pub fn mem(&self, level: MemLevel, mix: StreamMix) -> Option<&MemRoof>

The bandwidth of level for mix: a roof measured for that very mix when there is one, else the peak that bounds every mix.

Source

pub fn compute( &self, engine: Engine, precision: Precision, ) -> Option<&ComputeRoof>

The throughput of engine at precision.

Source

pub fn per_cycle(&self, rate: &Fact<Rate>) -> Converted

rate per cycle of this chip’s clock.

Source

pub fn per_second(&self, rate: &Fact<Rate>) -> Converted

rate per second at this chip’s clock.

Source

pub fn facts(&self) -> Vec<(String, Provenance, &'static str)>

Every fact the roofs carry, the clock first, each with the path a lock names it by.

Source§

impl Roofs

Source

pub fn wormhole() -> Roofs

Tenstorrent Wormhole n150.

Source

pub fn blackhole() -> Roofs

Tenstorrent Blackhole p150.

Source

pub fn rtx3060() -> Roofs

The local RTX 3060. NVIDIA’s table gives the SM count (through the CUDA cores) and the boost clock but no tensor rate and no memory data rate, so the tensor rates are derived from the GA10x SM the Ampere whitepaper tabulates, and the DRAM rate is modeled until the box measures it.

Source

pub fn h100_sxm() -> Roofs

NVIDIA H100 SXM. The product table gives memory bandwidth and tensor rates “With sparsity”; a dense rate is half of it, which is what a dense matrix-vector product can use. The table gives no clock, and every rate here is per second, so nothing is converted through the one recorded.

Source

pub fn h100_nvl() -> Roofs

NVIDIA H100 NVL: the PCIe card the Qwen3.8-27B decode runs were measured on. Its product brief gives the clock and the exact memory bandwidth; the tensor rates are the product table’s, halved from sparse.

Source

pub fn a100_sxm4_80gb() -> Roofs

NVIDIA A100 80GB SXM. Its product table states the dense rate first and the sparse rate after it.

Source

pub fn b200() -> Roofs

One GPU of the NVIDIA DGX/HGX B200. NVIDIA tabulates the 8-GPU system, so each rate is the system’s over eight, and each tensor rate the sparse figure halved per the table’s own footnote.

Source

pub fn catalog() -> Vec<(&'static str, Roofs)>

Every roofs preset, by name: the chips a decode is priced on and the spatial targets’ own.

Source

pub fn sky_fabric() -> Roofs

Our own fabric. Its matrix engine is not a fixed part: each program instantiates a k x n systolic array sized by its plan’s block, and the cycle twin times that array exactly, so the fabric carries no matrix roof. What every program on it shares is the address lane, which carries one element per cycle whatever its width. The clock is the largest signed-off array’s.

Source

pub fn xc7_fabric() -> Roofs

The fabric on a 7-series FPGA: the same element-serial lanes as sky_fabric, clocked from the board.

Trait Implementations§

Source§

impl Clone for Roofs

Source§

fn clone(&self) -> Roofs

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Roofs

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Roofs

Source§

fn eq(&self, other: &Roofs) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for Roofs

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for Roofs

Auto Trait Implementations§

§

impl Freeze for Roofs

§

impl RefUnwindSafe for Roofs

§

impl Send for Roofs

§

impl Sync for Roofs

§

impl Unpin for Roofs

§

impl UnsafeUnpin for Roofs

§

impl UnwindSafe for Roofs

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &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
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,