Pull requests / #2110
#2110 sycl: STRATA_WINDOW_SYNC=1 by default on an integrated GPU (Arc 140T: 10 of 10 requests stalled, 20 of 20 pass)
open · @andersson82 · 0 commentaires · Sur GitHub
BenchmarksServer & APIModels & quantsWindows
Description
## Title sycl: STRATA_WINDOW_SYNC=1 by default on an integrated GPU (Arc 140T: 10 of 10 requests stalled, 20 of 20 pass) Issue: related to #1545 (the same knob on an A770 under xe); no issue resolved ## Summary On an Arc 140T (the integrated GPU of a Core Ultra 9 285H, xe driver), engine 0.1.43 stalls on every request: the first verify window after the prompt never rings, and the 60 s watchdog restarts the engine. It is the hang `verify.cpp` already documents for the A750 (a window launched behind GPU work still in flight never starts), and `STRATA_WINDOW_SYNC=1` removes it the same way. This makes 1 the default where the device reports `host_unified_memory`, besides i915. ## What changed - `sycl/src/core/verify.cpp`, `Verifier::run`: the `STRATA_WINDOW_SYNC` default is 1 on an i915 card **or** a device with `sycl::info::device::host_unified_memory` (queried once), 0 elsewhere as before. The comment above it has the measurement. The variable still overrides it either way. Left alone: discrete cards on xe (Battlemage, and Alchemist on xe as in #1545) keep 0, so they pay no queue drain per window. Choosing a default for Alchemist on xe is #1545's open question and is not part of this change. No other backend is touched. ## Measurements Arc 140T (8086:7d51, xe), Core Ultra 9 285H, 62 GiB RAM, Fedora 44 (kernel 7.2.9), oneAPI 2026.0, native build (`sycl/tools/build.sh`). Coder IQ1_M, `--spec 4 --mtp`, `--max-context 98304`, `--stream-experts`, `STRATA_VERIFY_DEVICE_PLAN=1 STRATA_VERIFY_NO_HOST=1`. Ten short chat requests per run, 100 tokens, greedy, thinking off, served one after another through `sycl/serve/server_intel.py`. | Build | Cache | Requests answered | Decode | |---|---|---|---| | 0.1.43 (main) | all-resident, 12,288 experts (clean boot) | 0 of 6 (all stalled) | - | | 0.1.43 (main), without `--kv int8` | mirrored, 10,870 cached | 0 of 4 (all stalled) | - | | 0.1.43 + `STRATA_WINDOW_SYNC=1` by hand | mirrored, 10,728 cached | 6 of 6 | 10.5-17.0 tok/s | | this PR (no env) | mirrored, 10,496 cached | 10 of 10 | 11.5-17.2 tok/s | | this PR (no env) | all-resident, 12,288 experts (clean boot) | 10 of 10, 0 stall reports | 12.0-17.4 tok/s | | the 0.1.40 port, same boot (control) | mirrored, 10,633 cached | 6 of 6 | 11.2-16.9 tok/s | So the drain costs nothing measurable here: decode is the same as 0.1.40's on the same boot. The is_prime answer is the same text with and without this PR's build. With the cache mirrored the adaptive tier is off (`STRATA_VERIFY_NO_HOST`), so unlike #1545 the work the window lands behind is not the tier's swaps; I did not find which work it is. ## Extra Notes How I checked: - Built the PR branch alone on `origin/main` (7695859a) with `sycl/tools/build.sh`: 0 errors. The runs above used the same `verify.cpp` on main plus my local iGPU patches (the `/proc/meminfo` free-memory fallback and no prompt-slot borrowing on an iGPU), which are needed to run on the 140T at all and will come as their own PR. - The default path on discrete cards is the same code path as before: `host_unified_memory` should be false on a card with its own VRAM. Not tested: - Any discrete Intel card: I have none, so I could not check that `host_unified_memory` is false there. - Other integrated GPUs (Lunar Lake, Panther Lake / B390 as in #515) and Windows. - `STRATA_WINDOW_SYNC=2` (the gap rule) on the 140T. - The general model (IQ2_XS): only the Coder IQ1_M was run. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sur le site
Liens install, modèles, releases.