Plan 4 Task 2c.3c.2. Additive only — no production callers (2c.3c.4
wires them).
Two infrastructure additions for the GRN trunk backward chain:
1. launch_dw_only_no_bias on CublasBackwardSet: variant of launch_dw_only
that skips the bias-grad kernel call. Linear_residual in h_s1 GRN
block has no bias, so calling launch_dw_only with db=0u64 would
segfault the bias-grad kernel.
2. saxpy_inplace on CublasGemmSet: y += alpha * x for element-wise
gradient accumulation. h_s2 GRN's identity residual needs
d_h_s1 += d_pre_ln_h_s2 after Linear_a_h_s2's backward overwrites
d_h_s1 with d_x = d_linear_a @ W_a. Implementation reuses the
existing dqn_saxpy_f32_kernel (already used by the experience
collector's IQR/ensemble-variance Q-bonus paths) — no new kernel,
no cuBLAS legacy-handle stream-binding work, kernel handle loaded
once at CublasGemmSet::new from DQN_UTILITY_CUBIN.
Both methods sit dead-code until 2c.3c.4's wire-up commit.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>