pub struct DecodeFlashSpec {
pub q: NodeId,
pub k: NodeId,
pub v: NodeId,
pub alibi: Option<NodeId>,
pub softmax_scale: f32,
pub causal: bool,
pub window_size_left: Option<usize>,
pub window_size_right: Option<usize>,
pub softcap: Option<f32>,
pub k_len: DynScalar,
pub decomposed_out: NodeId,
pub reconverge: NodeId,
}Expand description
The decode-attention region the model hands to the optimizer as a
flash-arm candidate. Arm 0 — the decomposed region — is already in
the graph; this describes how to build arm 1 (the flash kernel) and
where to splice the Op::Branch.
q is both the flash node’s first input and the branch’s shared
diverge point (the decomposed chain and the flash node both depart
from q). decomposed_out is arm 0’s exit (the region’s materialized
output, [B, Hq, Sq, D] — same shape/dtype as the flash output).
reconverge is the sole consumer of decomposed_out (the merge).
Fields§
§q: NodeIdq — [B, Hq, Sq, D]. Also the branch diverge point.
k: NodeIdk — the capacity KV buffer [B, Hkv, capacity, D].
v: NodeIdv — the capacity KV buffer [B, Hkv, capacity, D].
alibi: Option<NodeId>Optional ALiBi slopes [Hq]. Its presence disqualifies the arm
(the capacity-K CUDA kernel has no ALiBi param) — carried so the
gate can reject it explicitly.
softmax_scale: f321/sqrt(head_dim) (or the model’s scale).
causal: boolCausal masking. Accepted-and-ignored by the kernel (seq_q == 1
attends the full [0, k_len) prefix), so it does not disqualify.
window_size_left: Option<usize>Left sliding-window bound — disqualifies (no kernel support).
window_size_right: Option<usize>Right sliding-window bound — disqualifies (no kernel support).
softcap: Option<f32>Logit softcap — disqualifies (no kernel support).
k_len: DynScalarThe live attended prefix length (cached_len + seq), resolved via
the per-pass SymEnv at realize. For a per-step (non-persistent)
decode graph this is DynScalar::Concrete(cached_len + seq); for
persistent (plan-once) decode it is a Sym bound to the live
length each token.
decomposed_out: NodeIdArm 0’s exit: the decomposed region’s output node (the oracle).
reconverge: NodeIdThe sole consumer of decomposed_out — the branch merge point.
Trait Implementations§
Source§impl Clone for DecodeFlashSpec
impl Clone for DecodeFlashSpec
Auto Trait Implementations§
impl Freeze for DecodeFlashSpec
impl RefUnwindSafe for DecodeFlashSpec
impl Send for DecodeFlashSpec
impl Sync for DecodeFlashSpec
impl Unpin for DecodeFlashSpec
impl UnsafeUnpin for DecodeFlashSpec
impl UnwindSafe for DecodeFlashSpec
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more