Fractions Skill Score computed by a WebGPU compute shader · checked against the CPU reference · MET-AL
The Fractions Skill Score is the one MET operator with no cheap closed form over partial sums — it needs a sliding window over the whole grid. That makes it the natural GPU target. This page runs FSS three ways — the trusted integral-image CPU reference and two WebGPU compute shaders (a naive per-cell kernel and an O(cells) separable one) — proves all three agree, then races them across grid size and neighborhood radius.
WebGPU adapter in this browser (the shader runs here; if there's none, everything falls back to CPU).
Real AIGFS-vs-URMA case (8,051 cells). Same threshold and neighborhood fed to both paths;
the scored-center count n must match exactly, the scores to floating-point tolerance.
Warm median wall-clock across grid sizes, from the real case (8k cells) to 2048² (4.2 M cells), at the neighborhood set above. GPU time includes input upload + dispatch + readback (an honest end-to-end).
Fixed 1024² grid, growing the neighborhood r. The naive kernel is O(cells·(2r+1)²) so it climbs steeply; the CPU integral image and the GPU separable kernel are O(cells) and stay flat. Watch the naive kernel fall behind even the CPU at large r while the separable kernel holds its lead.
Real case, at the threshold and r set in section 2 (move the slider to resmooth). Left of each pair:
the raw binary exceedance (does this cell cross the threshold?). Right: the neighborhood fraction
the FSS actually compares — each cell replaced by the share of exceedances within r cells. FSS rewards forecasts
whose fraction fields agree even when the binary fields don't line up point-for-point; the last panel is the
per-cell |Pf − Po| that the score integrates.
MET-AL · WebGPU FSS prototype — two GPU kernels (naive + separable), checked against the integral-image CPU reference. Data is a de-identified real case. Verified live on this machine's GPU.