Pull requests / #1940
#1940 Add Arc native Windows support
open · @K8-and-a-half-1000 · 0 comments · View on 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.
Related on strata.com
Editorial links to help you install, pick models, or read release notes — not part of the upstream thread.