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 comentários · No GitHub

BenchmarksServer & APIModels & quantsWindows

Descrição

## 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)

No site

Links install, modelos, releases.