Atomic refactor wiring the GPU log ring's first producer end-to-end: - cuda/gpu_log_helpers.cuh (new): extract LogHeader/LogRecord/LogRing struct definitions + the log_record() device __forceinline__ helper into a shared header. Single source of truth — other kernels include this rather than redefining the structs. - cuda/gpu_log_ring.cu: refactor to include gpu_log_helpers.cuh; retain only the gpu_log_tick kernel. - cuda/smoothness_lambda_controller.cu: include gpu_log_helpers.cuh, add trailing (LogRing*, const int*) args, capture pre-EMA jitter + post-EMA jitter + target + excess_ratio into shared mem, and emit three records per call (RT_INPUT, RT_STATE, RT_OUTPUT) gated on non-null ring pointer. - trainer/perception.rs: feature-gated (cuda-diag-log) ring allocation + step counter (mapped-pinned host shadow), gpu_log_tick launch FIRST inside the captured graph, two new pointer args on the smoothness controller launch (null when feature off), step-counter DtoD shadow alongside the other telemetry shadows, drain task spawn (skipped when no tokio runtime — sync tests still construct the trainer), and a feature-gated Drop impl that aborts the drain task on shutdown. - tests/smoothness_lambda_controller_invariants.rs: pass null pointers for the two new kernel args; the kernel's nullptr guard preserves pre-existing behaviour. - build.rs: rerun-if-changed on cuda/gpu_log_ids.h and cuda/gpu_log_helpers.cuh so header edits trigger cubin rebuilds. Verified: cargo build / check --all-targets clean both with and without the cuda-diag-log feature; 4/4 smoothness controller invariant tests pass; 9/9 perception_overfit integration tests pass under the feature. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.7 KiB
5.7 KiB