ADR-1830: vif_sycl runs at SIMD-16 only; the SIMD-32 kernels and VMAF_SYCL_VIF_SUBGROUP_SIZE are removed¶
- Status: Accepted (amends ADR-1395)
- Date: 2026-10-05
- Deciders: lusoris
- Tags:
sycl,gpu,testing,rc3,fork-local
Context¶
vif_sycl (core/src/feature/sycl/integer_vif_sycl.cpp) carried every horizontal and fused kernel twice, at sub-group size 16 and 32. The runtime picks SIMD-16 on every Intel GPU, so the SIMD-32 instances ran only when VMAF_SYCL_VIF_SUBGROUP_SIZE=32 forced them (test_sycl_vif_parity_sg32 did). ADR-1395 gave them the 256-entry register file (VmafSyclKernelShape<32, 256>) because at the default 128 registers they spilled on an Arc A380, and a kernel that spills returns wrong values on Arc A-series under the xe driver.
Two tester reports from UHD 770 integrated GPUs (Xe-LP; issue #2116 and the office report of #2122) showed that Xe-LP has no 256-entry register file: there the eight SIMD-32 instances compile at 128 registers and spill 1664 to 10048 bytes per thread (ocloc .ze_info for tgllp, adl-* and rpl-* agrees), so test_sycl_kernel_scratch, which reads every kernel in the binary, fails on that GPU whether or not the kernels run. No one shape keeps SIMD-32 out of scratch on both Xe-LP and the A380.
SIMD-32 was never faster. On an Arc A380 at 3840x2160 (BBB, (t(35) - t(5)) / 30, medians of 3), forced SIMD-32 took 21.19 ms per frame against 21.20 ms for the default SIMD-16 with separate kernels, and 33.85 ms against 23.50 ms with vif_fused=true.
Decision¶
vif_sycl has one sub-group size, VIF_SG_SIZE = 16. The SIMD-32 template instances, their dispatchers, the use_simd16 state and the VMAF_SYCL_VIF_SUBGROUP_SIZE override are removed, as is test_sycl_vif_parity_sg32. A device without SIMD-16 sub-groups (no Intel GPU) is refused in init() with -ENOTSUP before anything is allocated. The scale-0 horizontal kernel keeps the shape of ADR-1501 (no required size, 256 registers) and the scale-0 fused kernel keeps <16, 256>; the others are <16, 0>. Measured with ocloc 26.35 / IGC 2.41.5 for the 19 default targets, no kernel of integer_vif_sycl.cpp uses scratch memory on any of them. test_sycl_kernel_source_contract.py refuses a SIMD-32 vif path (the variable, use_simd16, a second template parameter, a <32 shape or a , 32>( instantiation).
Alternatives considered¶
| Option | Pros | Cons | Why not chosen |
|---|---|---|---|
| Drop the SIMD-32 kernels and the override (chosen) | One shape, scratch-free on all 19 targets; nothing to dispatch per device; no A380 cost (SIMD-16 is the default and was never slower) | Removes a diagnostic switch a user might have set; a SYCL device without SIMD-16 can no longer run vif_sycl | — |
| Keep them; refuse the override and skip them in the audit on a device without the 256-entry register file | Keeps the switch | A per-device rule in the runtime and the audit for kernels nobody runs by default; the audit no longer reads every kernel | More code to keep a slower path |
| Reshape the SIMD-32 kernels to fit 128 registers | Keeps the switch on every device | Not attempted; A380 cost unknown; a reshaped SIMD-32 kernel has to stay exact and scratch-free on every target | Effort for a path that was never faster |
Consequences¶
- Positive: the UHD 770 scratch audit can pass once the other four Xe-LP kernels are fixed (#2150);
vif_syclloses eight kernels and about 60 lines of dispatch. - Negative:
VMAF_SYCL_VIF_SUBGROUP_SIZEis gone; setting it now does nothing (libvmaf no longer reads it). A non-Intel SYCL device without SIMD-16 gets-ENOTSUPfromvif_sycl. - Neutral / follow-ups: docs (
docs/backends/sycl/overview.md,docs/usage/env-vars.md) and the SYCL agent notes drop the variable; the UHD 770 re-run of the Intel GPU tester image is the device evidence forT-SYCL-ROW-KERNELS-SG16-OTHER-DEVICES-2026-10-02.
References¶
Q1.1(maintainer popup answer, 2026-10-05, verbatim): "Drop the SIMD-32 kernels (Recommended)".- ADR-1395 (no scratch memory; its "First fix" bullet is amended here), ADR-1468 (sub-group sizes on every AOT target), ADR-1501 (no required size with 256 registers).
docs/state.md:T-SYCL-ROW-KERNELS-SG16-OTHER-DEVICES-2026-10-02.- Hardware reports: issue #2116 (i5-13500, UHD 770), #2122 (i9-12900K, UHD 770).