Files
foxhunt/crates
jgrusewski 2856daa8e9 fix: replace raw memcpy_dtod_async with safe stream.memcpy_dtod
Fixes cudarc 0.19 event tracking corruption caused by mixing safe
device_ptr/device_ptr_mut wrappers with raw memcpy_dtod_async.

The anti-pattern: manually calling device_ptr() to get raw pointers,
then using low-level memcpy_dtod_async, then dropping SyncOnDrop
guards — this bypasses cudarc's event management and corrupts the
synchronization state of CudaSlice objects.

Fixed in 7 call sites across 3 files:
- gpu_experience_collector.rs: dtod_clone_f32, dtod_clone_i32,
  build_next_states_dtod (replaced pointer arithmetic with slice views)
- gpu_weights.rs: extract_one, sync_one
- training_loop.rs: cuda_slice_to_tensor_f32

Investigation ongoing: deadlock persists in PER insert path
(cuda_slice_to_tensor_f32 -> stream.synchronize()). The memcpy fix
is correct but there's an additional issue in the CudaSlice->GpuTensor
conversion that needs further debugging.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 23:24:42 +01:00
..