Panther Lake Qwen3.5-9B on the same Core Ultra X7 358H: Xiaomi Book Pro 14 (CachyOS) versus MSI Prestige 14 Flip
We cloned 2604272-SYST-LLAMAPT89 from OpenBenchmarking.org, an MSI Prestige 14 Flip AI+ run of pts/llama-cpp-2.5.0 on the same Intel Core Ultra X7 358H, and compared it to local Phoronix Test Suite 10.8.6 results on the Xiaomi Book Pro 14. Same Qwen3.5-9B-Q8_0 GGUF, same llama.cpp b8933, same flags. The Xiaomi came out ahead by about 2.6x on Vulkan and 26% on CPU BLAS.
Local results: ~/.phoronix-test-suite/test-results/2026-09-18-1952 (Vulkan), cpu-blas-qwen35-tg128 (BLAS), sycl-qwen35-tg128 (SYCL).
Remote result: 2604272-SYST-LLAMAPT89 cloned to ~/.phoronix-test-suite/test-results/2604272-SYST-LLAMAPT89/composite.xml with phoronix-test-suite clone-openbenchmarking-result.
Summary
Test: Qwen3.5-9B-Q8_0 Text Generation 128 (-n 128 -p 0) |
Xiaomi Book Pro 14 (CachyOS) | MSI Prestige 14 Flip (Ubuntu 26.04) 2604272 a/b/c |
Delta |
|---|---|---|---|
Vulkan VULKAN -r 100 -fa 1 -m ../Qwen3.5-9B-Q8_0.gguf -n 128 -p 0 |
12.54 tok/s 12.50:12.55:12.58, 1031.67:1021.78:1018.90s |
4.65 / 4.77 / 4.79 avg 4.74 tok/s, 2783.9:2728.4:2720.5s | +164% (2.64x) |
CPU BLAS BLAS -m ../Qwen3.5-9B-Q8_0.gguf -n 128 -p 0 (OpenBLAS, -t 16) |
9.72 tok/s 9.70:9.73:9.73 dev 0.18%, 66.86:66.22:66.28s |
7.87 / 7.87 / 7.47 avg 7.74 tok/s, 84.48:86.72:89.69s | +26% |
SYCL SYCL -r 100 -fa 1 -sm layer |
11.68 tok/s 11.72:11.65:11.68, 1125.76:1105.24:1099.80s |
not tested | -- |
On the Xiaomi, Vulkan beats BLAS by 29% (12.54 versus 9.72), which is what you expect when the iGPU helps. On the MSI the order flips, BLAS beats Vulkan (7.74 versus 4.74). For prompt processing on the MSI, Vulkan is still about 15x faster (see below), so the text generation flip looks like a Vulkan-specific bottleneck on that system or driver rather than a general iGPU problem.
Both systems sit well below the fleet medians reported by phoronix-test-suite info pts/llama-cpp-2.5.0. Vulkan Qwen tg128 median is 62.6 tok/s (10th percentile 13.07, 90th 142), CPU BLAS Qwen tg128 median is 15.07 tok/s. That fleet is dominated by discrete GPUs, so an integrated Arc B390 at around 30W will not match a 4070 or 4080.
The two systems
Xiaomi Book Pro 14 TM2424
Captured from composite.xml and phodevi (2026-09-18-1952, cpu-blas-qwen35-tg128, sycl-qwen35-tg128):
- CPU: Intel Core Ultra X7 358H at 4.70 GHz, 16C/16T, Panther Lake, 18 MB cache, microcode
0x11c - GPU: Intel Arc B390 (Panther Lake iGPU),
Intel open-source Mesa,vulkaninfo: uma:1 fp16:1 bf16:1 warp 32 shared 49152 - Memory:
8 x 4 GB LPDDR5-9600 MT/sMicron (32 GB),MT62F...-026 WTclass - Disk: 1024 GB YMTC PC411-1TB-D, btrfs
compress=zstd:1KYBER - OS: CachyOS rolling, kernel
7.3.0-rc3-1-cachyos-rcx86_64, Wayland,GCC 16.2.1 + Clang 22.1.8 + LLVM 22.1.8 - Power and tuning:
intel_pstate powersave (EPP: performance)plusPlatform Profile: performanceplusTransparent Huge Pages: alwaysplusxe.enable_psr=0 xe.enable_panel_replay=0 xe.enable_fbc=0 xe.enable_dc=0(fromJSON: kernel-parameters)
MSI Prestige 14 Flip AI+ D3MTG (result 2604272)
Three runs a/b/c from 2026-04-26 to 2026-04-27, same CPU, same user system:
- CPU: same
Intel Core Ultra X7 358H @ 4.70 GHz (16 Cores), microcode0x114(two revisions older) - Board:
MSI Prestige 14 Flip AI+ D3MTG MS-14T2 (E14T2IMS.20E BIOS), chipsetIntel Device e47f - Memory:
8 x 4 GB LPDDR5-8533 MT/s Micron MT62F2G32D4DS-026 WT(32 GB at 8533, about 12.5% less bandwidth) - Disk:
1024GB Micron_2500_MTFDKBA1T0QGN,ext4 - OS: Ubuntu 26.04 (pre-release at the time), kernel
7.0.0-14-genericx86_64, GNOME Shell 50.1 Wayland, Mesa 26.0.3OpenGL 4.6 Mesa 26.0.3-1ubuntu1,GCC 15.2.0 - Tuning: same
intel_pstate powersave (EPP: performance)plusPlatform Profile: performance, butTransparent Huge Pages: madvise(notalways),thermald 2.5.11
The result file at ~/.phoronix-test-suite/test-results/2604272-SYST-LLAMAPT89/composite.xml holds 60 pts/llama-cpp-2.5.0 results. The comparison here uses the Qwen subset to keep it apples to apples.
Test setup, identical where it counts
- Test profile:
pts/llama-cpp-2.5.0AppVersion b8933fromggml-org/llama.cpp, b8933.tar.gz SHA25642ac3680...(seeinstall.sh:9) - Model:
Qwen3.5-9B-Q8_0.gguf, 8.86 GiB, 8.95B params, Q8_0,9527502048 bytesfrom Hugging Face Unsloth viadownloads.xml:23 - Scale:
Tokens Per SecondHIB,TimesToRun 3. The wrapper~/llama-cpprunsbuild/bin/llama-bench -t $NUM_CPU_PHYSICAL_CORES $LLAMA_BENCH_ARGS > $LOG_FILE(-t 16on both machines) - Builds on Xiaomi (
~/.phoronix-test-suite/installed-tests/pts/llama-cpp-2.5.0/):llama.cpp-BLAS/build/bin/llama-bench,cmake -DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLASllama.cpp-VULKAN/build/bin, prebuiltllama-b8933-bin-ubuntu-vulkan-x64.tar.gzwithlibggml-vulkan.sollama.cpp-SYCL,icx/icpxGGML_SYCL_F16=ON(oneAPI), tested assycl-qwen35-tg128
# Your runs
PRESET_OPTIONS='llama-cpp.backend=CPU BLAS;llama-cpp.model=Qwen3.5-9B-Q8_0;llama-cpp.test=Text Generation 128' \
TEST_RESULTS_IDENTIFIER='CPU-BLAS-Qwen3.5-tg128' \
TEST_RESULTS_NAME='cpu-blas-qwen35-tg128' \
./phoronix-test-suite batch-benchmark pts/llama-cpp-2.5.0
# Manual equivalent
~/.phoronix-test-suite/installed-tests/pts/llama-cpp-2.5.0/llama.cpp-BLAS/build/bin/llama-bench \
-t 16 -m ../Qwen3.5-9B-Q8_0.gguf -n 128 -p 0 # tg128
Results in detail
Qwen3.5-9B-Q8_0 text generation 128, the headline
Xiaomi:
# 2026-09-18-1952 — VULKAN -r 100 -fa 1 -m ../Qwen3.5-9B-Q8_0.gguf -n 128 -p 0
Value: 12.54 | Raw: 12.5:12.55:12.58 | JSON run-times 1031.67:1021.78:1018.90
Log: | qwen35 9B Q8_0 | 8.86 GiB | 8.95 B | Vulkan | 99 | 16 | 1 | tg128 | 12.50 ±0.06 | build: dcad77cc3 (8933)
# cpu-blas-qwen35-tg128 — BLAS -m ../Qwen3.5-9B-Q8_0.gguf -n 128 -p 0
Value: 9.72 | Raw: 9.7:9.73:9.73 | run-times 66.86:66.22:66.28 dev 0.18%
# sycl-qwen35-tg128 — SYCL -r 100 -fa 1 -sm layer -m ../Qwen3.5-9B-Q8_0.gguf -n 128 -p 0
Value: 11.68 | Raw: 11.72:11.65:11.68 | run-times 1125.76:1105.24:1099.80
MSI 2604272 (a/b/c triple):
# VULKAN -r 100 -fa 1 -m ../Qwen3.5-9B-Q8_0.gguf -n 128 -p 0
a 4.65 2783.92s | b 4.77 2728.40s | c 4.79 2720.57s avg 4.74
# BLAS -m ../Qwen3.5-9B-Q8_0.gguf -n 128 -p 0
a 7.87 84.48s | b 7.87 86.72s | c 7.47 89.69s avg 7.74
Vulkan is 2.64x higher in throughput on the Xiaomi and takes far less wall time even though both use -r 100. The MSI Vulkan run needed about 45 minutes per repetition, the Xiaomi about 17. BLAS is also about 20% faster on the Xiaomi (66s versus 86s average).
Prompt processing, where the iGPU should help (MSI data, not yet run on Xiaomi)
So far the Xiaomi has only run tg128. The MSI data shows the usual pattern. Text generation is limited by memory latency and is weak on iGPUs, prompt processing is compute bound and Vulkan pulls ahead:
| Qwen3.5 pp | MSI Vulkan avg | MSI BLAS avg | Vulkan uplift |
|---|---|---|---|
512 -n 0 -p 512 |
372.65 / 372.02 / 387.79 -> 377.2 143/142/138s | 24.23 / 24.23 / 24.39 -> 24.28 128/127/121s | 15.5x |
1024 -n 0 -p 1024 |
354.08 / 359.16 / 377.16 -> 363.5 300/294/281s | 24.41 / 24.31 / 24.36 -> 24.36 249s | 14.9x |
2048 -n 0 -p 2048 |
373.66 / 374.82 / 369.00 -> 372.5 561/559/566s | 24.38 / 24.28 / 24.34 -> 24.33 503s | 15.3x |
# To fill the gap on your Xiaomi (est 30-40 min):
PRESET_OPTIONS='llama-cpp.backend=CPU BLAS;llama-cpp.model=Qwen3.5-9B-Q8_0;llama-cpp.test=Prompt Processing 512,Prompt Processing 1024,Prompt Processing 2048' \
TEST_RESULTS_IDENTIFIER='CPU-BLAS-Qwen3.5-pp' TEST_RESULTS_NAME='cpu-blas-qwen35-pp' \
./phoronix-test-suite batch-benchmark pts/llama-cpp-2.5.0
PRESET_OPTIONS='llama-cpp.backend=Vulkan;llama-cpp.model=Qwen3.5-9B-Q8_0;llama-cpp.test=Prompt Processing 512,Prompt Processing 1024,Prompt Processing 2048' \
TEST_RESULTS_IDENTIFIER='Vulkan-Qwen3.5-pp' TEST_RESULTS_NAME='vulkan-qwen35-pp' \
./phoronix-test-suite batch-benchmark pts/llama-cpp-2.5.0
Fleet medians tell the same story. Vulkan Qwen pp2048 median is 3774 tok/s (10th 1049, 90th 9178) versus CPU BLAS pp2048 median 97.71 tok/s. The MSI at 372 tok/s for Vulkan PP is low for the fleet, which is expected for integrated graphics versus discrete, but it is still 15x its own BLAS.
Other models in 2604272, sanity check
The MSI file covers 60 tests. A few examples for context:
gpt-oss-20b-Q8_0 tg128: Vulkan 11.60/11.55/11.57 vs BLAS 23.19/22.54/19.75, BLAS wins TG again on that systemgpt-oss-20b-Q8_0 pp2048: Vulkan 530/528/519 vs BLAS 40.9/40.8/40.8, Vulkan 13xGLM-4.7-Flash-IQ4_XS tg128: Vulkan 16.0/15.8/15.4 vs BLAS 17.4/13.8/14.0Llama-3.1-Tulu-3-8B-Q8_0 tg128: Vulkan 4.79/4.81/4.68 vs BLAS 8.83/8.52/8.62Mistral-7B tg128: Vulkan 5.02/5.03/5.00 vs BLAS 9.74/9.68/9.16DeepSeek-R1-Distill-Llama-8B tg128: Vulkan 4.74/4.76/4.76 vs BLAS 8.74/9.23/8.75granite-3.0-3b tg128: Vulkan about 29.8 vs BLAS not in snippet, the only case where Vulkan clearly wins TG on the MSI is the small 3B model
Overall on the MSI, Vulkan only beats BLAS for TG on large prompt processing or small models. The Xiaomi changes that pattern for Qwen TG.
Why the gap
Six differences that together add up. No single one explains 2.64x, but the stack does. The fact that BLAS differs by only 26% suggests the Vulkan path is the outlier.
-
Memory bandwidth, 9600 versus 8533. Text generation is bandwidth bound.
8x4GB LPDDR5-9600is about 76.8 GB/s per channel times eight, versus 68.2 GB/s at 8533, roughly 12.5% more. The YMTC versus Micron 2500 SSD does not affect tokens per second. -
Huge pages. Xiaomi uses
Transparent Huge Pages: always, MSI usesmadvise. For GGUFmmapplusllama-benchthis can be 10 to 20% on TG alone. -
Governor, EPP and platform profile. Both report
intel_pstate powersave (EPP: performance)plusperformanceplatform profile, but CachyOS setsintel_pstatethrough Ananicy-cpp on kernel7.3.0-rc3, MSI ran stock Ubuntu7.0.0-14-generic. The PTS perf tip still triggers:echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governorwould likely help both by 5 to 15%. -
Mesa and Vulkan driver. Xiaomi runs a stock CachyOS Mesa (pre 26.x), MSI ran
Mesa 26.0.3-1ubuntu1from a pre-release Ubuntu 26.04. Newer is not always faster forggml-vulkan, theuma:1 fp16:1path regressed for Qwen Q8_0 TG in that window. Both used the samellama-b8933-bin-ubuntu-vulkan-x64.tar.gzbinary, so the driver stack is the variable. -
Thermals and BIOS. Xiaomi
XMAPT4B0P0A0A BIOSversus MSIE14T2IMS.20E. Different fan curves and 30W cTDP behavior matter for 100-repetition Vulkan runs (45m versus 17m). Checksensorsandsystem-logsfor throttling. The longer MSI runtime hints at thermal throttling. -
Microcode.
0x11cversus0x114is minor, but Panther Lake microcode did touch E-core scheduling for hybrid.
How it compares to the fleet
From phoronix-test-suite info pts/llama-cpp-2.5.0 (April to August, about 150 samples per config):
- CPU BLAS Qwen tg128, median 15.07 (10th 6.09, average deviation 0.69%, about 156s per run), Xiaomi 9.72, MSI 7.74
- Vulkan Qwen tg128, median 62.6 (10th 13.07, 90th 142, about 564s per run), Xiaomi 12.54, MSI 4.74
- CPU BLAS Qwen pp2048, median 97.71
- Vulkan Qwen pp2048, median 3774
The Xiaomi at 12.54 sits just under the 10th percentile for Vulkan TG, which makes sense for an iGPU. The MSI at 4.74 sits below it. For CPU, both are low in the middle of the pack because of the powersave governor. Switching to performance should move the Xiaomi closer to the 15 tok/s median.
Reproducibility
Clone the comparison:
cd ~/Code/phoronix-test-suite-master
./phoronix-test-suite clone-openbenchmarking-result 2604272-SYST-LLAMAPT89
./phoronix-test-suite result-file-to-text 2604272-SYST-LLAMAPT89 | less
./phoronix-test-suite result-file-to-text 2026-09-18-1952
./phoronix-test-suite result-file-to-text cpu-blas-qwen35-tg128
./phoronix-test-suite result-file-to-text sycl-qwen35-tg128
Merge and graph:
phoronix-test-suite merge-results 2026-09-18-1952 cpu-blas-qwen35-tg128 sycl-qwen35-tg128 2604272-SYST-LLAMAPT89
phoronix-test-suite result-file-to-html merged
phoronix-test-suite result-file-to-json merged
Inspect locally:
./phoronix-test-suite info pts/llama-cpp-2.5.0
cat ~/.phoronix-test-suite/test-results/2026-09-18-1952/composite.xml
cat ~/.phoronix-test-suite/test-results/cpu-blas-qwen35-tg128/composite.xml
cat ~/.phoronix-test-suite/test-results/sycl-qwen35-tg128/composite.xml
cat ~/.phoronix-test-suite/test-results/2604272-SYST-LLAMAPT89/composite.xml
Test binaries (Xiaomi): ~/.phoronix-test-suite/installed-tests/pts/llama-cpp-2.5.0/llama.cpp-{BLAS,VULKAN,SYCL}/build/bin/llama-bench
Model: https://huggingface.co/unsloth/Qwen3.5-9B-GGUF/resolve/3885219b.../Qwen3.5-9B-Q8_0.gguf 9527502048 bytes Q8_0
What is next
- Run pp512/1024/2048 on the Xiaomi. Expect around 350 to 400 tok/s Vulkan versus about 24 tok/s BLAS if it follows the MSI pattern (15x uplift).
- Compare SYCL and Vulkan. SYCL at 11.68 versus Vulkan at 12.54 is close, try SYCL for prompt processing as well (
SYCL -r 100 -fa 1 -sm layer). Intel oneAPI SYCL is the native Arc path. - Try the performance governor:
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governorand re-run. PTS already flags this. - Test THP on the MSI side:
echo always | sudo tee /sys/kernel/mm/transparent_hugepage/enabledwould check hypothesis 2.
Conclusion
Both machines use the same Panther Lake die. For Qwen3.5-9B-Q8_0 at Q8_0, the Xiaomi Book Pro 14 benefits from faster LPDDR5-9600, THP: always, a cooler CachyOS stack and an older Mesa. That combination makes its Arc B390 useful for text generation, about 29% above its own CPU and about 164% above the MSI Vulkan result. The MSI Vulkan TG looks like an outlier. Its BLAS is solid and its prompt processing numbers show the iGPU can be 15x the CPU when the workload fits.
Tuning matters as much as the silicon for generation latency on a thin and light.