Repository navigation
Conversation
|
Same card as yours, different driver, and Level Zero does not load — data point for the test request I read this PR with interest because you have Level Zero working on a B70, and I have one where it does not. Both are 32 GB Arc Pro B70 cards. The difference that looks meaningful is the driver:
With my driver the Level Zero loader fails (a V2 loader against a V1-only ICD). Pointing If 8976 vs 9034 is the whole story then this is narrowly a driver-version problem and your PR is the right fix — people upgrade and it just works. But I cannot tell from one machine whether that is the case, which is what I am asking for in #2103. The failure mode worth fixing regardless of backend. When the free-VRAM query answers 0, the engine sizes its expert cache to zero slots and then refuses with: That message points at the mirror, which is a red herring — the real cause is two steps earlier, where the VRAM figure this backend cannot provide was 0 and nothing said so. The engine computes "0 bytes free" and then reports a problem about experts. That is a diagnosability bug that would bite any backend whose free-memory query stops answering, and I would fix it independently of which backend it happens on. Two things I am specifically curious about, since you have the working end of this:
For reference, if it is useful to anyone: #2103 is the test-request row for exactly this question, and #1890 is the OpenCL-fallback port that covers my end (a plain-SYCL fallback GEMM, the eager commit path, and a live DXGI free-VRAM figure). #2106 completes Happy to measure anything specific on the broken-LZ machine if it would help you decide what to do about the fallback path. |
|
Correction: the driver version is not the difference — please disregard that hypothesis I owe a correction to the analysis above. I suggested the split between your working Level Zero and my broken one was the graphics driver version (your The disproof is your own project's neighbourhood: PR #1940 reports a working Level Zero B70 on driver 32.0.101.8976 — the exact driver on my machine — with What I can actually show, now that I looked properlyOn this box, No Level Zero device appears at all — not filtered out, absent. I also tried pointing That is a loader/ICD combination problem on my end, not a property of Windows or of the driver. #1940's note that 2026.1.1's Level Zero v2 adapter "crashes on its first use" matches my first symptom exactly, and they avoided it by building on oneAPI 2026.0.0 where I use 2026.1.1 — so my current best guess is a toolchain/loader mismatch rather than a driver one. That is a guess too, and I am labelling it as one. What this changes for the threadMy #2103 test-request row asked whether a Windows Arc can lack Level Zero permanently. Given #1940, the honest answer is probably not — the likely case is a broken local install like mine, exactly what your I'll stop asking the driver question and go fix my loader. If I get Nothing in the rest of my first comment changes: the |
|
#1940 enumerates the level_zero:gpu using strata-devices.exe 👆 |
|
Root cause found on my machine: the Level Zero driver is fine, the ICD is not — and a driver update looks like the fix I installed the standalone oneAPI 2026.0.0 and chased this to a conclusion. Short version: Level Zero on this box is healthy at the driver level and blocked above it, by an ICD that predates every current SYCL Level Zero adapter. That makes it a driver-version problem, which is different from what I suggested earlier and closer to your original read. The driver is fineCalling Level Zero directly, with no SYCL and no UR in the way, through the v1 loader the driver ships: That is within one build of the driver version you report on your working B70. So the card, the driver and the ICD all answer correctly. The loaders and adapters above it do not
and then
Two related measurements, since they narrow it further:
So the ICD shipped with graphics driver 32.0.101.8976 is too old for every Level Zero adapter that exists today. The remaining fix is a newer graphics driver, for a newer One result I cannot explain, and I would rather flag than paper overPR #1940 reports a working Level Zero B70 on the same driver as mine (32.0.101.8976) with If anyone reading has a Windows Arc that does enumerate Where that leaves my OpenCL portAs a workaround for exactly this, on exactly one driver version. That is still what #1890 is, and I would rather say so plainly than present it as support for a platform. If the driver catches up, the plain-SYCL fallback GEMM and the The full measurement log is in |
|
#1940 works as-is for me, this is my device info as requested C:>sycl-ls --ignore-device-selectors C:>sycl-ls --verbose Platforms: 3 |
|
Thanks @demetree and @K8-and-a-half-1000. Pushed 795acb3 with the following Windows-only follow-up. 1. Fixes
2. TroubleshootingI reproduced OpenCL-only enumeration on my B70 in a fresh PowerShell session. The dependency chain was Level Zero adapter → UMF.dll → libhwloc-15.dll. The compiler directory contained UMF but not hwloc; adding only the TCM directory restored Level Zero without changing the driver or registry: $env:PATH = "C:\Program Files (x86)\Intel\oneAPI\tcm\latest\bin;$env:PATH"
.\sycl-ls.exe --ignore-device-selectors
3. Verified environmentWindows 11 Pro for Workstations Insider, build 26220; i9-13900KF, 64 GB RAM, Arc Pro B70 32 GB; graphics driver 32.0.101.9034, SYCL-reported L0 driver 1.17.39500+2. Native build compiler: DPC++ 2026.1.1, build 20260724. Actual loaded DLL file versions, collected during successful Level Zero probes:
The loader/tracing DLLs came from System32, and the Intel GPU ICD from the iigd_dch_d DriverStore package. Independent hwloc loaded from TCM; bundled hwloc loaded from Library/bin. It has no file/product version resource, but all three copies had the same SHA-256: Validation: native build passed; 482 installer tests passed, 30/30 supported GPU tests passed (unchanged exclusions: |
…p reports The NPU plugin returns EXECUTION_DEVICES as the plain string "NPU" (CPU and GPU return a list), so the probe split it into ['N', 'P', 'U'] and rejected a valid placement. Wrap a string in a list first; a CPU fallback or an empty list still fails. Rerun on the laptop: the 64x64 FP32 MatMul passes on NPU (max abs error 4.9e-05). This only shows the NPU runs a small graph; it is not Strata on the NPU. The handoff doc gains the Ubuntu dev machine inventory (no NPU, 15 GiB RAM: no real model baseline possible there), the review of upstream PRs Niko1221#2079, Niko1221#2110, Niko1221#2114 and Niko1221#2115 against this branch, and the laptop's hardware and OpenVINO reports (Core Ultra 9 285H, Arc 140T, Intel AI Boost, 63.5 GiB). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
probe_sycl.cpp reports, per SYCL device, what the native Windows engine (PR Niko1221#2079) gates on - ext_intel_free_memory and ext_oneapi_graph - plus host_unified_memory, memory sizes, the largest allocation, sub-group sizes and fp16/fp64, and runs one 32-wide sub-group kernel per GPU. Read-only, no large allocation. PROBE_SYCL.bat builds it with icx and runs it three ways (no switches, ZES_ENABLE_SYSMAN=1, plus UR_L0_ENABLE_RELAXED_ALLOCATION_LIMITS=1). Built with icpx 2025.3.2 (intel/oneapi-basekit image) and run on a UHD 730 over Level Zero: valid JSON, sub-group kernel ok in all three. There the iGPU reports ~270 MiB free with ~13 GiB MemAvailable, and no ext_oneapi_graph. The Windows build and the Arc 140T are not tested. The handoff doc records the laptop toolchain, the cherry-picked upstream PRs (Niko1221#2114, Niko1221#2110, Niko1221#2079; Niko1221#2115 left out), the setup test results and the probe run. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The laptop's Arc 140T on Windows reports ext_oneapi_graph=false, which PR Niko1221#2079's setup and engine gates refuse. The engine never updates an executable graph (no update() or dynamic parameters anywhere in sycl/), so per the sycl_ext_oneapi_graph spec ext_oneapi_limited_graph should be enough. The probe now reports that aspect and records two kernels on an in-order queue, finalizes and replays the graph twice and checks the result. On the UHD 730 over Level Zero (oneAPI 2025.3.2 image): ext_oneapi_graph false, ext_oneapi_limited_graph true, record/replay ok; on OpenCL the check reports the runtime's exception. Also rename the probe's quoted() to json_str(): with a non-const std::string, ADL picked std::quoted. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
We have an independent native Windows/SYCL implementation validated on Windows 10 with an Arc Pro B70, now based on Strata 0.1.44.1 ( Our contribution commit: marcelloc@60d2db74 After comparing your current file changes, these are the pieces that may be useful to reuse or adapt:
The local user also reports reviewing code with a context configured to 128K and leaving the server up since the previous day. That is practical usage evidence, not an instrumented soak test or proof that the conversation filled 128K. These results apply to our branch, not a test of this PR's head. We have not validated Linux regressions, Windows 11 or multi-GPU operation on our machine. An older standalone CLI shutdown failure has not been rechecked on 0.1.44.1; successful server unload is a separate result. Our branch provides a manual build path, whereas your PR also covers installer integration, so it is offered as complementary code and evidence rather than a replacement. No controlled performance improvement is claimed. |
|
Docs gap on this branch: |
|
Updated docs/INTEL_ARC.md in 0a2cc38: Windows prerequisites and build/run steps, Level Zero requirements (SDK optional), and the B70 validation results and limits. I initially left docs unchanged to keep this PR minimal; the review highlighted that setup errors point users to an outdated Windows section, so this focused docs-only update closes that gap. No runtime changes. |
Summary
Add native Windows support for the Intel SYCL backend, using the existing START-HERE.bat installer entry point. This PR contains only the necessary Windows/Intel compatibility code and installer regression tests. It does not contain models, local configurations, benchmark scripts, logs, dumps, documentation changes, or user backups.
This is a new, independent PR based on upstream main at
7695859aa13afb248bdb4d36f9b2e95707db079d(engine 0.1.43). It does not reuse or modify the earlier conflicted PR.Changes
sycl/tools/build_windows.bat; use Windows floating-point/MKL flags and required Windows libraries. Keep Linux flags and paths unchanged.Test environment
Measured locally on October 11-12, 2026, using the upstream baseline above plus this Windows port:
No Docker, WSL, or /dev/dxg was used. Tests explicitly selected
level_zero:gpu, disabled the persistent SYCL cache, and retainedSTRATA_VERIFY_DEVICE_PLAN=1andSTRATA_VERIFY_NO_HOST=1. Disabling persistent caching is a recorded test setting, not a new installer default. CUDA/HIP hardware and Linux execution were not validated on this machine.Build and regression validation
Re-run after the final Windows device-selection/PCI-ID fixes:
python -m unittest discover -s tools -p "test_setup*.py": 479 tests passed.sycl\tools\build_windows.bat: all Windows SYCL targets built successfully.strata.exe --list-devices: correctly reports the B70, 31.159 GiB, Level Zero, PCI device IDe223.ctest --test-dir build-sycl-win --output-on-failure -E "^(gr_parity|ple_parity|s2_expert_grouped_parity)$": 30/30 passed on the B70. This is not a claim that all 33 tests passed. The exclusions encountered earlier weregr_parity(unsupported QFUSE path),ple_parity(missing external fixture), ands2_expert_grouped_parity(bitwise mismatch); they are not changed or hidden by this PR.git diff --check: passed.Local performance measurements
These are functional/capacity measurements, not before/after speedup claims, quality benchmarks, or a general hardware recommendation. Each reported case is one warmed measurement, not a multi-run average. Inputs were identical within each model-comparison test; first-token changes prevented prefix-cache reuse. Successful cases had zero reused prompt tokens and generated exactly 256 new tokens. Expert computation stayed on the GPU, including experts read over PCIe from pinned RAM. The total model size must not be interpreted as all weights fitting in VRAM; the PLE table stays on disk.
Original models and Coder: preallocated 262144-token capacity
Protocol: native
--kv int8(64 values per FP16 scale, not strict GGML Q8_0),STRATA_KV_GROW=0, auto expert cache, streamed experts, 2048 MiB VRAM reserve, prefill chunks of 4096, 15 pool workers, 12 stager threads, temperature 0, MTP maximum 4 and--spec-min-p 0.5. The engine also has lookup drafts; the aggregate INFO spec count is 6, so this is not non-speculative decoding. A 4096-input/128-output warmup preceded each run. The 255K tests used 261120 actual input tokens, leaving room within 262144 for 256 output tokens.KV modes: GPU = all allocated KV in VRAM (
--kv-resident 0); stream = full KV in RAM plus a 32768-token VRAM window (--kv-resident 32768). Values below are prefill / decode tokens per second.Original-model repository revision:
ISTA-DASLab/Qwen3.8-Flash-Next-GSQ-RCO-GGUFated59f92082b1e93c0e96d60a8b11aab089b52f09. Total GGUF sizes (decimal GB): Coder IQ1_M 58.409; Q2_0 66.424; IQ2_XS 68.026; IQ3_XXS 75.840; IQ3_S 83.618. IQ3_S was the largest original tier actually tested successfully, not a proven absolute capacity limit.At 261120 input tokens, IQ3_S sampled dedicated GPU memory peaked at approximately 28.48 GiB in both modes; shared GPU memory peaked at 30.31 / 31.05 GiB, engine working set at 32.58 / 33.41 GiB, and minimum available system RAM at 7.73 / 7.15 GiB (GPU / stream). Shared GPU memory overlaps the process working set and must not be added to it; process private commit is not physical RAM usage. Successful paired original-model outputs matched, including the 255K tests.
OrcaRouter IQ3_XXS: independent compatibility-pack check
Local two-shard
orcarouter/Qwen3.8-Flash-Next-Uncensored-GGUF, 85.203 GB total, download revisiond27c0a15447dd92ae7c90919352c6810496945b1; both SHA256 hashes matched the local download metadata. Prepared an independent--compat-bf16pack and used this model's own tokenizer/chat template. Converted 459 tensors (96 exact, 363 rounded); 1.22 GiB BF16 conversions and 1.38 GiB packed dense arena. Expert bytes and PLE table were unchanged. This conversion does not recover the original BF16 checkpoint or prove its quality.Protocol differs from the table above: 32768 capacity, 512-token prefill chunks, full-GPU INT8 KV, original expert profile and original MTP runtime as in docs/ORCA.md, MTP maximum 4, temperature 0, 2048 MiB reserve, native streamed experts/no CPU fallback. Arithmetic returned 2603 for 137*19; translation returned "你好,世界!"; the generated square(x) function passed an AST syntax check (generated code was not executed).
All three cases generated 256 tokens, finished at the output-length limit, reused no prefix cache, and did not trigger the RAM guard. GPU log: 11193 resident experts (22.68 GiB), all 13383 remaining experts mirrored (27.12 GiB), resident experts computed on the B70. Sampled peaks: dedicated GPU 28.35 GiB, shared GPU 27.54 GiB, engine working set 29.16 GiB; minimum available system RAM 15.51 GiB. This used the Windows GPU-cache/RAM-mirror path rather than the document's full approximately 49.8-GiB expert arena. HTTP/API, vision, multi-turn/cancellation and 256K Orca operation were not tested in this check.
Failures and limits disclosed
All local models, configs, raw measurements and test artifacts are preserved outside the commit. No existing PR has been edited or closed.