1. cuCtxSetLimit(STACK_SIZE, 8192) in curiosity trainer — prevents
stack overflow in fused kernel (6 arrays of 42-128 floats/thread)
2. Removed in-kernel gradient zeroing (Phase 1) — had inter-block race
where fast blocks atomicAdd while slow blocks still zero. Now uses
host-side memset_zeros (GPU cuMemsetD8Async, stream-ordered)
3. cuda_slice_to_tensor_f32 now uses safe stream.memcpy_dtod() instead
of raw device_ptr + memcpy_dtod_async (cudarc event tracking fix)
4. Debug traces in smoke test and training loop for deadlock diagnosis
Investigation ongoing: deadlock in init_gpu_experience_collector —
the collector constructor hangs during initialization, not during
experience collection or training.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>