llama.cpp 1.0 + Qwen3.8-27B: Vulkan vs SYCL on Intel Arc B390 A benchmark of llama.cpp build 1386 (commit a956a852c) on an Intel Arc B390 GPU found the Vulkan backend processed a 512-token prompt at 271.35 tokens per second versus 98.21 t/s for SYCL, making Vulkan 2.76× faster for prompt processing. In token generation over 128 tokens, SYCL reached 6.06 t/s against Vulkan's 5.89 t/s, a roughly 3% edge the author called essentially a tie. The test ran the Qwen3.8-27B Q4_K_M model (15.65 GiB, 27.32B parameters) fully offloaded to the GPU on a Xiaomi Book Pro 14 with an Intel Core Ultra X7 358H and 30.7 GB shared memory, using Mesa 24.3 for Vulkan and Intel oneAPI 2026.0 for SYCL. llama.cpp 1.0 + Qwen3.8-27B: Vulkan vs SYCL on Intel Arc B390 llama.cpp version: a956a852c commit: "Fix ctz64 on 32bit 32273 ", build 1386 Model: Qwen3.8-27B-thinkingcap-abliterated-mtp-Q4 K M 15.65 GiB, 27.32B params Hardware: Xiaomi Book Pro 14 — Intel Core Ultra X7 358H + Intel Arc B390 GPU 96 compute units, 30.7 GB shared memory OS: CachyOS Arch-based , Linux 6.12+, Mesa 24.3+, Intel oneAPI 2026.0 Executive Summary | Test | Vulkan | SYCL | Winner | |---|---|---|---| | Prompt Processing pp512 | 271.35 t/s | 98.21 t/s | Vulkan 2.76× faster | | Token Generation tg128 | 5.89 t/s | 6.06 t/s | SYCL ~3% faster | Vulkan dominates prompt processing — critical for long-context workloads, RAG, and batch inference. SYCL edges out token generation — marginal advantage for interactive chat. Hardware & Software Stack | Component | Version | |---|---| | GPU | Intel Arc B390 Battlemage, 96 EUs | | CPU | Intel Core Ultra X7 358H 16c/16t, Panther Lake | | RAM | 30 GB LPDDR5x + zram swap | | Vulkan Driver | Mesa 24.3 open-source, intel hasvk | | SYCL Runtime | Intel oneAPI 2026.0 Level Zero 1.34, oneDNN 2026.0 | | Compiler Vulkan | Clang 23.1.4 | | Compiler SYCL | Intel icx/icpx 2026.0 | | llama.cpp | a956a852c v1.0.0-dev, build 1386 | Build Configurations Vulkan Mesa / Open Source cmake -B build-vulkan \ -DCMAKE BUILD TYPE=Release \ -DGGML VULKAN=ON \ -DGGML CUDA=OFF -DGGML HIP=OFF -DGGML SYCL=OFF -DGGML METAL=OFF -DGGML OPENCL=OFF \ -DBUILD SHARED LIBS=ON -DGGML NATIVE=ON -DGGML OPENMP=ON \ -DCMAKE C COMPILER=clang -DCMAKE CXX COMPILER=clang++ - Uses Mesa's hasvk driver with KHR cooperative matrix matrix cores - No proprietary Intel stack required - Supports fp16, bf16, int8 dot products SYCL Intel oneAPI / Proprietary source /opt/intel/oneapi/setvars.sh cmake -B build-sycl-linux \ -DCMAKE BUILD TYPE=Release \ -DGGML SYCL=ON -DGGML SYCL DNN=ON -DGGML SYCL GRAPH=ON \ -DGGML SYCL TARGET=INTEL -DGGML SYCL F16=OFF \ -DGGML SYCL SUPPORT LEVEL ZERO API=ON -DGGML SYCL SUPPORT XMX=ON \ -DGGML SYCL HOST MEM FALLBACK=ON \ -DGGML OPENCL=OFF -DGGML CUDA=OFF -DGGML HIP=OFF -DGGML VULKAN=OFF -DGGML METAL=OFF \ -DBUILD SHARED LIBS=ON -DGGML NATIVE=ON -DGGML OPENMP=ON \ -DCMAKE C COMPILER=icx -DCMAKE CXX COMPILER=icpx - Uses Intel Level Zero + oneDNN + XMX DPAS matrix instructions - Requires proprietary oneAPI toolkit - Enables: flash attention, graph capture, XMX ESIMD kernels, host-pinned memory Benchmark Methodology SYCL requires oneAPI env source /opt/intel/oneapi/setvars.sh ./llama-bench -m Qwen3.8-27B-thinkingcap-abliterated-mtp-Q4 K M.gguf -p 512 -n 128 -ngl 99 Vulkan runs directly ./llama-bench -m Qwen3.8-27B-thinkingcap-abliterated-mtp-Q4 K M.gguf -p 512 -n 128 -ngl 99 - Model fully offloaded to GPU -ngl 99 - 5 warmup runs + 5 measured runs default - Single-threaded CPU -t 1 to isolate GPU performance - Cache types: K=f16, V=f16 default - Batch size: 2048, Ubatch: 512 default Results Prompt Processing pp512 — 512 token prompt ingestion | Backend | Throughput | StdDev | Relative | |---|---|---|---| | Vulkan | 271.35 t/s | ±1.21 | 1.00× baseline | | SYCL | 98.21 t/s | ±0.70 | 0.36× | Vulkan is 2.76× faster for prompt processing. This is the most impactful metric for: - Long-context ingestion RAG, document analysis - Batch/parallel request processing - Time-to-first-token in server deployments Token Generation tg128 — 128 token continuation | Backend | Throughput | StdDev | Relative | |---|---|---|---| | SYCL | 6.06 t/s | ±0.01 | 1.00× baseline | | Vulkan | 5.89 t/s | ±0.06 | 0.97× | SYCL is ~3% faster for token generation — essentially a tie within noise. This metric matters for: - Interactive chat latency - Streaming response speed - Single-user throughput Performance Histogram Chart generated from 5-run averages per backend Why the Difference? | Factor | Vulkan Advantage | SYCL Advantage | |---|---|---| | Matrix cores | KHR cooperative matrix Mesa | XMX/DPAS via oneDNN + ESIMD | | Memory model | Unified Memory UMA — zero-copy | USM device + host-pinned staging | | Kernel fusion | Limited shader-based | oneDNN graph fusion + flash attention | | Driver overhead | Lower Mesa userspace | Higher Level Zero + JIT | | Compiler | Clang mature, optimized | icx/icpx aggressive vectorization | | Flash Attention | Not yet in Vulkan backend | Enabled via oneDNN GGML SYCL FA ONEDNN=1 | Prompt Processing Memory-Bound Vulkan wins because: - Lower driver overhead for large batched matmuls - Direct UMA access — no staging copies for prompt ingestion - Mesa's cooperative matrix efficiently maps to Xe² cores Token Generation Compute-Bound, Small Matmuls SYCL wins marginally because: - oneDNN optimized kernels for small GEMMs 1×128, 32×32 - XMX/DPAS instructions better utilized at low batch sizes - Graph capture reduces launch overhead for repeated decode steps Practical Recommendations | Use Case | Recommended Backend | |---|---| | RAG / Document QA | Vulkan 2.76× faster prompt ingestion | | Batch inference server | Vulkan higher throughput | | Interactive chat single user | Either tg128 within noise | | Long-context 32k | Vulkan better memory scaling | | No proprietary drivers wanted | Vulkan Mesa only | | Maximum flash-attn optimization | SYCL oneDNN FA enabled | Raw Data llama.cpp version build: a956a852c 1386 SYCL | qwen35 27B Q4 K - Medium | 15.65 GiB | 27.32 B | SYCL | 99 | pp512 | 98.21 ± 0.70 | | qwen35 27B Q4 K - Medium | 15.65 GiB | 27.32 B | SYCL | 99 | tg128 | 6.06 ± 0.01 | Vulkan | qwen35 27B Q4 K - Medium | 15.65 GiB | 27.32 B | Vulkan | 99 | pp512 | 271.35 ± 1.21 | | qwen35 27B Q4 K - Medium | 15.65 GiB | 27.32 B | Vulkan | 99 | tg128 | 5.89 ± 0.06 | Reproducing Clone llama-bench llama.cpp fork with bench tooling git clone https://github.com/ggml-org/llama.cpp llama-bench cd llama-bench Build Vulkan cmake -B build-vulkan -DGGML VULKAN=ON -DCMAKE C COMPILER=clang -DCMAKE CXX COMPILER=clang++ ... cmake --build build-vulkan -j$ nproc Build SYCL requires Intel oneAPI source /opt/intel/oneapi/setvars.sh cmake -B build-sycl-linux -DGGML SYCL=ON -DGGML SYCL DNN=ON ... -DCMAKE C COMPILER=icx -DCMAKE CXX COMPILER=icpx cmake --build build-sycl-linux -j$ nproc Run benchmarks ./build-vulkan/bin/llama-bench -m