fix(cuda): dim_overrides before common header in backtest kernel, cap n_episodes at 4096

- backtest_forward_kernel: dim_overrides must precede common_device_functions.cuh
  which has #error guards requiring STATE_DIM/MARKET_DIM/PORTFOLIO_DIM to be
  defined before inclusion. Experience collector already had correct ordering.
- Cap MAX_EPISODES from 8192→4096 (diminishing returns above 4096, wastes walltime)
- Cap trainer .min() from 0x8000 (32768) → 4096 to match

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
jgrusewski
2026-03-15 13:05:43 +01:00
parent 92f8cba74a
commit 910f4bdee3
3 changed files with 7 additions and 6 deletions

View File

@@ -466,7 +466,7 @@ impl GpuHardwareInfo {
const WARPS_PER_SM: usize = 2; // conservative for high-register kernels
const THREADS_PER_WARP: usize = 32;
const MIN_EPISODES: usize = 128;
const MAX_EPISODES: usize = 8192;
const MAX_EPISODES: usize = 4096;
// Per-episode output buffer: states + actions + rewards + done + target_q + td_error
// Plus per-episode state: portfolio(6) + barrier(10) + diversity(30+2) + rng(1) ≈ 50 floats

View File

@@ -1305,8 +1305,8 @@ impl GpuBacktestEvaluator {
let common_src = include_str!("common_device_functions.cuh");
let kernel_src = include_str!("backtest_forward_kernel.cu");
// Inject actual dimensions before kernel source (#ifndef guards in kernel
// let these override the defaults).
// Inject actual dimensions — must precede common_src which has
// #error guards requiring these defines.
let dim_overrides = format!(
"#define STATE_DIM {state_dim}\n\
#define MARKET_DIM {market_dim}\n\
@@ -1320,7 +1320,8 @@ impl GpuBacktestEvaluator {
market_dim = self.feature_dim - self.config.ofi_dim,
);
let full_source = format!("{common_src}\n{dim_overrides}\n{kernel_src}");
// dim_overrides BEFORE common_src so #error guards in .cuh see the defines
let full_source = format!("{dim_overrides}\n{common_src}\n{kernel_src}");
info!(
"GpuBacktestEvaluator: compiling forward kernel with dims state={state_dim} \
shared=[{shared_h1},{shared_h2}] value={value_h} adv={adv_h} \
@@ -1663,7 +1664,7 @@ mod tests {
#define ADV_H 128\n\
#define SHMEM_MAX_IN_DIM 256\n\
#define SHMEM_TILE_ROWS 32\n";
let full_source = format!("{common_src}\n{dim_overrides}\n{kernel_src}");
let full_source = format!("{dim_overrides}\n{common_src}\n{kernel_src}");
let result = crate::cuda_pipeline::compile_ptx_for_device(&full_source, &context);
if let Err(ref e) = result {
panic!("backtest_forward_kernel PTX compilation failed: {e}");

View File

@@ -2493,7 +2493,7 @@ impl DQNTrainer {
aligned_sd,
self.hyperparams.gpu_timesteps_per_episode,
);
let chosen = configured.max(optimal).min(0x8000);
let chosen = configured.max(optimal).min(4096);
if chosen != configured {
info!(
"GPU auto-scaled n_episodes: {} → {} (SMs={}, VRAM={:.0}MB)",