jgrusewski
6efb78ba9c
feat(cuda): pure-CUDA backtest forward, eliminate Candle dispatch in hyperopt DQN
...
Replace closure-based evaluate() with evaluate_dqn_graphed() for non-OFI
walk-forward backtest path. Extracts DuelingWeightSet from VarMap (branching
or standard dueling) and runs hand-written warp-cooperative CUDA forward
kernel with CUDA Graph capture — zero Candle dispatch overhead per step.
Key changes:
- GpuBacktestEvaluator::stream() getter for weight extraction on eval stream
- DQNAgentType::is_using_branching() / network_dims() for CUDA kernel config
- Hyperopt evaluate_gpu() non-OFI path: extract_dueling_weights_branching()
→ evaluate_dqn_graphed() (CUDA Graph accelerated)
- OFI path: retains Candle closure for state permutation (gather kernel
layout mismatch — future CUDA permutation kernel)
- 66+ GPU hot-path violations hardened to hard errors across DQN/PPO/supervised
- Stripped all gpu-ok suppression comments
- Proper #[cfg(feature = "cuda")] gating for CUDA-only code paths
77 files, 0 errors, 0 warnings across workspace.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 02:49:25 +01:00
..
2026-03-02 15:41:23 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-02 15:41:23 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-04 22:58:40 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-08 15:13:41 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-09 12:16:05 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-04 22:58:40 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-04 01:19:02 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-04 23:13:25 +01:00
2026-03-10 10:04:36 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-04 23:13:25 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-04 18:27:42 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-04 23:13:25 +01:00
2026-03-04 23:13:25 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-26 00:50:25 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-02 15:41:23 +01:00
2026-02-25 11:56:00 +01:00
2026-03-09 12:16:05 +01:00
2026-02-25 11:56:00 +01:00
2026-03-12 01:44:03 +01:00
2026-03-11 00:46:53 +01:00
2026-03-11 10:03:21 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-26 00:50:25 +01:00
2026-02-26 00:05:38 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-03 20:12:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-09 12:16:05 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-03 20:12:00 +01:00
2026-03-02 11:02:56 +01:00
2026-02-25 11:56:00 +01:00
2026-03-09 12:16:05 +01:00
2026-03-09 12:16:05 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-02 15:41:23 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-09 12:16:05 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-02 15:41:23 +01:00
2026-03-09 12:16:05 +01:00
2026-02-26 00:50:25 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-26 00:50:25 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-13 02:49:25 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-09 12:16:05 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-02 15:41:23 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00