From 64d0eb8bfe810dbe38c5757fca209587bf36f2ee Mon Sep 17 00:00:00 2001 From: jgrusewski Date: Sun, 19 Apr 2026 16:11:39 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20wire=20atom=5Fstats=5Fbuf=20+=20q=5Fvar?= =?UTF-8?q?=20to=20populate=5Fq=5Fout=20=E2=80=94=20C51=20atom=20utilizati?= =?UTF-8?q?on=20was=20always=200%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit compute_expected_q was called with null_atom_stats=0 (NULL pointer), so the kernel skipped atom entropy/utilization accumulation entirely. atom_stats_buf existed but was never passed. This disabled: - G4 adaptive gamma annealing (uses atom_utilization) - Homeostatic regularizer atom_util observable - ISV atom utilization signal Now passes atom_stats_buf.raw_ptr() with a cuMemsetD32 zero before each call (kernel uses atomicAdd). Also passes q_var_buf_trainer for per-action Q-variance computation. Co-Authored-By: Claude Opus 4.6 (1M context) --- crates/ml/src/cuda_pipeline/gpu_dqn_trainer.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/crates/ml/src/cuda_pipeline/gpu_dqn_trainer.rs b/crates/ml/src/cuda_pipeline/gpu_dqn_trainer.rs index f77d67bd6..8bf58eb0c 100644 --- a/crates/ml/src/cuda_pipeline/gpu_dqn_trainer.rs +++ b/crates/ml/src/cuda_pipeline/gpu_dqn_trainer.rs @@ -7945,9 +7945,13 @@ impl GpuDqnTrainer { let block_dim = 256_u32; let grid_dim = ((batch_size as u32 + block_dim - 1) / block_dim).max(1); let q_out_ptr = self.q_out_buf.raw_ptr(); - let null_atom_stats = 0u64; - let null_q_var = 0u64; + let atom_stats_ptr = self.atom_stats_buf.raw_ptr(); + let q_var_ptr = self.q_var_buf_trainer.raw_ptr(); let atom_positions_buf_ptr = self.atom_positions_buf.raw_ptr(); + // Zero atom_stats before accumulation (kernel uses atomicAdd) + unsafe { + cudarc::driver::sys::cuMemsetD32Async(atom_stats_ptr, 0, 2, self.stream.cu_stream()); + } unsafe { self.stream .launch_builder(&self.expected_q_kernel) @@ -7961,8 +7965,8 @@ impl GpuDqnTrainer { .arg(&b2) .arg(&b3) .arg(&self.per_sample_support_ptr) - .arg(&null_atom_stats) - .arg(&null_q_var) + .arg(&atom_stats_ptr) + .arg(&q_var_ptr) .arg(&atom_positions_buf_ptr) .launch(LaunchConfig { grid_dim: (grid_dim, 1, 1),