Skip to content

fix(sycl): revert pseudo-Kahan recurrence and calibrate Arc A380 - #1314

Merged
lusoris merged 9 commits into
masterfrom
fix/sycl-ssimulacra2-blur-recurrence-and-arc-calibration
Sep 6, 2026
Merged

lusoris merged 9 commits into
masterfrom
fix/sycl-ssimulacra2-blur-recurrence-and-arc-calibration

Conversation

@lusoris

@lusoris lusoris commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Reverts the PR #865 pseudo-Kahan recurrence in core/src/feature/sycl/ssimulacra2_sycl.cpp which caused pole blow-up to $10^{25}$, NaNs, and score saturation at 100.0, restoring a stable float32 Charalampidis IIR recurrence matching the CUDA twin. Calibrates the Intel Arc A380 (sycl:0x8086:0x56a* and arc:dg2-g10) in scripts/ci/gpu_ulp_calibration.yaml to 5.0e-2 (places=1) per ADR-0985 Option C, accounting for fp64-less accumulation across the 6-scale pyramid on natural video clips.

Type

  • feat — new feature
  • fix — bug fix
  • perf — performance improvement
  • refactor — no behavior change
  • docs — documentation only
  • test — test-only
  • build / ci — tooling / infra
  • port — cherry-pick from upstream Netflix/vmaf
  • sycl / cuda / simd — backend-specific

Checklist

  • Commits follow Conventional Commits (the commit-msg hook enforces this).
  • make format && make lint is green locally.
  • Unit tests pass: meson test -C build.
  • If I touched any SIMD/GPU code path, I ran /cross-backend-diff and the worst ULP is ≤ 2.
  • If I touched a feature extractor with SIMD/GPU twins, I either updated every twin or listed the gap under "Known follow-ups" below.
  • If I added a new .c / .cpp / .cu / .h / .hpp, it has the appropriate license header (see CONTRIBUTING.md).
  • If this is a breaking change, the commit message uses ! or BREAKING CHANGE: and the migration path is documented below.
  • If this PR adds an ADR, the ADR row lives in docs/adr/_index_fragments/<NNNN-slug>.md and the slug is appended to docs/adr/_index_fragments/_order.txt — do not edit docs/adr/README.md directly (regenerated by scripts/docs/concat-adr-index.sh; see ADR-0221).

Bug-status hygiene (ADR-0165)

  • docs/state.md updated in this PR with a row in Recently closed (T-SYCL-ARC-SSIMULACRA2-PARITY-2026-06-03).

Netflix golden-data gate (ADR-0024)

  • I did not modify any assertAlmostEqual(...) score in the Netflix golden Python tests.

Cross-backend numerical results

feature         cpu ↔ sycl (Arc A380)        tolerance      status
ssimulacra2     delta = 1.211e-02            5.0e-02        PASS (src01 48-frame)
ssimulacra2     delta = 0.000e+00            5.0e-02        PASS (checkerboard 1px)
ssimulacra2     delta = 0.000e+00            5.0e-02        PASS (checkerboard 10px)

Deep-dive deliverables (ADR-0108)

  • Research digest — docs/research/0985-sycl-parity-divergence-2026-06-03.md updated with pseudo-Kahan pole analysis and empirical measurements.
  • Decision matrix — captured in docs/adr/0985-sycl-parity-divergence-2026-06-03.md under ## Alternatives considered (Option C accepted).
  • AGENTS.md invariant note — added to core/src/feature/sycl/AGENTS.md ("ssimulacra2_sycl.cpp IIR recurrence has no running accumulator — never 'Kahan' it").
  • Reproducer / smoke-test command — pasted below under "Reproducer".
  • CHANGELOG fragment — new file changelog.d/fixed/sycl-ssimulacra2-blur-recurrence.md added.
  • Rebase note — entry added to docs/rebase-notes.md.

Reproducer

source /opt/intel/oneapi/setvars.sh >/dev/null 2>&1
meson test -C core/build test_sycl_ssimulacra2_parity -v
python3 scripts/ci/cross_backend_parity_gate.py \
  --vmaf-binary core/build/tools/vmaf \
  --reference /home/kilian/dev/vmaf/python/test/resource/yuv/src01_hrc00_576x324.yuv \
  --distorted /home/kilian/dev/vmaf/python/test/resource/yuv/src01_hrc01_576x324.yuv \
  --width 576 --height 324 \
  --features ssimulacra2 \
  --backends cpu sycl \
  --gpu-id arc:dg2-g10

Known follow-ups

Step 3 (a SYCL device CI lane so the parity test stops skipping on machines without hardware) is gated on maintainer decision D4; tracked as a TODO in ADR-0985.

@lusoris lusoris added this to the 1.0.0 — First release milestone Sep 5, 2026
@lusoris
lusoris force-pushed the fix/sycl-ssimulacra2-blur-recurrence-and-arc-calibration branch 3 times, most recently from 679266c to debba87 Compare September 5, 2026 23:11
@lusoris
lusoris force-pushed the fix/sycl-ssimulacra2-blur-recurrence-and-arc-calibration branch from debba87 to 90d7a32 Compare September 6, 2026 02:26
@lusoris
lusoris marked this pull request as ready for review September 6, 2026 02:26
@lusoris
lusoris merged commit b7a7cf7 into master Sep 6, 2026
116 of 117 checks passed
@lusoris
lusoris deleted the fix/sycl-ssimulacra2-blur-recurrence-and-arc-calibration branch September 6, 2026 02:50
@lusoris lusoris added the type:bug Something isn't working label Sep 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type:bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant