Skip to main content

TensorEvent

Enum TensorEvent 

Source
#[non_exhaustive]
#[repr(u8)]
pub enum TensorEvent { Load0 = 0, Load1 = 1, LoadL2_0 = 2, LoadL2_1 = 3, Prefetch0 = 4, Prefetch1 = 5, CacheOp = 6, Fma = 7, Store = 8, TensorReduce = 9, TensorQuant = 10, }
Expand description

Tensor co-processor synchronisation events for tensor_wait.

The four-bit EVENT field in the TensorWait xs register selects which outstanding operation the hart waits for before the instruction retires. (PRM Table 9-2.)

This enum is #[non_exhaustive]: match arms outside this crate must include a wildcard arm.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Load0 = 0

Completion of all TensorLoad operations issued with ID = 0 (event 0).

§

Load1 = 1

Completion of all TensorLoad operations issued with ID = 1 (event 1).

§

LoadL2_0 = 2

Completion of a TensorLoadL2Scp issued with ID = 0 (event 2). Use this after tensor_load_l2 with id = false. Not the same as CacheOp (event 6).

§

LoadL2_1 = 3

Completion of a TensorLoadL2Scp issued with ID = 1 (event 3). Use this after tensor_load_l2 with id = true.

§

Prefetch0 = 4

Completion of L2/L3 prefetch operations with ID = 0 (event 4).

§

Prefetch1 = 5

Completion of L2/L3 prefetch operations with ID = 1 (event 5).

§

CacheOp = 6

Completion of all preceding L1 cache management operations: EvictVA and FlushVA (event 6). Required after [cache::cache_writeback], [cache::cache_invalidate], or [cache::cache_flush] before issuing memory accesses to the affected cache lines.

Note: TensorLoadL2Scp requires LoadL2_0/LoadL2_1 (events 2/3), not this event. L2/L3 prefetch requires Prefetch0/Prefetch1 (events 4/5). The cache op functions already issue this wait internally; use this variant directly only when batching cache ops and deferring the wait.

§

Fma = 7

Completion of all preceding TensorFMA operations (event 7). The FP register file holds the final accumulated C tile and may be read or stored.

§

Store = 8

Completion of all preceding TensorStore DMA transfers (event 8). Drains only the tensor store DMA; prefer this over a full fence rw, rw when only tensor-store ordering is required.

§

TensorReduce = 9

Completion of all preceding TensorSend/TensorRecv operations (event 9). Required after tensor_recv before reading the FP registers updated by the receive.

§

TensorQuant = 10

Completion of all preceding TensorQuant operations (event 10).

Trait Implementations§

Source§

impl Clone for TensorEvent

Source§

fn clone(&self) -> TensorEvent

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Copy for TensorEvent

Source§

impl Debug for TensorEvent

Source§

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

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

impl Eq for TensorEvent

Source§

impl PartialEq for TensorEvent

Source§

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

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

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

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for TensorEvent

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
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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.