Skip to content
All research

About 7×

the GPU matmul of a Dimensity 9500s on a Snapdragon 8 Elite

Hardware, 13 and 27 July 2026

Snapdragon 8 Elite against Dimensity 9500s.

What unprivileged code can do for AI on two flagship phone chips: NPU, CPU, GPU and on-device training.

What we found

  • The Snapdragon leads every measured workload

    About 3× on NPU int8, about 2.5× on CPU LLM throughput and about 7× on GPU matmul, 479 against 67 GFLOP/s.

  • The NPUs are real, reachable and inference-only

    On both chips the gaps are software. NPU training is architecturally impossible on either.

  • They invert on openness

    On MediaTek the GPU compute door is Vulkan and OpenCL is walled off. On Qualcomm OpenCL is public and tuned while Vulkan quantized inference is broken. The Snapdragon platform is the more open of the two: public OpenCL, public FastRPC, redistributable QNN.

  • The best recipe is opposite on each

    GPU OpenCL prefill with CPU decode on the Snapdragon. CPU prefill with GPU Vulkan decode on the Dimensity.

  • Thermal headroom beats a performance mode

    Re-benchmarked in HyperOS Ultimate mode while charging, the Dimensity phone gained modestly on the CPU, prefill 74 to 79 tok/s, but GPU matmul fell from 67 to 45 GFLOP/s over a 17-minute back-to-back suite.

The results

The Snapdragon leads every test

NPU, CPU and GPU, with the same workloads on both chips. Each row has its own scale.

Snapdragon 8 EliteDimensity 9500s

  • NPU int8, 8-layer FC

    GOPS

    About 3×

    8 Elite 4,307
    D9500s 1,100 to 1,470
  • Gemma 3 1B prefill on the CPU

    tok/s

    About 2.6×

    8 Elite 171 to 173
    D9500s 58 to 74
  • Gemma 3 1B decode on the CPU

    tok/s

    About 2.4×

    8 Elite 62 to 64
    D9500s 22 to 31
  • Gemma 3 1B prefill on the GPU

    tok/s

    About 18×

    8 Elite 717 to 723
    D9500s about 39
  • Gemma 3 1B decode on the GPU

    tok/s

    About 1.6×

    8 Elite 41.5 to 42.5
    D9500s about 27
  • Matmul on the GPU, 4096³ f32

    GFLOP/s

    About 7×

    8 Elite 479
    D9500s 67
  • Transformer-layer training step on the GPU

    GFLOP/s

    About 8×

    8 Elite 403
    D9500s about 50

Where a result is a range, from benchmarks run twice, the bar is solid to the low end and faint to the high end. Multiples use the middle of each range.

What each GPU adds over its own CPU

This compares each chip with itself, so it shows how much the GPU is worth on that phone.

Snapdragon 8 EliteDimensity 9500s

  • Matmul, 4096³ f32

    GPU as a multiple of the CPU

    8 Elite 6.9×
    D9500s 1.69×
  • Transformer-layer training step

    GPU as a multiple of the CPU

    8 Elite 6.5×
    D9500s 1.1× to 1.4×

The best recipe is opposite on each chip

Which processor to use for each job, for Gemma 3 1B in tokens per second.

Snapdragon 8 Elite

Prefill

  • GPU, OpenCL717 to 723, the pick
  • CPU171 to 173

Decode

  • GPU, OpenCL41.5 to 42.5
  • CPU62 to 64, the pick

Dimensity 9500s

Prefill

  • GPU, Vulkanabout 39
  • CPU58 to 74, the pick

Decode

  • GPU, Vulkanabout 27, the pick
  • CPU22 to 31
