pub struct CudaChip {
pub name: &'static str,
pub family: GpuFamily,
pub sm_arch: u32,
pub smem_kib_per_block: usize,
pub max_threads_per_block: usize,
pub sms: usize,
pub mem_bytes: usize,
pub precisions: &'static [Precision],
}Expand description
A described CUDA target part — the hardware limits and realized numeric formats that make the fastest
kernel chip-specific, plus the SM arch its kernels are compiled for. Construct with a named part
(CudaChip::rtx3060, CudaChip::b200, …); the emitter reads it to pick the arch flag, the shared-memory
budget, and which precisions are legal.
Fields§
§name: &'static strHuman-readable part name — carried into the emitted kernel’s provenance header.
family: GpuFamilyThe architecture family (tensor-core generation).
sm_arch: u32SM architecture number (80 / 86 / 89 / 90 / 100) — the sm_XX the kernel compiles for.
smem_kib_per_block: usizeOpt-in dynamic shared-memory ceiling per block, in KiB (bounds the resident row/tile a kernel stages).
max_threads_per_block: usizeThreads per block ceiling.
sms: usizeStreaming multiprocessors: the blocks a launch must offer to fill the part.
mem_bytes: usizeThe part’s device memory, in bytes: what a lane plans its program’s weights, caches and arrays on, less what the
driver and the program’s context take (lane::residence::CONTEXT_RESERVE).
precisions: &'static [Precision]The numeric formats this part’s tensor / CUDA cores realize — the precision legality gate (a lowering may pick a precision only if the target chip provides it).
Implementations§
Source§impl CudaChip
impl CudaChip
Sourcepub fn rtx3060() -> Self
pub fn rtx3060() -> Self
RTX 3060 — the local dev GPU: Ampere, sm_86, 28 SMs, ~99 KiB opt-in shared memory, 12 GiB. Where we prove correctness and relative speed before spending B200 time.
Sourcepub fn a100() -> Self
pub fn a100() -> Self
A100 — Ampere data-center part, sm_80, 108 SMs, ~164 KiB opt-in shared memory, the 80 GB part.
Sourcepub fn h100() -> Self
pub fn h100() -> Self
H100 (SXM / NVL) — Hopper, sm_90, 132 SMs, ~228 KiB opt-in shared memory, 80 GB (the SXM part), fp8.
Sourcepub fn b200() -> Self
pub fn b200() -> Self
B200 — Blackwell, sm_100, 148 SMs, ~228 KiB opt-in shared memory, 192 GB, fp8 (+ NVFP4 in Phase 5). The SOL-ExecBench target.
Sourcepub fn nvcc_arch_flag(&self) -> String
pub fn nvcc_arch_flag(&self) -> String
The nvcc arch flag that targets this part. Hopper/Blackwell get the architecture-specific a suffix
(required to unlock wgmma/TMA on Hopper and tcgen05 on Blackwell); Ampere/Ada use the plain form.
Sourcepub fn supports(&self, p: Precision) -> bool
pub fn supports(&self, p: Precision) -> bool
Whether this part’s tensor / CUDA path realizes a numeric format.
Sourcepub fn runs_numerically_on(&self, host_sm: u32) -> bool
pub fn runs_numerically_on(&self, host_sm: u32) -> bool
Can a kernel built for THIS chip be numerically executed on a host GPU of SM arch host_sm? Kernels
are forward-compatible: a lower-arch kernel runs on a higher-arch host, never the reverse. This routes
the run-vs-compile-check split — everything sm_86-legal is proven on the local 3060; a B200 kernel can
only be compile-checked locally and is numerically validated on the cloud B200.
Trait Implementations§
impl Copy for CudaChip
impl Eq for CudaChip
impl StructuralPartialEq for CudaChip
Auto Trait Implementations§
impl Freeze for CudaChip
impl RefUnwindSafe for CudaChip
impl Send for CudaChip
impl Sync for CudaChip
impl Unpin for CudaChip
impl UnsafeUnpin for CudaChip
impl UnwindSafe for CudaChip
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.