GPU symbols
The fused per-symbol kernel against the f64 CPU arbiter
10/10 passed in 1365ms
| Test | What it does | Result |
|---|---|---|
test_error_flat_in_n | The variance stays inside VAR_TOL across an eightfold n, where a sequential f32 sum is 4.5e-4 wrong at n = 1e6 and 2.7e-1 at 1e8, linear in n. | ✅ pass |
test_excess_noise_matches | Input-referred xi agrees with the CPU arbiter within XI_TOL = 1e-3, looser because (sigma2 - 1 - v_el)/t_hat^2 amplifies a sigma2 error by ~1/(T*xi), forty here. | ✅ pass |
test_kernel_time_reported | Timestamp queries report positive kernel time inside the wall clock. | ✅ pass |
test_no_modulation_matches | With V_A = 0 there is nothing to regress on and both report a bare slope. | ✅ pass |
test_odd_pilot_frequency | A non-dyadic pilot frequency tracks the CPU SNR to SNR_TOL: frac*k hits 2.5e6 at k = 1e7, where an f32 ulp is a quarter cycle, hence the 64-bit fixed point. | ✅ pass |
test_partials_are_tree | One f64 partial comes back per workgroup, not one per symbol or one total. | ✅ pass |
test_pilot_snr_matches | The pilot bin's SNR over the adjacent empty bin agrees to SNR_TOL = 1e-5. | ✅ pass |
test_slope_matches | The GPU slope sum(a.y)/sum(a.a) matches the f64 arbiter to SLOPE_TOL = 1e-5. | ✅ pass |
test_static_phase_matches | With both linewidths zero the walk vanishes and slope and variance still agree. | ✅ pass |
test_variance_matches | The residual variance of y - t_hat*a agrees with the arbiter to VAR_TOL = 1e-5. | ✅ pass |