pub enum SassClass {
Alu,
Fp,
Fp64,
Mufu,
Tensor,
Memory,
AsyncCopy,
Store,
Control,
Uniform,
Other,
}Expand description
Execution-unit class of a SASS opcode — what a scheduler must know to place it and set control codes.
Variants§
Alu
Fixed-latency integer/logic ALU (IMAD, IADD3, LEA, SHF, LOP3, ISETP, SEL, MOV, PRMT, …).
Fp
Fixed-latency FP32 (FADD, FFMA, FMUL, FSETP, …) and FP16x2 (HADD2, HFMA2, …).
Fp64
Fixed-latency FP64 (DADD, DFMA, DMUL, …) — longer than FP32.
Mufu
Multi-function unit (MUFU: rcp/sqrt/sin) — long fixed latency.
Tensor
Tensor core matrix-multiply-accumulate (IMMA/HMMA) — fixed throughput (~8 cyc/int8 IMMA).
Memory
Variable-latency memory that SETS A WRITE BARRIER (LDG/LDS/LDSM/LDL/LD/ATOMG/CS2R/S2R/…).
AsyncCopy
Asynchronous copy global->shared (LDGSTS = cp.async) — completion tracked by the pipeline, not a barrier.
Store
Store (STG/STS/STL/ST) — no result register.
Control
Control-flow / barriers / sync (BRA/BSSY/BSYNC/BAR/WARPSYNC/EXIT/CALL/RET/YIELD/MEMBAR/…).
Uniform
Uniform-datapath (scalar per-warp) ops (ULDC/UIADD3/UMOV/USHF/…).
Other
Anything not yet classified.
Implementations§
Source§impl SassClass
impl SassClass
Sourcepub fn fixed_latency(&self) -> u8
pub fn fixed_latency(&self) -> u8
Fixed issue-to-RESULT latency in cycles — the delay before a dependent consumer may read the result. CALIBRATED by microbenchmark on this sm_86 GPU (clock64 dependent chains), NOT guessed: ALU/FP ~4.2-4.5 (round to 5), int8 IMMA = 24 (MEASURED — a guessed 8 under-stalls the cross-iteration accumulate and hangs). Variable-latency classes (Memory/AsyncCopy) use write barriers instead of a fixed stall.
Sourcepub fn throughput(&self) -> u8
pub fn throughput(&self) -> u8
Functional-unit THROUGHPUT — minimum cycles between consecutive ops on the same pipe even with no register dependency. CALIBRATED on sm_86: ALU ~1.2, FP32 ~2.7, int8 IMMA ~16 for a single warp (ptxas uses ~8 assuming >=2 warps interleave the tensor pipe). Memory issue ~2. This is the constraint that serializes independent IMMAs and independent FFMAs — the register-only model misses it.
Sourcepub fn variable_result_latency(&self) -> u32
pub fn variable_result_latency(&self) -> u32
Measured VARIABLE-latency result delay in cycles for barrier-tracked ops (L1/shared hit): LDG/LDSM ~45 on sm_86 (pointer-chasing microbenchmark). The scheduler doesn’t stall for this (a barrier does), but it uses it to know these results are FAR from ready — a consumer MUST wait on the scoreboard, never a stall.
Sourcepub fn is_variable_latency(&self) -> bool
pub fn is_variable_latency(&self) -> bool
Whether this op’s result is produced with VARIABLE latency and therefore must set a write barrier (scoreboard) that dependent consumers wait on — the key fact a scheduler needs for correctness.
Trait Implementations§
impl Copy for SassClass
impl Eq for SassClass
impl StructuralPartialEq for SassClass
Auto Trait Implementations§
impl Freeze for SassClass
impl RefUnwindSafe for SassClass
impl Send for SassClass
impl Sync for SassClass
impl Unpin for SassClass
impl UnsafeUnpin for SassClass
impl UnwindSafe for SassClass
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.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.