Skip to main content

SiteSpec

Struct SiteSpec 

Source
pub struct SiteSpec {
    pub local_mem_bytes: usize,
    pub local_mem_opt_in_bytes: Option<usize>,
    pub acc_tiles: usize,
    pub fp32_acc_halves_acc_tiles: bool,
    pub movement_engines: u8,
    pub nocs: u8,
    pub credit: Option<CreditLatency>,
    pub local_mem_read_latency: Option<u32>,
    pub mem_banks: usize,
    pub vector_lanes: usize,
    pub int_compute: Option<Precision>,
    pub multiplier: Option<(u32, u32)>,
}
Expand description

What one site holds.

Fields§

§local_mem_bytes: usize

Local memory budget for buffers (L1 / shared memory / BRAM), in bytes.

§local_mem_opt_in_bytes: Option<usize>

A larger budget available on explicit opt-in (a GPU’s dynamic shared memory), if any.

§acc_tiles: usize

Accumulator capacity in native tiles (DST register file / register fragments / systolic columns).

§fp32_acc_halves_acc_tiles: bool

Accumulating in fp32 halves the accumulator capacity (Tensix DST).

§movement_engines: u8

Independent data-movement engines per site (Tensix: RISCV_0 + RISCV_1).

§nocs: u8

Network-on-chip channels a site can drive.

§credit: Option<CreditLatency>

Declared credit-loop latencies, when the part’s are known. None means undeclared, NOT zero.

§local_mem_read_latency: Option<u32>

Cycles from a read address to its data in the site’s local memory, where the lowering schedules each read itself: Some(0) for a flop array read combinationally, Some(1) for a synchronous SRAM or block RAM. None where the hardware sequences its memory reads and the lowering never sees their timing.

§mem_banks: usize

The banks the site’s local memory interleaves its elements over, element e in bank e mod banks: a power of two, the consecutive elements one cycle reads or writes wherever the run starts. 1 where a memory serves an element a cycle, or the hardware sequences its own accesses.

§vector_lanes: usize

The lanes of the site’s vector unit: the widest run of consecutive coordinates its Generic unit takes a point, a power of two no wider than the banks, sized to the part as its PE array is — each lane is a copy of every body the unit computes. 1 where the site has no vector unit.

§int_compute: Option<Precision>

The one integer width the site’s elementwise datapath computes in, where an integer it stores is the integer it computes and nothing narrower widens on its way in: an RDU’s PCU computes integers in its index datatype (RduChipFacts::index_datatype, INT32). None where a narrower stored integer widens as it is read — a GPU’s registers, the fabric’s sign extension — so a buffer may be stored at any integer the datapath lists.

§multiplier: Option<(u32, u32)>

The widest signed product one multiplier slice of the site takes, (wide, narrow) operand bits: a 7-series DSP48E1’s 25 × 18. Synthesis splits a wider product over a cascade of slices. None where the site’s multiplies are no fixed slices — standard cells, a GPU’s units.

Trait Implementations§

Source§

impl Clone for SiteSpec

Source§

fn clone(&self) -> SiteSpec

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 SiteSpec

Source§

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

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

impl<'de> Deserialize<'de> for SiteSpec

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for SiteSpec

Source§

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

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 Copy for SiteSpec

Source§

impl Eq for SiteSpec

Source§

impl StructuralPartialEq for SiteSpec

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.
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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,

Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

§

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