gated_delta_update (use_kernel path): returns [y, newState].
q, k: [B, S, Hk, Dk] bf16 v: [B, S, Hv, Dv] bf16
a, b: [B, S, Hv] bf16 aLog, dtBias: [Hv]
state: [B, Hv, Dv, Dk] f32 (or null → zeros)
differentiable (unpadded training forwards) returns the same values and
attaches a backward, so an enclosing value_and_grad can differentiate
through the recurrence with respect to q, k, v, a, b and the state.
gated_delta_update (use_kernel path): returns [y, newState]. q, k: [B, S, Hk, Dk] bf16 v: [B, S, Hv, Dv] bf16 a, b: [B, S, Hv] bf16 aLog, dtBias: [Hv] state: [B, Hv, Dv, Dk] f32 (or null → zeros)
differentiable(unpadded training forwards) returns the same values and attaches a backward, so an enclosing value_and_grad can differentiate through the recurrence with respect to q, k, v, a, b and the state.