ZINC

Benchmarks

Choose a platform and backend, then compare ZINC with llama.cpp on the same GPU, model, prompts, and reusable-server protocol.

Backend runs 5
Unique Models 6
Comparisons 25
Updated Sep 25
01

Choose a platform

Choose a platform and backend. Each result uses the same model file and reusable-server protocol.

AMD Radeon · AMD RDNA bench node

ROCm backend

Radeon AI PRO R9700 · 32 GB VRAM · 640 GB/s · 3 measured · 1 warmup

Exact configuration
GPU
Radeon AI PRO R9700
Chip
AMD Radeon AI PRO R9700
Memory
32 GB VRAM · 640 GB/s
OS
Ubuntu Linux
ZINC backend
ROCM
llama.cpp backend
ROCm (ROCm0)
Prompt parity
24/24 rows read the same prompt tokens in both engines
Build
zig build -Doptimize=ReleaseFast -Dbackend=rocm
ZINC commit
6e6854251118
llama.cpp build
0.4.0-dev
Artifact
Sep 25, 2026, 12:13 PM

Methodology & reproducibility

  • Hardware: one AMD Radeon AI PRO R9700 benchmark node with 32 GB VRAM and 640 GB/s memory bandwidth. ZINC and llama.cpp run on the same Ubuntu host and use the same GGUF file for each model.
  • ZINC path: sync the current source tree to the RDNA node, build ReleaseFast with the selected rocm backend, then measure generation through one reusable single-slot ZINC server per model.
  • ZINC RDNA backend: rocm.
  • Baseline backend: llama.cpp ROCm (ROCm0) on the same node and the same model file.
  • Baseline path: launch llama.cpp against the same model file, preferring one reusable single-slot llama-server per model across the full scenario matrix and falling back to llama-cli when the server path is unavailable.
  • Scenarios: Quick Chat, Coding Review, Incident Context, and Long Coding Draft. The prompts are real-world chat, code-review, support-context, and coding-plan workloads instead of synthetic factual completions.
  • Statistics: one warmup pass is discarded, then 3 measured runs are collected. Published prefill, decode, end-to-end throughput, and latency values are medians.
  • Execution order: the harness records the full ZINC scenario matrix before starting the llama.cpp baseline phase, so only one inference engine owns the GPU during measurement.
  • Power policy: before either engine starts, the harness selects PCIe ASPM performance mode and locks the discrete AMD GPU's memory DPM policy high to prevent idle-clock drift between runs.
  • Run hygiene: published RDNA runs assume a clean node with no competing ZINC, llama.cpp, or other GPU workloads.
Speculative decoding (MTP) Qwen 3.8 27B Dense Q4_K_M runs NextN self-speculation, drafting tokens the full model then verifies. llama.cpp can speculate with the same block by exporting it as a separate draft model, which these runs do not do — so the figures default to both engines without it.
Fastest 99.3 tok/s Gemma 4 26B-A4B MoE Q4K M
Decode 63.6 tok/s average
Overall 112% prefill + decode vs llama.cpp
02

Choose a workload

Prefill and decode are shown separately below.

Quick Chat

6 rows 815.3 tok/s prefill 68.8 tok/s decode 130% overall
Decode 68.8 tok/s 135% decode ratio
Prefill 815.3 tok/s 180% prefill ratio · 56 prompt tok
Fastest Gemma 4 26B-A4B MoE Q4K M 99.3 tok/s
Overall 130% best row: Qwen 3.8 27B Dense Q4K M

Models

