lihe07's picture
span-02: single-source release folder (engine final path, soft blend)
19886eb verified
Raw History Blame Contribute Delete
1.4 kB
//! dllm-kernels: the engine's CUDA kernels (cuda/*.cu, compiled for sm_120a by build.rs and embedded in the binary) and their Rust launch glue.
//! * `Backend` is the device interface (`gpu::CudaBackend`: cudarc driver API, one main stream + one branch stream, CUDA graphs).
//! * `Gpu` holds the typed launchers: small bf16 ops (ops.rs), FP8 linears (linear), NVFP4 MoE (moe), attention (attn), fused norms (norm),
//! greedy lm_head (head), speculative decoding (spec) and the vision tower (vision).
pub mod attn;
pub mod backend;
pub mod gpu;
pub mod head;
pub mod linear;
pub mod moe;
pub mod norm;
pub mod ops;
pub mod spec;
pub mod vision;
pub use backend::{Arg, Backend, DBuf, GraphExec};
pub use ops::Gpu;
/// Row-invariant launch parameters: while set, the GEMV K-split and the decode-attention KV split are chosen as if the batch had ONE row, so a row's
/// result does not depend on how many other rows share the launch. The speculative verify forward sets it, which makes a verify of k+1 rows bit-identical
/// to one-row greedy decoding (lossless speculation). Costs nothing measurable.
static ROW_INVARIANT: std::sync::atomic::AtomicBool = std::sync::atomic::AtomicBool::new(false);
pub fn set_row_invariant(on: bool) {
ROW_INVARIANT.store(on, std::sync::atomic::Ordering::Relaxed);
}
pub fn row_invariant() -> bool {
ROW_INVARIANT.load(std::sync::atomic::Ordering::Relaxed)
}