Compact computers can now run surprisingly large language models locally. But fitting a model into memory is not the same as running it quickly, and advertised NPU TOPS are a particularly poor substitute for measured LLM throughput.
This comparison focuses on single-user local inference and coding agents, not training, synthetic TOPS, or multi-user datacenter throughput. The figures below are published third-party measurements, not tests I performed. Because hardware, models, quantization, context, backends, and configurations differ, a row from one test is not necessarily directly comparable with a row from another.
Hardware at a glance
The price column is deliberately relative, not a quotation: $ is the least expensive class; $$$$$ is the most expensive. It reflects broad complete-system purchase tiers, not exact live prices in a particular country. Memory figures describe installed or possible system memory, not necessarily memory that an inference backend can allocate to the GPU.
| System | Accelerator | Memory configuration | Relative price | Benchmark evidence |
|---|---|---|---|---|
| RTX 5060 Ti 16 GB desktop | NVIDIA Blackwell | 16 GB dedicated VRAM | $$ | Published community results |
| Sapphire EDGE AI 370 | Ryzen AI 9 HX 370 / Radeon 890M | Up to 96 GB DDR5 system RAM | $$ | Same-chip HX 370 proxy only |
| Minisforum AI X1 / X1 Pro | Ryzen AI 9 HX 370 / Radeon 890M | Up to 96 GB class, SKU-dependent | $$ | Same-chip HX 370 proxy only |
| GEEKOM A9 Max | Ryzen AI 9 HX 370 / Radeon 890M | Configuration-dependent | $$ | Same-chip HX 370 proxy only |
| Beelink SER9 | Ryzen AI 9 HX 370 / Radeon 890M | Often soldered, SKU-dependent | $$ | Same-chip HX 370 proxy only |
| Mac mini M4 | Apple M4 GPU / Metal | 16–32 GB unified, SKU-dependent | $$ | Direct Mac mini M4 results |
| Mac Studio M5 Max | Apple M5 Max GPU / Metal | 48 GB+ unified, SKU-dependent | $$$$ | Direct Mac Studio M5 Max results |
| Framework Desktop | Ryzen AI Max / Radeon 8050S or 8060S | 64–128 GB unified, SKU-dependent | $$$$ | Strix Halo family proxy |
| Minisforum MS-S1 Max | Ryzen AI Max+ 395 / Radeon 8060S | 128 GB unified configuration | $$$$ | Strix Halo family proxy |
| GMKtec EVO-X2 | Ryzen AI Max+ 395 / Radeon 8060S | 128 GB unified | $$$$ | Direct EVO-X2 tests |
| Beelink GTR9 Pro | Ryzen AI Max+ 395 / Radeon 8060S | 128 GB unified | $$$$ | Direct GTR9 Pro tests |
| BOSGAME M5 | Ryzen AI Max+ 395 / Radeon 8060S | 128 GB unified configuration | $$$$ | Strix Halo family proxy |
| HP Z2 Mini G1a | Ryzen AI Max PRO family | Up to 128 GB, configuration-dependent | $$$$$ | No matched public result used here |
| MSI PRO MAX EDGE AI+ | Ryzen AI Max+ 395 / Radeon 8060S | 128 GB unified | $$$$$ | No reproducible tok/s used here |
| NVIDIA DGX Spark | NVIDIA GB10 / Blackwell | 128 GB unified | $$$$$ | Direct DGX Spark results |
| RTX 5090 desktop | NVIDIA Blackwell | 32 GB dedicated VRAM | $$$$$ | Direct RTX 5090 results |
| iBUYPOWER Pro AI Halo (announced) | Ryzen AI Max+ PRO 495 family | 128 GB class, SKU-dependent | $$$$$ | No verified public tok/s used here |
Caution: Price symbols are coarse editorial categories. The actual cost of an HX 370 barebone changes substantially after adding 64–96 GB RAM and storage. Machines sharing a chip are grouped for architectural comparison, not credited with identical measured results.
Published generation benchmarks
tg128 generally means generation of 128 output tokens in llama-bench; pp512 is the speed of processing a 512-token prompt. Both are in tokens per second. Some sources used server-based decoding rather than tg128, as explicitly marked.
| Tested hardware | Model and quantization | Generation (tok/s) | Prompt processing (tok/s) | Backend / qualification | Source |
|---|---|---|---|---|---|
| Ryzen AI 9 HX 370 / Radeon 890M (not necessarily Sapphire) | Qwen3.6-35B-A3B Q3_K_S | 28.4 | 313.9 | LM Studio tuned Vulkan; 2,154-token prompt | HX 370 measured comparison |
| Ryzen AI 9 HX 370 / Radeon 890M (not necessarily Sapphire) | Qwen3.6-35B-A3B Q3_K_S | 31.4 | 299.1 | llama.cpp HIP; same tester | HX 370 measured comparison |
| Mac mini M4 (single 16 GB machine) | Qwen3 8B Q4_K_M | 21.2 | 227.8 (pp512) |
llama.cpp Metal, tg128 |
Mac mini reproducible test |
| Mac mini M4 (single 16 GB machine) | Qwen3 14B Q4_K_M | 11.9 | 120.7 (pp512) |
llama.cpp Metal, tg128 |
Mac mini reproducible test |
| Mac Studio M5 Max (48 GB tested) | Qwen3 8B Q4_K_M | 97.7 | 2,745 (pp512) |
llama.cpp Metal, tg128 |
M5 Max measured benchmark |
| Mac Studio M5 Max (48 GB tested) | Qwen3 32B Q4_K_M | 26.4 | 667 (pp512) |
llama.cpp Metal, tg128 |
M5 Max measured benchmark |
| Mac Studio M5 Max (48 GB tested) | Qwen3 30B-A3B Q4_K_M | 148.5 | 3,497 (pp512) |
llama.cpp Metal, tg128 |
M5 Max measured benchmark |
| Strix Halo Max+ 395, EVO-X2 / GTR9 Pro test fleet | Qwen3 30B-A3B Q4_K_M | 86.1 | 1,142 (pp512) |
Vulkan RADV; best published run | Strix Halo benchmarks |
| Strix Halo Max+ 395, EVO-X2 / GTR9 Pro test fleet | Qwen3-Coder-Next 80B-A3B Q4_K_M | 42.7 | 531 (pp512) |
Vulkan RADV, tg128 |
Strix Halo benchmarks |
| Strix Halo Max+ 395, EVO-X2 / GTR9 Pro test fleet | Llama 3.1 70B Q4_K_M | 5.1 | 81.6 (pp512) |
Vulkan RADV, tg128 |
Strix Halo benchmarks |
| Strix Halo Max+ 395, EVO-X2 / GTR9 Pro test fleet | GPT-OSS 120B Q4_K_M | 53.4 | N/A | llama-server, not tg128 |
Strix Halo project |
| DGX Spark (GB10) | Qwen3 8B (test quantization: see source) | 43.7 | 3,167 (pp512) |
llama.cpp, batch-one decode at 512 context | DGX Spark report |
| DGX Spark (GB10) | Qwen3 30B MoE (test quantization: see source) | 89.3 | 2,541 (pp512) |
llama.cpp, batch-one decode at 512 context | DGX Spark report |
| DGX Spark (GB10) | Qwen3 32B Dense (test quantization: see source) | 10.7 | 762 (pp512) |
llama.cpp, batch-one decode at 512 context | DGX Spark report |
| RTX 5060 Ti 16 GB | Qwen3 8B Q4_K_XL | 51.41 | N/A | Community benchmark compilation; verify original run | GPU benchmark dataset |
| RTX 5090 32 GB | Qwen3 30B-A3B Q4_K_M | 365.73 ± 2.06 | N/A | llama.cpp CUDA, tg128, same-card engine comparison |
RTX 5090 test |
N/A means no sufficiently documented measurement was selected, not that the machine cannot run the model. No numerical benchmark is assigned to an untested commercial chassis merely because it has the same SoC. The DGX Spark source should be consulted for the exact model files and quantizations before making a strict same-model comparison.
The one model that appears across most of these sources is Qwen3 30B-A3B, so it is the closest thing to a common yardstick:
What these measurements actually tell us
1. MoE versus dense is the decisive split
On the same Strix Halo test systems, Qwen3 30B-A3B runs at 86.1 tok/s, while Llama 3.1 70B dense runs at 5.1 tok/s. A 120B MoE can also be faster than a much smaller dense model. Total parameter count alone is a misleading performance metric: active experts, memory traffic, quantization and implementation matter.
The same pattern holds on every machine with both kinds of result:
2. The large-memory Strix Point boxes are capable, but not equivalent to Strix Halo
Sapphire EDGE AI 370, Minisforum AI X1 and GEEKOM A9 Max use Radeon 890M-class graphics, whereas Strix Halo machines use the much larger Radeon 8060S and higher-bandwidth memory. An HX 370 test measured 28–31 tok/s on a 35B-class quantized MoE, but this result came from a different HX 370 device with LPDDR5X; a Sapphire system with DDR5 SO-DIMMs may behave differently. It would be misleading to call this a measured Sapphire result.
3. The RTX 5090 is extremely fast when the model fits
The measured 365.73 tok/s for Qwen3 30B-A3B Q4_K_M on an RTX 5090 is impressive. But the card’s 32 GB VRAM constrains model choice, context length and concurrency. A slower 128 GB unified-memory box can therefore be more useful for a substantially larger model, even though it loses a same-model speed contest.
4. Apple Silicon deserves a separate look
A published M5 Max llama.cpp test reaches 148.5 tok/s on Qwen3 30B-A3B Q4_K_M, with the measured 48 GB machine also reaching 26.4 tok/s on Qwen3 32B dense. That is a strong result for a compact single-user machine. Do not automatically transfer these numbers to M4 or to every M5 Max memory/GPU configuration.
5. Coding agents care about prefill, latency and context, not just short decoding
A particularly useful long-context study on Beelink GTR9 Pro shows Qwen3 30B-class MoE decoding changing from 88.4 tok/s on an 11-token prompt to 30.1 tok/s on a 48K-token prompt. Processing that 48K-token input took approximately 189 seconds in that particular setup. An attractive tg128 result can hide very poor agent-loop latency once a repository, tool schemas and conversation history are included.
| Prompt size | Measured decode (tok/s) | Reported prefill time |
|---|---|---|
| 11 tokens | 88.4 | 0.09 s |
| 12K tokens | 58.6 | 13.0 s |
| 24K tokens | 44.5 | 43.8 s |
| 48K tokens | 30.1 | 189.0 s |
Source: Strix Halo, measured. This is a particular backend/server/model configuration, not a universal prediction for every Strix Halo deployment.
How I would benchmark a coding-agent machine
Before choosing hardware, I would run at least two models: one small dense model that fits in GPU memory and one large MoE suited to code and tool use. Record:
pp512,pp4096andpp16384— prompt-processing throughput.tg128at short context — baseline single-request decoding speed.- End-to-end latency at 32K and 64K context — time to first token, decoded tok/s and total response time.
- Peak allocated GPU/system memory — including KV cache, not just the model file.
- Power consumption and sustained behavior — short peaks can obscure thermal throttling.
For a reproducible baseline with llama.cpp:
llama-bench -m /models/model.gguf -ngl 99 -p 512 -n 128 -r 3
The command is only a starting point. Document the model hash, quantization, llama.cpp commit, backend, GPU offload settings, flash attention, context, power limit and operating system. For an actual agent, measure the HTTP server and real prompt sizes too.
Bottom line
- Budget CUDA box: RTX 5060 Ti 16 GB. Suitable for smaller models that fit in VRAM; evaluate VRAM before headline throughput.
- Affordable high-memory experimentation: Sapphire EDGE AI 370 and other HX 370 mini-PCs. They are genuine local-inference machines, but performance claims need same-device validation.
- Large local MoE models: 128 GB Ryzen AI Max+ 395 machines such as EVO-X2 and GTR9 Pro, with published results for 80B and 120B-class MoE workloads.
- Compact high-throughput Apple option: Mac Studio M5 Max, with unusually strong published single-user results on supported model sizes.
- NVIDIA software stack with 128 GB unified memory: DGX Spark, whose primary value is not necessarily the best short-prompt decode speed per price tier.
- Maximum speed for models fitting in 32 GB VRAM: RTX 5090; dramatically stronger throughput in the cited Qwen3 MoE test, but a different memory-capacity tradeoff.
The single most important purchasing question is not “How many billions of parameters can this box load?” but “How long will my actual agent take to process 32–64K of context and complete a tool-use cycle?”
Sources and reproducibility
- Strix Halo LLM Performance — EVO-X2 and GTR9 Pro
- Detailed Strix Halo benchmark matrix
- Strix Halo long-context measurements
- Ryzen AI 9 HX 370 Vulkan/HIP measurements and platform-support discussion
- Mac mini M4: reproducible local LLM benchmark
- Mac Studio M5 Max: reproducible LLM benchmark dataset
- DGX Spark llama.cpp benchmark report
- RTX 5090 Qwen3 30B-A3B single-card comparison
- RTX 5060 Ti benchmark compilation
- llama.cpp
Last reviewed: October 16, 2026. Hardware models and software backends evolve quickly; reported results are snapshots, not manufacturer guarantees.