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
impl Roofs
Sourcepub fn mem(&self, level: MemLevel, mix: StreamMix) -> Option<&MemRoof>
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.
Sourcepub fn compute(
&self,
engine: Engine,
precision: Precision,
) -> Option<&ComputeRoof>
pub fn compute( &self, engine: Engine, precision: Precision, ) -> Option<&ComputeRoof>
The throughput of engine at precision.
Sourcepub fn per_second(&self, rate: &Fact<Rate>) -> Converted
pub fn per_second(&self, rate: &Fact<Rate>) -> Converted
rate per second at this chip’s clock.
Source§impl Roofs
impl Roofs
Sourcepub fn rtx3060() -> Roofs
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.
Sourcepub fn h100_sxm() -> Roofs
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.
Sourcepub fn h100_nvl() -> Roofs
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.
Sourcepub fn a100_sxm4_80gb() -> Roofs
pub fn a100_sxm4_80gb() -> Roofs
NVIDIA A100 80GB SXM. Its product table states the dense rate first and the sparse rate after it.
Sourcepub fn b200() -> Roofs
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.
Sourcepub fn catalog() -> Vec<(&'static str, Roofs)>
pub fn catalog() -> Vec<(&'static str, Roofs)>
Every roofs preset, by name: the chips a decode is priced on and the spatial targets’ own.
Sourcepub fn sky_fabric() -> Roofs
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.
Sourcepub fn xc7_fabric() -> Roofs
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§
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> 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.