Skip to main content

RduChipFacts

Struct RduChipFacts 

Source
pub struct RduChipFacts {
Show 24 fields pub chip: RduChip, pub part: &'static str, pub peak_bf16_tflops: Fact<u32>, pub peak_fp8_tflops: Option<Fact<u32>>, pub silicon_peak_bf16_pflops: Fact<f64>, pub sram_mib: Fact<usize>, pub hbm_gib: Fact<usize>, pub ddr_gib_max: Fact<usize>, pub pmu_kib: Option<Fact<usize>>, pub hbm_bandwidth_gbps: Fact<f64>, pub ddr_bandwidth_gbps: Fact<f64>, pub p2p_tb_s: Fact<f64>, pub node_nm: Fact<u32>, pub dies: Fact<u32>, pub chips_per_node: Fact<usize>, pub scale_up: Option<Fact<ScaleUp>>, pub pcu_count: Fact<usize>, pub pmu_count: Fact<usize>, pub witnessed: &'static [Precision], pub witness_pending: &'static [Precision], pub index_datatype: Fact<Precision>, pub unit_model: RduUnitModel, pub cites: &'static [&'static str], pub others: &'static [OtherFigure],
}
Expand description

The facts of one RDU generation.

Fields§

§chip: RduChip§part: &'static str§peak_bf16_tflops: Fact<u32>

Peak dense BF16 throughput per RDU, TFLOPS.

§peak_fp8_tflops: Option<Fact<u32>>

Peak dense FP8 throughput per RDU, TFLOPS — None where the vendor publishes no FP8 figure.

§silicon_peak_bf16_pflops: Fact<f64>

The bf16 roofline the SiliconSpec publishes, in PFLOPS: per RDU on the SN50; on the SN40L the 16-socket node figure the descriptor has carried since its lock (16 × 640 TFLOPS).

§sram_mib: Fact<usize>

The capacities, each in the binary unit the vendor counts in (BINARY): SRAM in MiB, HBM and the largest DDR in GiB.

§hbm_gib: Fact<usize>§ddr_gib_max: Fact<usize>§pmu_kib: Option<Fact<usize>>

One PMU’s scratchpad, KiB — None where the vendor publishes no count of them.

§hbm_bandwidth_gbps: Fact<f64>

Peak HBM bandwidth per RDU, GB/s.

§ddr_bandwidth_gbps: Fact<f64>

Peak DDR bandwidth per RDU, GB/s.

§p2p_tb_s: Fact<f64>

Aggregate chip-to-chip bandwidth per RDU, TB/s.

§node_nm: Fact<u32>§dies: Fact<u32>§chips_per_node: Fact<usize>

RDUs per node — the tensor-parallel width a fit report shards across.

§scale_up: Option<Fact<ScaleUp>>

The scale-up fabric, where the vendor tabulates it.

§pcu_count: Fact<usize>§pmu_count: Fact<usize>§witnessed: &'static [Precision]

Precisions our fabric places AND witnesses — the only ones the descriptors advertise.

§witness_pending: &'static [Precision]

Chip-supported precisions no witness has shipped for — never advertised, named in the envelope.

§index_datatype: Fact<Precision>

The integer type the PCU computes indices and addresses in: the widest integer compute datatype the part has. Every index a lowering carries onto the chip — a gathered row, an arg-max, a block start — rides it, and the integer accumulator of the matrix path is this wide; nothing wider exists on the part.

§unit_model: RduUnitModel§cites: &'static [&'static str]

The bibliography keys (benchmarks/samba_papers.tsv) of the sources the facts cite: a published fact’s citation opens with its source’s key and the figure as that source states it.

§others: &'static [OtherFigure]

The figures sources state that the facts do not carry.

Implementations§

Source§

impl RduChipFacts

Source

pub fn of(chip: RduChip) -> RduChipFacts

Source

pub fn sn40l() -> RduChipFacts