Every test, side by sideThe full comparison as a table, including APIs and trainingShow
TestSnapdragon 8 EliteDimensity 9500s
NPUHexagon HTP V79MDLA (NPU 890)
NPU runtime accessQNN 2.48 from Maven Central and public FastRPC, no SDK gateNeuroPilot 8.2.26, preinstalled as public system libraries
NPU int8, 8-layer FC (32×2048×2048)4,307 GOPS, 0.50 ms1,100 to 1,470 GOPS, 1.46 ms
NPU fp16 inference1,089 GFLOP/sRuns, not quantified
NPU trainingArchitecturally impossibleArchitecturally impossible
CPU2× Oryon at 4.09 GHz and 6× at 2.78 GHz1× X925 at 3.73 GHz, 3× X4 and 4× A720
Gemma 3 1B Q4, CPU prefill and decode, 8 threads171 to 173 and 62 to 64 tok/s58 to 74 and 22 to 31 tok/s
GPUAdreno 830Immortalis-G925 MC11
Working GPU compute APIOpenCL (public library; Vulkan broken for quantized inference)Vulkan (OpenCL blocked by namespace)
Gemma 3 1B Q4, GPU prefill and decode717 to 723 and 41.5 to 42.5 tok/s, OpenCLAbout 39 and about 27 tok/s, Vulkan
Matmul, 4096³ f32479 GFLOP/s, 6.9× its CPU67 GFLOP/s, 1.69× its CPU (coopmat and f32 only)
Transformer-layer training step, GPU and CPU403 and 62.5 GFLOP/s, 6.5×, OpenCLAbout 50 and 37 GFLOP/s, 1.1× to 1.4×
GPU training (ggml MLP and AdamW)Vulkan, no flags, converges identically to CPUVulkan with GGML_VK_DISABLE_COOPMAT=1, converges worse
Best local LLM recipeGPU OpenCL prefill and CPU decodeCPU prefill and GPU Vulkan decode

Ranges are from benchmarks run twice. LLM throughput is llama-bench with a 128-token prompt and 64 generated tokens.

How we ran it

Phones
Dimensity 9500s (mt6991) in a POCO X8 Pro Max. Snapdragon 8 Elite (SM8750) in a QRD reference device on Qualcomm Device Cloud.
NPU workload
8 chained int8 fully connected layers, M=32 and K=N=2048, plus a single fp16 layer.
LLM workload
llama.cpp, Gemma 3 1B Q4_K_M.
GPU workload
ggml f32 mul_mat at 1024, 2048 and 4096 cubed.
Training
The same 385-parameter MLP, AdamW, MSE, 60 epochs.

Limits

Access paths
A retail phone through Termux against a QRD through adb and the NDK. Both execute as unprivileged user code; the QDC shell happens to be root, but nothing measured uses root-only facilities.
NPU drivers
MediaTek's Neuron Adapter is called raw. Qualcomm's QNN is driven through ONNX Runtime's QNN provider with CPU fallback disabled, because raw QNN graph composition needs gated SDK headers. Both measure a quantized graph fully resident on the NPU.
llama.cpp builds
MediaTek numbers were taken on 2026-07-13 on the then-current llama.cpp, Snapdragon numbers on commit 8e8681e on 2026-07-27. Treat small differences between the chips accordingly.
Thermals
The phone was benched warm and cold, and the ranges are reported. The QDC QRD idles cool and varied under 4% across runs.

Sources

Keep reading

All research
  • 9 of 9

    models were fastest with NPU prefill

    OpenWeights, 2 to 4 November 2026

    Prefill and decode on CPU, GPU and NPU

    Which processor should prefill and which should decode: nine models, every pairing, on a Snapdragon 8 Elite Gen 5.

  • 42%

    of 24 real tasks with Qwen3.6 on an RTX 4090, against 92% on Copilot Pro+ Auto

    GGUF, October 2026

    When is local Copilot worth it?

    The same Copilot CLI agent on the same real tasks: open-weight GGUF models on an RTX 4090 and a MacBook Air M5, against hosted Copilot.

  • 8 agents

    at a 4.9 s wait per turn on vLLM, with no errors. At 16, waits reach 16.5 s

    Hardware, 23 and 24 September 2026

    How many coding agents can one RTX 4090 serve?

    Qwen3.8-27B on one rented RTX 4090, through five engine setups, rising load and real coding agents.