ZINC llama.cpp
Gemma 4 26B-A4B MoE Q4K M 60p · 96out Compared
Prefill 188%
ZINC 1360.5 tok/s
llama 722.3 tok/s
Decode 128%
ZINC 99.3 tok/s
llama 77.4 tok/s
131% overall
Gemma 4 31B Q4K M 60p · 96out Compared
Prefill 200%
ZINC 589.7 tok/s
llama 294.6 tok/s
Decode 104%
ZINC 28.5 tok/s
llama 27.4 tok/s
107% overall
Muse Glimmer 30B Q4K M 67p · 96out Compared
Prefill 176%
ZINC 676.2 tok/s
llama 383.9 tok/s
Decode 109%
ZINC 33.3 tok/s
llama 30.7 tok/s
111% overall
Qwen 3.5 9B Q4K M 58p · 96out Compared
Prefill 184%
ZINC 1226.5 tok/s
llama 668.3 tok/s
Decode 119%
ZINC 90.9 tok/s
llama 76.4 tok/s
122% overall
Qwen 3.6 35B A3B UD Q4K XL 35p · 96out Compared
Prefill 107%
ZINC 514.5 tok/s
llama 481.8 tok/s
Decode 128%
ZINC 96.8 tok/s
llama 75.3 tok/s
127% overall
Qwen 3.8 27B Dense Q4K M 58p · 96out Compared
Prefill 225%
ZINC 524.4 tok/s
llama 232.8 tok/s
Decode 113%
ZINC 32.8 tok/s
llama 28.9 tok/s
116% overall
Details
Gemma 4 26B-A4B MoE Q4K M 60 tok prompt · 96 tok output
Compared
Prefill 188%
ZINC 1360.5 tok/s
llama 722.3 tok/s
Decode 128%
ZINC 99.3 tok/s
llama 77.4 tok/s
Overall 131%
ZINC 154.3 tok/s
llama 117.9 tok/s
Prompt+decode. Cold latency: ZINC 1565 ms · llama.cpp 1759 ms
Gemma 4 31B Q4K M 60 tok prompt · 96 tok output
Compared
Prefill 200%
ZINC 589.7 tok/s
llama 294.6 tok/s
Decode 104%
ZINC 28.5 tok/s
llama 27.4 tok/s
Overall 107%
ZINC 45.0 tok/s
llama 42.1 tok/s
Prompt+decode. Cold latency: ZINC 3801 ms · llama.cpp 4146 ms
Muse Glimmer 30B Q4K M 67 tok prompt · 96 tok output
Compared
Prefill 176%
ZINC 676.2 tok/s
llama 383.9 tok/s
Decode 109%
ZINC 33.3 tok/s
llama 30.7 tok/s
Overall 111%
ZINC 54.7 tok/s
llama 49.4 tok/s
Prompt+decode. Cold latency: ZINC 3397 ms · llama.cpp 3676 ms
Qwen 3.5 9B Q4K M 58 tok prompt · 96 tok output
Compared
Prefill 184%
ZINC 1226.5 tok/s
llama 668.3 tok/s
Decode 119%
ZINC 90.9 tok/s
llama 76.4 tok/s
Overall 122%
ZINC 139.5 tok/s
llama 114.6 tok/s
Prompt+decode. Cold latency: ZINC 1376 ms · llama.cpp 1709 ms
Qwen 3.6 35B A3B UD Q4K XL 35 tok prompt · 96 tok output
Compared
Prefill 107%
ZINC 514.5 tok/s
llama 481.8 tok/s
Decode 128%
ZINC 96.8 tok/s
llama 75.3 tok/s
Overall 127%
ZINC 123.6 tok/s
llama 97.3 tok/s
Prompt+decode. Cold latency: ZINC 1577 ms · llama.cpp 1827 ms
Qwen 3.8 27B Dense Q4K M 58 tok prompt · 96 tok output
Compared
Prefill 225%
ZINC 524.4 tok/s
llama 232.8 tok/s
Decode 113%
ZINC 32.8 tok/s
llama 28.9 tok/s
Overall 116%
ZINC 50.1 tok/s
llama 43.1 tok/s
Prompt+decode. Cold latency: ZINC 1872 ms · llama.cpp 3742 ms
Raw data
Model Prefill Decode Overall
Gemma 4 26B-A4B MoE Q4K M 60 tok prompt · 96 tok output · 3 runs · Compared
Z
1360.5 tok/s 44.1 ms
L
722.3 tok/s 83.1 ms
Z
99.3 tok/s 10.1 ms/tok
L
77.4 tok/s 12.9 ms/tok
Z
154.3 tok/s prompt+decode
L
117.9 tok/s prompt+decode
Gemma 4 31B Q4K M 60 tok prompt · 96 tok output · 3 runs · Compared
Z
589.7 tok/s 101.7 ms
L
294.6 tok/s 203.7 ms
Z
28.5 tok/s 35.1 ms/tok
L
27.4 tok/s 36.5 ms/tok
Z
45.0 tok/s prompt+decode
L
42.1 tok/s prompt+decode
Muse Glimmer 30B Q4K M 67 tok prompt · 96 tok output · 3 runs · Compared
Z
676.2 tok/s 99.1 ms
L
383.9 tok/s 174.5 ms
Z
33.3 tok/s 30.0 ms/tok
L
30.7 tok/s 32.6 ms/tok
Z
54.7 tok/s prompt+decode
L
49.4 tok/s prompt+decode
Qwen 3.5 9B Q4K M 58 tok prompt · 96 tok output · 3 runs · Compared
Z
1226.5 tok/s 47.3 ms
L
668.3 tok/s 86.8 ms
Z
90.9 tok/s 11.0 ms/tok
L
76.4 tok/s 13.1 ms/tok
Z
139.5 tok/s prompt+decode
L
114.6 tok/s prompt+decode
Qwen 3.6 35B A3B UD Q4K XL 35 tok prompt · 96 tok output · 3 runs · Compared
Z
514.5 tok/s 68.0 ms
L
481.8 tok/s 72.7 ms
Z
96.8 tok/s 10.3 ms/tok
L
75.3 tok/s 13.3 ms/tok
Z
123.6 tok/s prompt+decode
L
97.3 tok/s prompt+decode
Qwen 3.8 27B Dense Q4K M 58 tok prompt · 96 tok output · 3 runs · Compared
Z
524.4 tok/s 110.6 ms
L
232.8 tok/s 249.2 ms
Z
32.8 tok/s 15.7 ms/tok
L
28.9 tok/s 34.6 ms/tok
Z
50.1 tok/s prompt+decode
L
43.1 tok/s prompt+decode
Methodology ZINC server vs llama.cpp server on the same RDNA node · Four-scenario matrix with same-file baselines
3 measured · 1 warmup
  • Hardware: one AMD Radeon AI PRO R9700 benchmark node with 32 GB VRAM and 640 GB/s memory bandwidth. ZINC and llama.cpp run on the same Ubuntu host and use the same GGUF file for each model.
  • ZINC path: sync the current source tree to the RDNA node, build ReleaseFast with the selected rocm backend, then measure generation through one reusable single-slot ZINC server per model.
  • ZINC RDNA backend: rocm.
  • Baseline backend: llama.cpp ROCm (ROCm0) on the same node and the same model file.
  • Baseline path: launch llama.cpp against the same model file, preferring one reusable single-slot llama-server per model across the full scenario matrix and falling back to llama-cli when the server path is unavailable.
  • Scenarios: Quick Chat, Coding Review, Incident Context, and Long Coding Draft. The prompts are real-world chat, code-review, support-context, and coding-plan workloads instead of synthetic factual completions.
  • Statistics: one warmup pass is discarded, then 3 measured runs are collected. Published prefill, decode, end-to-end throughput, and latency values are medians.
  • Execution order: the harness records the full ZINC scenario matrix before starting the llama.cpp baseline phase, so only one inference engine owns the GPU during measurement.
  • Power policy: before either engine starts, the harness selects PCIe ASPM performance mode and locks the discrete AMD GPU's memory DPM policy high to prevent idle-clock drift between runs.
  • Run hygiene: published RDNA runs assume a clean node with no competing ZINC, llama.cpp, or other GPU workloads.