The SN40L: 1040 PCUs and 1040 PMUs of 512 KB at TSMC 5 nm, 638 TFLOPS bf16 a socket, 16 sockets a node, a three-tier memory of 520 MiB on-chip SRAM, 64 GiB of HBM at 1.6 TB/s and up to 1.5 TiB of DDR at over 100 GB/s. The PCU’s compute datatypes are BF16 / FP32 / INT32 / INT8: INT8 + BF16 are witnessed on the matrix path, FP32 is chip-supported and witness-pending, and INT32 is the index datatype.

Source

pub fn sn50() -> RduChipFacts

The SN50: TSMC 5 nm, two max-reticle logic dies, 1600 TFLOPS BF16 / 3200 TFLOPS FP8, 432 MB on-chip SRAM, 64 GB HBM2E, DDR5 up to 512 GB (the datasheet: up to 2 TB), 8 chips per node and 16 per SambaRack, ten 800G ports a chip (seven make the node’s full mesh, two reach the inter-node fabric) carrying 2 TB/s, 400G RoCEv2 scale-out. The PCU/PMU counts are NOT public (“a sea of PCUs and PMUs”) — inherited from the SN40L and labeled modeled, and so are the HBM and DDR bandwidths. FP8 and FP32 are chip-supported and witness-pending.

Source

pub fn with_pcu_stages(self, stages: Fact<usize>) -> RduChipFacts

Source

pub fn with_pmu_banks(self, banks: Fact<usize>) -> RduChipFacts

Source

pub fn with_credit(self, credit: Fact<CreditLatency>) -> RduChipFacts

Source

pub fn with_pcu_count(self, count: Fact<usize>) -> RduChipFacts

Source

pub fn with_pmu_count(self, count: Fact<usize>) -> RduChipFacts

Source

pub fn with_hbm_gib(self, hbm: Fact<usize>) -> RduChipFacts

Source

pub fn hbm_gbps(&self) -> Fact<f64>

The co-packaged HBM’s bandwidth, GB/s.

Source

pub fn clock_ghz(&self) -> Fact<f64>

The clock the unit model counts cycles in, GHz. Not published for either part: Plasticine’s.

Source

pub fn roofs(&self) -> Roofs

The roofs: the modeled HBM bandwidth over the clock, and the published matrix peaks per RDU. The vendor publishes no INT8 or on-chip rate, so those resources carry no roof.

Source

pub fn sram_bytes(&self) -> usize

Source

pub fn local_mem_bytes_per_pcu(&self) -> usize

The on-chip SRAM spread over the PCUs — one site’s local-memory budget.

Source

pub fn mesh(&self) -> MeshShape

The modeled mesh: the PCU count laid out into mesh_columns columns; a count the aspect cannot tile is laid out as one row.

Source

pub fn target_modeled(&self) -> &'static [&'static str]

The modeled set of the derived SpatialTarget — a function of which counts are modeled: a modeled PCU count makes the mesh, the per-site memory and the silicon’s compute-tile figure modeled; a modeled PMU count makes the mem-tile figure modeled. The mesh aspect, the accumulator depth and the tile geometry are modeled on every RDU.

Source

pub fn modeled_fields(&self) -> Vec<String>

Every modeled fact, by dotted path, sorted — read by reflection over the serialized facts so the ledger cannot drift from the data.

Source

pub fn fabric_target(&self) -> FabricTarget

The scalar-fabric envelope of one PCU datapath: what place_with_target places onto, gated by the witnessed precisions and the three memory tiers; the silicon block carries the published tile counts (or the modeled ones, so labeled on the mesh descriptor).

Source

pub fn spatial_target(&self) -> SpatialTarget

The spatial mesh: one site per PCU, the SRAM spread over them, a crossbar switch fabric, token / valid-ready / barrier handshakes, and the embedded scalar datapath.

Trait Implementations§

Source§

impl Clone for RduChipFacts

Source§

fn clone(&self) -> RduChipFacts

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 RduChipFacts

Source§

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

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

impl PartialEq for RduChipFacts

Source§

fn eq(&self, other: &RduChipFacts) -> 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 RduChipFacts

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 RduChipFacts

Auto Trait Implementations§

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,