sycl: STRATA_PF_XMX=2 is the default on Arc Alchemist (opt-out STRATA_PF_XMX=0); Battlemage unchanged

A750 prompt prefill +30..39% at 4K (mode 2: 79.3 -> 110.4 tok/s, 5 of 5 rounds), +32..35% at 1-2K tokens; decode and cache slots unchanged.
Teacher-forced KL against the default 0.0002 (floor 0.0001), first-token KL 0.0017 (floor 0.0005), tasks inside the default's run-to-run spread.
Docs: INTEL.md has the numbers.
This commit is contained in:
Niko1221 committed 2026-10-18 12:22:23 +02:00
1 parent fca3c59586
commit 12fd8cff65
2 files changed
+16 -1

No files matched your search

+11
View File
@@ -759,6 +759,17 @@ Measured on an Arc A750 (8 GB, `i915`, PCIe 4.0) with the Flash-Next IQ3_XXS in
8192 --prefill-repeat 5` for the time of both kernels. Not taken: the same kernel with its state in SLM (no register
spills, the same bits, ~4x slower: 13.7 vs 3.1-3.3 ms at T=1000).
### Prompt speed on Alchemist: the grouped XMX expert launch is the default (0.1.48, `STRATA_PF_XMX`)
The A750's prompt path decodes and multiplies a group of experts in one fused launch on the XMX units (`STRATA_PF_XMX=2`, `sycl/src/prefill/xmx_moe.dp.cpp`)
instead of dequantizing each expert to FP16 and calling oneMKL. It is the default on Alchemist cards; `STRATA_PF_XMX=0` turns it off and `=1` is the
variant that dequantizes first and runs one grouped XMX GEMM per product. Battlemage keeps the old path (the same kernels are 7-11% slower there).
Measured on the A750 (IQ3_XXS, default flags, interleaved rounds against the run before): a 1K-token prompt 35.1 -> 46.4 tok/s, 2K 61.7 -> 83.1, 4K 79.3 -> 110.4
(+39%, 5 of 5 rounds), 6K 66.3 -> 114.8; decode unchanged (18.7 tok/s), the same number of cache slots. It rounds differently from the FP16 path:
teacher-forced KL against the default over 6,006 forced tokens 0.0002 (the default against itself: 0.0001; with the default PCIe share the A750's own run-to-run noise
is 0.012), first-token KL 0.0017 (floor 0.0005), top-1 agreement 99.7%. HumanEval (every 2nd, 82) 73, 69 and 74 for the mode and two default runs, reasoning 21 / 23 / 22 of
30, a 35-question Chinese/Japanese/Korean set 35/35 in all, needles at 2K-6K 9/9, an 8K-context tool-call agent 6/6.
## Not done
- Images, on both Intel engines. Strata's vision path encodes with `strata-vision` into embeddings the CUDA
+5 -1
View File
@@ -150,7 +150,11 @@ int mode() {
// sub-group 16 (Xe2, Battlemage).
static const int v = [] {
const char* e = std::getenv("STRATA_PF_XMX");
const int want = e ? std::atoi(e) : 0;
// 0.1.48: mode 2 (the fused grouped XMX launch) is the default on Arc Alchemist (A-series): A750 prompts +30..39% (4K), +32..35% (1-2K tokens),
// first-token KL 0.002 against a 0.0005 floor, HumanEval / reasoning / agent / CJK / needles inside the run-to-run spread; Battlemage is
// 7-11% slower with it, so it stays off there. STRATA_PF_XMX=0 turns it off, 1 is the dequantize + grouped XMX variant.
const bool alchemist = strata::intel_gpu_gen(strata::q_of(nullptr)->get_device()) == strata::IntelGpuGen::Alchemist;
const int want = e ? std::atoi(e) : alchemist ? 2 : 0;
if (want == 0) return 0;
#ifdef STRATA_NO_DG2_XMX
std::fprintf(stderr, "STRATA_PF_XMX ignored: this build is AOT for a device without the sub-group 8 XMX kernels\n");