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:
@@ -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
|
||||
|
||||
@@ -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}");
|
||||
|
||||
@@ -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)",
|
||||
|
||||
Reference in New Issue
Block a user