Replaces SharedCublasHandle (one lt_handle rebound across streams) with
PerStreamCublasHandles (one lt_handle per CUDA stream). Implements
NVIDIA's cuBLAS §2.1.4 remediation #1 — documented fix for concurrent-
stream non-determinism.
Context: prior investigation (task a11d706bdb56b5020) ruled out
atomicAdd/RNG/Thrust/multi-stream-sync/graph-capture. Option B (commit
bb399b635) fixed algo-selection determinism via AlgoGetIds+Init+Check
but HEALTH_DIAG still varied 1.5-2.5% at epoch 0. Context7 query of
NVIDIA docs identified shared-handle-across-streams as the remaining
cause even with user-owned workspaces and CUBLAS_WORKSPACE_CONFIG=:4096:8.
Fix:
* PerStreamCublasHandles replaces SharedCublasHandle — HashMap<raw
cu_stream ptr, lt_handle>, per-stream workspace registry.
* Hot-path accessor lt_handle_for(stream) returns handle for that
stream; creates on first use.
* Pre-registers iqn_stream, attn_stream, 4 forward+backward branch
streams before CUDA Graph capture (avoids mid-capture hashmap insert).
* Deleted set_stream rebind dance.
* 11 files migrated; ~250-350 LOC refactor. TF32 preserved everywhere.
* Option B's DeterministicAlgoSelector unchanged; selector is
stateless-per-handle and composes cleanly with per-stream handles.
Determinism validation at HEAD (3 runs, RTX 3050):
pre-C variance post-C variance
c51 1.7% 0.16% (10×)
grad_ratio_mag_dir 1.5% 0.14% (10×)
grad_abs[mag] 1e-4 rel 3e-5 rel (bit-identical to 5 sig figs)
g12_predictive 1e-6 rel 7e-6 rel (bit-identical to 6 sig figs)
grad_abs[dir] 2.5% 8.7% (UNCHANGED — residual)
The residual non-determinism at grad_abs[dir] is localized to the
direction-branch backward path. Magnitude-branch is bit-identical across
runs; direction-branch is not. The two branches use different backward
code paths — dir-branch has a non-cuBLAS source (candidate: atomicAdd in
a direction-specific reducer, or branch-stream finish-order dependency
on downstream atomic accumulation). Follow-up task will root-cause and
fix that residual.
Per feedback_fix_aggressively.md: shipping this partial determinism win
now so subsequent investigation has a clean baseline.
Wall-clock delta: <1% (within noise).