Pull requests / #1940

#1940 Add Arc native Windows support

open · @K8-and-a-half-1000 · 0 commentaires · Sur GitHub

BenchmarksSetup & installServer & APIMulti-GPUNVIDIA / CUDAModels & quantsSecurityDocumentationWindowsLinux

Description

### Author's note:

This PR adds support for running Strata on Arc on Windows **natively**, tested on a Pro B70. No WSL2, no docker.
This work was done over the course of a week in an offshoot project at first, but I've decided to contribute upstream based on the project activity and direction.

In short: I like what I see, so here's a contribution to help support the project.

## AI disclaimer
Fable 5.1 ultracode and max used heavily throughout.
I've been critical and culled as many temp files, tools and journey notes that are not relevant for this project. 

## Summary

The SYCL port builds and runs natively on Windows 11 with the Intel oneAPI compiler (`icx`), the Visual Studio Build
Tools and the Intel Arc driver. Written for and measured on an Arc Pro B70 (32 GB) dedicated to the model. The Linux
build is unchanged: everything lives in `sycl/` under `#if defined(_WIN32)` or in new Windows scripts.

Full description, measurements and open questions: `docs/INTEL_WINDOWS.md`.

## What it adds

- **Build**: `sycl\tools\build_windows.bat` finds Visual Studio and oneAPI, configures `sycl\CMakeLists.txt` with
  Ninja, builds the engine, `strata-device` and the probes, and packages `engine\` with the oneAPI runtime DLLs and a
  `BUILD.json` (`sycl\tools\package_windows.py`). CMake: MSVC-style flags for `icx`, `/Qmkl:sequential`, the dynamic
  CRT, the AVX flags.
- **Install and serve**: `sycl\setup_intel.py` and `sycl\serve\server_intel.py` on Windows (cards numbered by
  `strata-device --list-devices`, the engine's environment, Sysman telemetry through `ctypes` in
  `sycl\serve\xe_telemetry.py`); `setup.py` hands `--backend sycl` over on Windows. Tests without a GPU:
  `tools\test_setup_sycl_windows.py`.
- **Engine**: the card choice and capability gate (`device.dp.cpp`); a chunked VRAM arena that tries one allocation
  first (`core/device.hpp`); the DXGI video-memory budget folded into the free-VRAM figure (`sycl_mem.hpp`); a VRAM
  heartbeat against WDDM eviction on a card that drives no display (`sycl_heartbeat.hpp`); `prepare_for_device_copy`
  on the pinned expert arena; overlapped `ReadFile` for `--stream-experts`; the `windows.h` macros that collide with
  identifiers in the kernels (`IN`, `OUT`, `near`, `far`, `small`, `hyper`) dropped after the dpct headers;
  `_putenv_s` in the two parity programs that call `setenv`.
- **Probes** (`sycl/probe/`): doorbell, allocation, bandwidth and graph probes, each ending in a `VERDICT` line that
  names the engine setting it decides. All under Strata's MIT license (the two that derived from XeStrata's LGPL files
  were rewritten from their descriptions).
- **Tools**: `report_windows.py` (a one-shot bug-report bundle) and `benchy_windows.bat` / `.py` (the Linux port's
  benchy on Windows; not yet run).

## What ran

Arc Pro B70, driver 32.0.101.8976, oneAPI 2026.0.0, AOT `bmg-g31`, 2026-10-10 and 11: the build (0 errors), the
probes, and Swift 1.5 IQ3_XXS at `--max-context 262144` with INT8 KV and 32,768 resident cells, used from qwen-code for
an evening: prompts read at 630-890 tok/s, decode 50-76 tok/s, 97-99.3% of the KV block reads from VRAM, 2.1 GiB of
VRAM free with everything loaded. On the 0.1.38 base before this: Coder IQ1_M at 60 tok/s sampled, and Swift served
for several days.

## Two things worth knowing upstream

1. **`sycl/src/kernels/cuda/qsa_decode_attn.dp.cpp` is the 0.1.38 migration, kept in place of the 0.1.41 one.** The
   0.1.41 copy adds the opt-in lane-cell scoring variant (`STRATA_ATTN_LANECELL`) as a second template parameter of
   `attn_chunk_kernel`. Compiled that way by icx 2026.0.0 for `bmg-g31`, the INT8 instantiation's batched output is
   inf and NaN (`qsa_prompt_attn_parity`, "vs FP64 old": 78.5 on an output scale of 3.7) while the fp16 instantiation
   is exact; the 0.1.38 copy, otherwise the same code, measures 2e-6 in both. Since 0.1.41 routes SYCL prompts
   through this kernel, every reply on Windows was token 0 until the swap. `kv_stream_parity` cannot catch this
   class of defect: it compares the kernel's streamed output with its resident output, both through the same kernel.
   Whether the Linux build is affected was not measured.
2. **The opt-in XMX prompt attention** (`STRATA_PROMPT_ATTN_XMX=1`) measures 2e-3 absolute (5e-4 of scale) on this
   Windows build, where `docs/INTEL.md` reports 1e-6 of scale on Linux. Off by default; not understood.

## Known limits

One card per model on Windows (`--gpus` / `--layer-split` is refused); images are not wired on Intel; only the Arc Pro
B70 has run this (other Battlemage cards need `STRATA_SYCL_AOT=bmg-g21` or a JIT build); the greedy benchmark and the
heartbeat's idle test have not been run. Details in `docs/INTEL_WINDOWS.md`, "Known limits and open questions".

## Extra Notes

On Windows there is a RAM eviction on idle timeout that affects Intel Arc cards, which will happen if the card is not driving any displays. This can be avoided by adding a small heartbeat every 10 seconds to poke the card. Check the heartbeat files for more info.

Sur le site

Liens install, modèles, releases.