Research-2128: oneAPI release image — Arc B580 crash and the Debian 13 rebuild — 2026-09-29¶
- Status: Active
- Workstream: RC3 release image; decision in ADR-1368; closes
T-RELEASE-ONEAPI-IMAGE-B580-SIGSEGV-2026-09-29 - Last updated: 2026-09-29
Question¶
The published oneAPI image (final-oneapi2025) exits 139 on an Arc B580 right after "SYCL: using device: Intel(R) Graphics [0xe20b]", while a UHD 770 scores. Is the old Intel GPU compute runtime in Intel's oneapi-runtime:2025.3.1 image the cause, does the runtime alone fix it, and what does the image look like when it follows the design build-config.env already records (oneAPI 2026.1 from Intel's apt repository on Debian 13)?
Sources¶
build-config.envoneAPI block (soname and glibc measurements behind the 2026.1 target design); the base-image gate'sONEAPI_BUILDER/ONEAPI_RUNTIMEexemption comment.- ADR-0541 (NEO 25.18 too old; NEO from GitHub releases), ADR-1145, ADR-1360.
- Intel's oneAPI apt repository index,
https://apt.repos.intel.com/oneapi/dists/all/main/binary-{amd64,all}/Packages.gz(Release dated 2026-09-08). - GitHub release metadata of
oneapi-src/level-zerov1.34.0 (assetdigestfields) andintel/compute-runtime26.35.39758.10.
Setup¶
Windows 11 host, Docker Desktop 29.8.1 with the WSL 2 backend, Arc B580 (level_zero:0, 0xe20b) and UHD 770 (level_zero:1, 0x4680) passed through /dev/dxg with /usr/lib/wsl mounted and /usr/lib/wsl/lib appended to the image's LD_LIBRARY_PATH. Build contexts came from a WSL clone at master 2d9d5b069. Every GPU run held flock /f/gpu.lock on the shared fixtures volume. Throwaway probe Dockerfiles were not committed.
Findings¶
1. master's 2025 builder no longer links the unit tests¶
docker build --target final-oneapi2025 at 2d9d5b069 fails at [952/1781] Linking target test/test_iqa_helpers: libsycl-devicelib-host.a(fallback-imf-fp32-host.o): undefined reference to symbol 'log10f@@GLIBC_2.2.5' (and fesetround), libm.so.6: error adding symbols: DSO missing from command line. -lm precedes the device library that icpx 2025.3 appends, and --as-needed has dropped it by then. The probe images below were therefore built with -Denable_tests=false in the oneAPI builder only. The 2026.1.1 compiler links every test on the same tree.
2. The compute runtime alone decides the crash¶
Same 2025-built binary in every row (probe of final-oneapi2025 at 2d9d5b069, AOT build); default model, Netflix pair, 2 frames. The variant images replaced packages with the dev/scripts/fetch-intel-neo.py runtime set at INTEL_NEO_VERSION and/or libze1 1.34.0.
| Variant | libze-intel-gpu1 (NEO) | IGC | Level Zero loader | Arc B580 | UHD 770 |
|---|---|---|---|---|---|
| image as published | 25.18.33578.15 | 2.11.12 | 1.21.9 | exit 139 | exit 0 |
| loader only | 25.18.33578.15 | 2.11.12 | 1.34.0 | exit 139 | exit 0 |
| NEO only | 26.35.39758.10 | 2.41.5 | 1.21.9 | exit 0 | exit 0 |
| NEO + loader (dev container set) | 26.35.39758.10 | 2.41.5 | 1.34.0 | exit 0 | exit 0 |
Every exit-0 row printed identical per-feature means on both GPUs (for example integer_adm2 0.954507, cambi 0.307775). The Level Zero loader version is irrelevant; the NEO GPU driver and its IGC are the fix. That matches ADR-0541's finding for the development container.
3. What Intel's apt repository provides¶
- The 2026.1 compiler is
intel-oneapi-compiler-dpcpp-cpp-2026.1at 2026.1.0-235 and 2026.1.1-325; the runtime metaintel-oneapi-runtime-dpcpp-cppcarries 2026.0.0-947, 2026.1.0-235 and 2026.1.1-325. Every package of a release shares its build number, but the metas depend on their sub-packages with>=, so apt would take the newest build in the repository for each sub-package unless pinned. An apt preferencePackage: intel-oneapi-*/Pin: version 2026.1.1-325holds them; UMF (intel-oneapi-umf-1.11.1.0-340) has its own version line and its own pin. - The runtime closure on Debian 13 is 16 packages, 1.1 GB under
/opt/intel/oneapi, withlibsycl.so.9,libur_loader, the three Unified Runtime adapters,libsvml,libircand the OpenCL CPU device inredist/lib, which itsld.so.conf.dentry registers.libumf.so.1lands in/opt/intel/oneapi/umf/1.1/libwith alatestsymlink and is not on the loader path, so the image keeps it onLD_LIBRARY_PATH. No package ships a Level Zero loader. - The key file at
intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB(sha256db932ba0…c48con 2026-09-29) holds five keys, four expired. The valid one,E9BF0AFC46D6E8B7DA5882F1BAC6F0C353D04109, expires 2027-08-21. Exporting only that key into the keyringaptuses for the repository verifies the repository. Importing the file withgpgexits 2 whengpg-agentis absent (a Recommends ofgpg), although the keys are imported; the installer tolerates that exit and decides on the exported fingerprint. - The Level Zero release publishes
.sigfiles but no checksum list. GitHub's release API reports asha256:digestper asset, which the fetcher checks. The+u24.04debs need glibc 2.39 and install on Debian 13.
4. The rebuilt image¶
final-oneapi2026 from this change, built on the same host with VMAF_BUILD_JOBS=3:
final-oneapi2025 at 2d9d5b069 (probe) | final-oneapi2026 | |
|---|---|---|
| Base | intel/oneapi-runtime:2025.3.1 (Ubuntu 24.04) | debian:13-slim |
| SYCL runtime | 2025.3.1, libsycl.so.8 | 2026.1.1-325, libsycl.so.9 |
| NEO / IGC | 25.18.33578.15 / 2.11.12 | 26.35.39758.10 / 2.41.5 |
| Level Zero loader | 1.21.9 | 1.34.0 |
| Size, unpacked | 5.86 GB | 2.39 GB |
Size, docker save + gzip -6 | 1.42 GB | 0.61 GB |
The builder's sycl_aot_image_check reported "30 spir64_gen fat binaries; 13 IP versions for 19 targets; 0 partial by declaration" (ADR-1360). The final stage has no curl, gpg or python3, runs as 65532:65532, resolves every adapter and vmaf dependency, and prints 1.0.0-rc.2 for vmaf --version.
5. Scores against the CPU backend of the same image¶
Netflix pair src01_hrc00/hrc01 576x324, all 48 frames; BBB 3840x2160, first 50 frames. Tolerances are the parity gate's (scripts/ci/cross_backend_parity_gate.py FEATURE_TOLERANCE, metric_delta, area_tolerance_factor; the VMAF score at places=4), compared per frame and per metric. Each JSON's feature_backends confirms the SYCL twin ran (ssimulacra2_sycl, psnr_hvs_sycl, the model's SYCL extractors).
| Pair | Workload | Device | CPU pooled | SYCL pooled | Worst per-frame delta (tolerance) | Result |
|---|---|---|---|---|---|---|
| Netflix, 48 frames | default model (vmaf) | Arc B580 | 82.816059 | 82.816058 | integer_motion2 1.2e-5 (5e-5) | pass |
| Netflix, 48 frames | default model (vmaf) | UHD 770 | 82.816059 | 82.816058 | integer_motion2 1.2e-5 (5e-5) | pass |
| Netflix, 48 frames | --feature psnr_hvs | Arc B580 | 31.330446 | 31.330390 | psnr_hvs_y 8.3e-5 (5e-4) | pass |
| Netflix, 48 frames | --feature psnr_hvs | UHD 770 | 31.330446 | 31.330390 | psnr_hvs_y 8.3e-5 (5e-4) | pass |
| Netflix, 48 frames | --feature ssimulacra2 | Arc B580 | 24.614428 | 24.614428 | 0 on every frame (5e-3) | pass |
| Netflix, 48 frames | --feature ssimulacra2 | UHD 770 | 24.614428 | 24.614428 | 0 on every frame (5e-3) | pass |
| BBB 4K, 50 frames | default model (vmaf) | Arc B580 | 79.182228 | 79.182227 | integer_motion2 5e-6 (5e-5) | pass |
| BBB 4K, 50 frames | default model (vmaf) | UHD 770 | 79.182228 | 79.182227 | integer_motion2 5e-6 (5e-5) | pass |
| BBB 4K, 50 frames | --feature psnr_hvs | Arc B580 | 44.258029 | 44.257588 | psnr_hvs_y 8.43e-4 (3.34e-3, area-scaled) | pass |
| BBB 4K, 50 frames | --feature psnr_hvs | UHD 770 | 44.258029 | 44.257588 | psnr_hvs_y 8.43e-4 (3.34e-3, area-scaled) | pass |
| BBB 4K, 50 frames | --feature ssimulacra2 | Arc B580 | 65.881933 | 65.881933 | 0 on every frame (5e-3) | pass |
| BBB 4K, 50 frames | --feature ssimulacra2 | UHD 770 | 65.881933 | 65.881933 | 0 on every frame (5e-3) | pass |
The two GPUs agree with each other bit for bit at the printed precision in every row.
Alternatives explored¶
- Overlay NEO 26.35 on the 2025 runtime image. It fixes the B580 (row "NEO only" above), but the 2025.3.2 builder cannot link
master's tests (finding 1), and it keeps Ubuntu 24.04, a 5.9 GB image and a SYCL runtime one major behind the development container. - Intel's 2026 images. Rejected by the measurements already in
build-config.env: the runtime image stops at 2026.0 (older than the 2026.1 compiler) and the Ubuntu 26.04 glibc is newer than Debian 13's. - Debian 13's own
libze1. NotLEVEL_ZERO_VERSION; the loader version is otherwise irrelevant to the crash (finding 2), so the single pinned version wins.
Open questions¶
- A native Linux host was not available for this run. WSL 2 reaches the GPUs through
/dev/dxgand the host driver's user-space half in/usr/lib/wsl/lib, a different kernel interface from a Linuxi915/xerender node; the maintainer's Linux box (RTX 4090 + Arc A380) has the copy-paste check indocs/state.md. - The Arc A380 was not tested with the new image here.
Related¶
- ADR-1368,
docs/state.mdrowT-RELEASE-ONEAPI-IMAGE-B580-SIGSEGV-2026-09-29, docker-production.md.