ZINC
Benchmarks
Choose a platform and backend, then compare ZINC with llama.cpp on the same GPU, model, prompts, and reusable-server protocol.
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.
Choose a workload
Prefill and decode are shown separately below.
Quick Chat
Models
Details
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 MTP 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 |
Coding Review
Models
Details
Raw data
| Model | Prefill | Decode | Overall |
|---|---|---|---|
| Gemma 4 26B-A4B MoE Q4K M 203 tok prompt · 160 tok output · 3 runs · Compared | Z 3119.7 tok/s 65.1 ms L 1755.7 tok/s 115.6 ms | Z 98.0 tok/s 10.2 ms/tok L 78.7 tok/s 12.7 ms/tok | Z 213.8 tok/s prompt+decode L 168.9 tok/s prompt+decode |
| Gemma 4 31B Q4K M 203 tok prompt · 160 tok output · 3 runs · Compared | Z 831.0 tok/s 244.3 ms L 555.0 tok/s 365.8 ms | Z 27.9 tok/s 35.9 ms/tok L 27.2 tok/s 36.8 ms/tok | Z 60.6 tok/s prompt+decode L 58.1 tok/s prompt+decode |
| Muse Glimmer 30B Q4K M 179 tok prompt · 160 tok output · 3 runs · Compared | Z 811.5 tok/s 220.6 ms L 638.3 tok/s 280.4 ms | Z 33.0 tok/s 30.3 ms/tok L 30.7 tok/s 32.6 ms/tok | Z 66.9 tok/s prompt+decode L 61.7 tok/s prompt+decode |
| Qwen 3.5 9B Q4K M 183 tok prompt · 160 tok output · 3 runs · Compared | Z 1992.0 tok/s 91.9 ms L 1453.4 tok/s 125.9 ms | Z 89.9 tok/s 11.1 ms/tok L 76.6 tok/s 13.1 ms/tok | Z 183.3 tok/s prompt+decode L 154.9 tok/s prompt+decode |
| Qwen 3.6 35B A3B UD Q4K XL 153 tok prompt · 160 tok output · 3 runs · Compared | Z 1565.4 tok/s 97.7 ms L 1498.9 tok/s 102.1 ms | Z 96.3 tok/s 10.4 ms/tok L 75.8 tok/s 13.2 ms/tok | Z 177.9 tok/s prompt+decode L 141.4 tok/s prompt+decode |
| Qwen 3.8 27B Dense Q4K M 183 tok prompt · 160 tok output · 3 runs · Compared | Z 632.9 tok/s 289.2 ms L 474.0 tok/s 386.1 ms | Z 32.4 tok/s MTP 13.7 ms/tok L 28.8 tok/s 34.7 ms/tok | Z 65.4 tok/s prompt+decode L 57.8 tok/s prompt+decode |
Incident Context
Models
Details
Raw data
| Model | Prefill | Decode | Overall |
|---|---|---|---|
| Gemma 4 26B-A4B MoE Q4K M 353 tok prompt · 128 tok output · 3 runs · Compared | Z 3901.9 tok/s 90.5 ms L 2379.5 tok/s 148.3 ms | Z 96.7 tok/s 10.3 ms/tok L 79.0 tok/s 12.7 ms/tok | Z 340.1 tok/s prompt+decode L 271.9 tok/s prompt+decode |
| Gemma 4 31B Q4K M 353 tok prompt · 128 tok output · 3 runs · Compared | Z 789.0 tok/s 447.4 ms L 660.8 tok/s 534.2 ms | Z 27.4 tok/s 36.4 ms/tok L 27.2 tok/s 36.8 ms/tok | Z 94.1 tok/s prompt+decode L 91.7 tok/s prompt+decode |
| Muse Glimmer 30B Q4K M 326 tok prompt · 128 tok output · 3 runs · Compared | Z 963.4 tok/s 338.4 ms L 809.7 tok/s 402.6 ms | Z 33.0 tok/s 30.3 ms/tok L 30.7 tok/s 32.6 ms/tok | Z 107.5 tok/s prompt+decode L 99.3 tok/s prompt+decode |
| Qwen 3.5 9B Q4K M 349 tok prompt · 128 tok output · 3 runs · Compared | Z 2445.3 tok/s 142.7 ms L 2124.6 tok/s 164.3 ms | Z 89.4 tok/s 11.2 ms/tok L 76.7 tok/s 13.0 ms/tok | Z 302.9 tok/s prompt+decode L 260.3 tok/s prompt+decode |
| Qwen 3.6 35B A3B UD Q4K XL 315 tok prompt · 128 tok output · 3 runs · Compared | Z 2294.8 tok/s 137.3 ms L 2187.1 tok/s 144.0 ms | Z 95.7 tok/s 10.4 ms/tok L 76.3 tok/s 13.1 ms/tok | Z 300.4 tok/s prompt+decode L 243.2 tok/s prompt+decode |
| Qwen 3.8 27B Dense Q4K M 349 tok prompt · 128 tok output · 3 runs · Compared | Z 743.0 tok/s 469.7 ms L 680.8 tok/s 512.6 ms | Z 32.4 tok/s MTP 14.3 ms/tok L 28.9 tok/s 34.6 ms/tok | Z 108.2 tok/s prompt+decode L 96.6 tok/s prompt+decode |
Long Coding Draft
Models
Details
Raw data
| Model | Prefill | Decode | Overall |
|---|---|---|---|
| Gemma 4 26B-A4B MoE Q4K M 81 tok prompt · 256 tok output · 3 runs · Compared | Z 1643.2 tok/s 49.3 ms L 931.5 tok/s 87.0 ms | Z 98.6 tok/s 10.1 ms/tok L 79.3 tok/s 12.6 ms/tok | Z 127.4 tok/s prompt+decode L 101.7 tok/s prompt+decode |
| Gemma 4 31B Q4K M 81 tok prompt · 256 tok output · 3 runs · Compared | Z 561.4 tok/s 144.3 ms L 327.2 tok/s 247.5 ms | Z 28.0 tok/s 35.7 ms/tok L 27.3 tok/s 36.6 ms/tok | Z 36.3 tok/s prompt+decode L 35.1 tok/s prompt+decode |
| Muse Glimmer 30B Q4K M 89 tok prompt · 256 tok output · 3 runs · Compared | Z 713.4 tok/s 124.8 ms L 465.1 tok/s 191.4 ms | Z 32.9 tok/s 30.4 ms/tok L 30.7 tok/s 32.6 ms/tok | Z 43.7 tok/s prompt+decode L 40.5 tok/s prompt+decode |
| Qwen 3.5 9B Q4K M 80 tok prompt · 256 tok output · 3 runs · Compared | Z 1411.0 tok/s 56.7 ms L 837.5 tok/s 95.5 ms | Z 89.7 tok/s 11.1 ms/tok L 77.1 tok/s 13.0 ms/tok | Z 115.5 tok/s prompt+decode L 98.3 tok/s prompt+decode |
| Qwen 3.6 35B A3B UD Q4K XL 63 tok prompt · 256 tok output · 3 runs · Compared | Z 868.7 tok/s 72.5 ms L 802.3 tok/s 78.5 ms | Z 96.3 tok/s 10.4 ms/tok L 76.2 tok/s 13.1 ms/tok | Z 116.8 tok/s prompt+decode L 92.8 tok/s prompt+decode |
| Qwen 3.8 27B Dense Q4K M 80 tok prompt · 256 tok output · 3 runs · Compared | Z 551.0 tok/s 145.2 ms L 274.7 tok/s 291.3 ms | Z 32.5 tok/s MTP 14.1 ms/tok L 28.9 tok/s 34.6 ms/tok | Z 41.6 tok/s prompt+decode L 36.7 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.
AMD Radeon · AMD RDNA bench node
Vulkan 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
- Vulkan (RADV, coop_matrix)
- llama.cpp backend
- Vulkan (Vulkan0)
- Prompt parity
- 24/24 rows read the same prompt tokens in both engines
- Build
zig build -Doptimize=ReleaseFast -Dbackend=vulkan- ZINC commit
- 44d35047c780
- llama.cpp build
- 0.4.0-dev
- Artifact
- Sep 24, 2026, 1:49 AM
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 vulkan backend, then measure generation through one reusable single-slot ZINC server per model.
- ZINC RDNA backend: vulkan.
- Baseline backend: llama.cpp Vulkan (Vulkan0) 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.
Choose a workload
Prefill and decode are shown separately below.
Quick Chat
Models
Details
Raw data
| Model | Prefill | Decode | Overall |
|---|---|---|---|
| Gemma 4 26B-A4B MoE Q4K M 60 tok prompt · 96 tok output · 3 runs · Compared | Z 1102.5 tok/s 54.4 ms L 276.9 tok/s 216.7 ms | Z 139.6 tok/s 7.2 ms/tok L 89.4 tok/s 11.2 ms/tok | Z 210.3 tok/s prompt+decode L 120.9 tok/s prompt+decode |
| Gemma 4 31B Q4K M 60 tok prompt · 96 tok output · 3 runs · Compared | Z 330.3 tok/s 181.6 ms L 145.3 tok/s 412.9 ms | Z 31.1 tok/s 32.2 ms/tok L 28.7 tok/s 34.8 ms/tok | Z 47.7 tok/s prompt+decode L 41.6 tok/s prompt+decode |
| Muse Glimmer 30B Q4K M 67 tok prompt · 96 tok output · 3 runs · Compared | Z 275.4 tok/s 243.3 ms L 186.2 tok/s 359.9 ms | Z 36.0 tok/s 27.7 ms/tok L 32.8 tok/s 30.5 ms/tok | Z 56.1 tok/s prompt+decode L 49.6 tok/s prompt+decode |
| Qwen 3.5 9B Q4K M 58 tok prompt · 96 tok output · 3 runs · Compared | Z 728.8 tok/s 79.6 ms L 283.5 tok/s 204.6 ms | Z 101.9 tok/s 9.8 ms/tok L 77.7 tok/s 12.9 ms/tok | Z 150.8 tok/s prompt+decode L 106.9 tok/s prompt+decode |
| Qwen 3.6 35B A3B UD Q4K XL 35 tok prompt · 96 tok output · 3 runs · Compared | Z 335.1 tok/s 104.5 ms L 229.1 tok/s 152.8 ms | Z 153.4 tok/s 6.5 ms/tok L 78.2 tok/s 12.8 ms/tok | Z 179.3 tok/s prompt+decode L 94.9 tok/s prompt+decode |
| Qwen 3.8 27B Dense Q4K M 58 tok prompt · 96 tok output · 3 runs · Compared | Z 278.8 tok/s 208.1 ms L 102.6 tok/s 565.5 ms | Z 34.3 tok/s MTP 16.9 ms/tok L 30.0 tok/s 33.3 ms/tok | Z 51.1 tok/s prompt+decode L 40.9 tok/s prompt+decode |
Coding Review
Models
Details
Raw data
| Model | Prefill | Decode | Overall |
|---|---|---|---|
| Gemma 4 26B-A4B MoE Q4K M 203 tok prompt · 160 tok output · 3 runs · Compared | Z 1731.9 tok/s 117.2 ms L 913.4 tok/s 222.3 ms | Z 138.6 tok/s 7.2 ms/tok L 93.9 tok/s 10.7 ms/tok | Z 285.4 tok/s prompt+decode L 188.4 tok/s prompt+decode |
| Gemma 4 31B Q4K M 203 tok prompt · 160 tok output · 3 runs · Compared | Z 312.1 tok/s 650.4 ms L 271.7 tok/s 747.0 ms | Z 30.7 tok/s 32.6 ms/tok L 28.5 tok/s 35.1 ms/tok | Z 61.9 tok/s prompt+decode L 57.0 tok/s prompt+decode |
| Muse Glimmer 30B Q4K M 179 tok prompt · 160 tok output · 3 runs · Compared | Z 518.6 tok/s 345.2 ms L 307.9 tok/s 581.4 ms | Z 35.8 tok/s 28.0 ms/tok L 32.7 tok/s 30.6 ms/tok | Z 70.4 tok/s prompt+decode L 62.0 tok/s prompt+decode |
| Qwen 3.5 9B Q4K M 183 tok prompt · 160 tok output · 3 runs · Compared | Z 1119.0 tok/s 163.5 ms L 740.8 tok/s 247.0 ms | Z 101.3 tok/s 9.9 ms/tok L 79.9 tok/s 12.5 ms/tok | Z 196.9 tok/s prompt+decode L 152.5 tok/s prompt+decode |
| Qwen 3.6 35B A3B UD Q4K XL 153 tok prompt · 160 tok output · 3 runs · Compared | Z 961.8 tok/s 159.1 ms L 619.8 tok/s 246.8 ms | Z 153.1 tok/s 6.5 ms/tok L 79.0 tok/s 12.7 ms/tok | Z 259.9 tok/s prompt+decode L 137.7 tok/s prompt+decode |
| Qwen 3.8 27B Dense Q4K M 183 tok prompt · 160 tok output · 3 runs · Compared | Z 443.6 tok/s 412.5 ms L 249.0 tok/s 735.0 ms | Z 34.0 tok/s MTP 15.4 ms/tok L 30.0 tok/s 33.3 ms/tok | Z 66.8 tok/s prompt+decode L 56.6 tok/s prompt+decode |
Incident Context
Models
Details
Raw data
| Model | Prefill | Decode | Overall |
|---|---|---|---|
| Gemma 4 26B-A4B MoE Q4K M 353 tok prompt · 128 tok output · 3 runs · Compared | Z 1894.5 tok/s 186.3 ms L 1153.5 tok/s 306.0 ms | Z 136.2 tok/s 7.3 ms/tok L 92.6 tok/s 10.8 ms/tok | Z 427.2 tok/s prompt+decode L 284.9 tok/s prompt+decode |
| Gemma 4 31B Q4K M 353 tok prompt · 128 tok output · 3 runs · Compared | Z 346.8 tok/s 1018.0 ms L 290.1 tok/s 1216.7 ms | Z 30.5 tok/s 32.8 ms/tok L 28.3 tok/s 35.4 ms/tok | Z 92.2 tok/s prompt+decode L 83.8 tok/s prompt+decode |
| Muse Glimmer 30B Q4K M 326 tok prompt · 128 tok output · 3 runs · Compared | Z 489.2 tok/s 666.3 ms L 389.7 tok/s 836.6 ms | Z 35.7 tok/s 28.0 ms/tok L 32.7 tok/s 30.6 ms/tok | Z 106.9 tok/s prompt+decode L 95.6 tok/s prompt+decode |
| Qwen 3.5 9B Q4K M 349 tok prompt · 128 tok output · 3 runs · Compared | Z 1478.0 tok/s 236.1 ms L 1008.7 tok/s 346.0 ms | Z 101.1 tok/s 9.9 ms/tok L 79.7 tok/s 12.5 ms/tok | Z 317.5 tok/s prompt+decode L 244.4 tok/s prompt+decode |
| Qwen 3.6 35B A3B UD Q4K XL 315 tok prompt · 128 tok output · 3 runs · Compared | Z 1516.6 tok/s 207.7 ms L 959.8 tok/s 328.2 ms | Z 152.7 tok/s 6.5 ms/tok L 76.9 tok/s 13.0 ms/tok | Z 423.6 tok/s prompt+decode L 222.4 tok/s prompt+decode |
| Qwen 3.8 27B Dense Q4K M 349 tok prompt · 128 tok output · 3 runs · Compared | Z 467.9 tok/s 745.8 ms L 330.0 tok/s 1057.5 ms | Z 34.0 tok/s MTP 15.2 ms/tok L 30.0 tok/s 33.3 ms/tok | Z 106.0 tok/s prompt+decode L 89.7 tok/s prompt+decode |
Long Coding Draft
Models
Details
Raw data
| Model | Prefill | Decode | Overall |
|---|---|---|---|
| Gemma 4 26B-A4B MoE Q4K M 81 tok prompt · 256 tok output · 3 runs · Compared | Z 1281.1 tok/s 63.2 ms L 453.8 tok/s 178.5 ms | Z 138.9 tok/s 7.2 ms/tok L 95.6 tok/s 10.5 ms/tok | Z 176.8 tok/s prompt+decode L 118.0 tok/s prompt+decode |
| Gemma 4 31B Q4K M 81 tok prompt · 256 tok output · 3 runs · Compared | Z 328.1 tok/s 246.8 ms L 134.7 tok/s 601.4 ms | Z 30.7 tok/s 32.6 ms/tok L 28.5 tok/s 35.0 ms/tok | Z 39.3 tok/s prompt+decode L 35.2 tok/s prompt+decode |
| Muse Glimmer 30B Q4K M 89 tok prompt · 256 tok output · 3 runs · Compared | Z 342.9 tok/s 259.6 ms L 223.7 tok/s 397.8 ms | Z 35.7 tok/s 28.0 ms/tok L 32.8 tok/s 30.5 ms/tok | Z 46.4 tok/s prompt+decode L 42.0 tok/s prompt+decode |
| Qwen 3.5 9B Q4K M 80 tok prompt · 256 tok output · 3 runs · Compared | Z 674.0 tok/s 118.7 ms L 386.6 tok/s 206.9 ms | Z 101.0 tok/s 9.9 ms/tok L 79.7 tok/s 12.5 ms/tok | Z 126.7 tok/s prompt+decode L 98.3 tok/s prompt+decode |
| Qwen 3.6 35B A3B UD Q4K XL 63 tok prompt · 256 tok output · 3 runs · Compared | Z 536.0 tok/s 117.5 ms L 297.6 tok/s 211.7 ms | Z 153.6 tok/s 6.5 ms/tok L 77.8 tok/s 12.9 ms/tok | Z 178.8 tok/s prompt+decode L 91.1 tok/s prompt+decode |
| Qwen 3.8 27B Dense Q4K M 80 tok prompt · 256 tok output · 3 runs · Compared | Z 250.4 tok/s 319.5 ms L 129.5 tok/s 617.8 ms | Z 33.9 tok/s MTP 15.5 ms/tok L 30.0 tok/s 33.3 ms/tok | Z 42.6 tok/s prompt+decode L 36.8 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 vulkan backend, then measure generation through one reusable single-slot ZINC server per model.
- ZINC RDNA backend: vulkan.
- Baseline backend: llama.cpp Vulkan (Vulkan0) 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.
Intel Arc · Intel Arc bench node
Vulkan backend
Intel(R) Graphics (BMG G31) · n/a · 3 measured · 1 warmup
Exact configuration
- GPU
- Intel(R) Graphics (BMG G31)
- Chip
- Intel Arc Pro B70 / BMG G31
- Memory
- n/a
- OS
- Ubuntu Linux
- ZINC backend
- Vulkan
- llama.cpp backend
- Vulkan (--device Vulkan0)
- Prompt parity
- 6/16 rows read the same prompt tokens in both engines
- Build
zig build -Doptimize=ReleaseFast- ZINC commit
- n/a
- llama.cpp build
- 8863
- Artifact
- Jul 7, 2026, 8:45 PM
Methodology & reproducibility
- Hardware: one Intel Arc Vulkan benchmark node. ZINC and llama.cpp run on the same Ubuntu host and use the same GGUF file for each model.
- Baseline backend: llama.cpp Vulkan (--device Vulkan0) on the same node — the same backend as ZINC.
- ZINC path: optionally sync the current source tree to the Intel node, build with zig build -Doptimize=ReleaseFast, then measure generation through the ZINC CLI.
- Baseline path: launch llama.cpp against the same model file, preferring one reusable llama-server per model across the full scenario matrix and falling back to llama-cli when the server path is unavailable or fails to start.
- 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.
- Run hygiene: published Intel runs assume a clean node with no competing ZINC, llama.cpp, or other GPU workloads.
No speculative decoding on this backend. The ROCm and Vulkan tab has an MTP on/off switch for the models that support it.
Choose a workload
Prefill and decode are shown separately below.
Quick Chat
Models
Details
Raw data
| Model | Prefill | Decode | Overall |
|---|---|---|---|
| Gemma 4 26B-A4B MoE Q4K M 49 tok prompt · 96 tok output · 3 runs · Compared | Z 493.0 tok/s 99.4 ms L 247.6 tok/s 210.0 ms | Z 65.0 tok/s 15.4 ms/tok L 62.4 tok/s 16.0 ms/tok | Z 92.0 tok/s prompt+decode L 84.7 tok/s prompt+decode |
| Gemma 4 31B Q4K M 49 tok prompt · 96 tok output · 3 runs · Compared | Z 120.8 tok/s 405.5 ms L 67.2 tok/s 773.5 ms | Z 18.0 tok/s 55.5 ms/tok L 17.4 tok/s 57.6 ms/tok | Z 25.3 tok/s prompt+decode L 23.5 tok/s prompt+decode |
| Qwen 3.5 9B Q4K M 36 tok prompt · 96 tok output · 3 runs · Compared | Z 191.1 tok/s 188.4 ms L 142.0 tok/s 246.5 ms | Z 56.0 tok/s 17.9 ms/tok L 54.0 tok/s 18.5 ms/tok | Z 69.4 tok/s prompt+decode L 64.7 tok/s prompt+decode |
| Qwen 3.6 35B A3B UD Q4K XL 36 tok prompt · 96 tok output · 3 runs · Compared | Z 191.2 tok/s 188.3 ms L 135.4 tok/s 258.5 ms | Z 75.3 tok/s 13.3 ms/tok L 75.1 tok/s 13.3 ms/tok | Z 90.2 tok/s prompt+decode L 85.2 tok/s prompt+decode |
Coding Review
Models
Details
Raw data
| Model | Prefill | Decode | Overall |
|---|---|---|---|
| Gemma 4 26B-A4B MoE Q4K M 192 tok prompt · 160 tok output · 3 runs · Compared | Z 1025.9 tok/s 187.2 ms L 599.8 tok/s 325.1 ms | Z 62.3 tok/s 16.1 ms/tok L 60.2 tok/s 16.6 ms/tok | Z 127.7 tok/s prompt+decode L 119.1 tok/s prompt+decode |
| Gemma 4 31B Q4K M 192 tok prompt · 160 tok output · 3 runs · Compared | Z 168.6 tok/s 1139.2 ms L 149.7 tok/s 1302.3 ms | Z 17.5 tok/s 57.1 ms/tok L 16.6 tok/s 60.2 ms/tok | Z 34.2 tok/s prompt+decode L 32.5 tok/s prompt+decode |
| Qwen 3.5 9B Q4K M 174 tok prompt · 160 tok output · 3 runs · Compared | Z 537.4 tok/s 323.8 ms L 449.8 tok/s 340.1 ms | Z 55.6 tok/s 18.0 ms/tok L 53.7 tok/s 18.6 ms/tok | Z 104.4 tok/s prompt+decode L 94.3 tok/s prompt+decode |
| Qwen 3.6 35B A3B UD Q4K XL 174 tok prompt · 160 tok output · 3 runs · Compared | Z 292.9 tok/s 594.0 ms L 456.3 tok/s 335.3 ms | Z 74.7 tok/s 13.4 ms/tok L 74.4 tok/s 13.4 ms/tok | Z 122.0 tok/s prompt+decode L 126.0 tok/s prompt+decode |
Incident Context
Models
Details
Raw data
| Model | Prefill | Decode | Overall |
|---|---|---|---|
| Gemma 4 26B-A4B MoE Q4K M 346 tok prompt · 128 tok output · 3 runs · Compared | Z 1122.3 tok/s 308.3 ms L 853.2 tok/s 404.3 ms | Z 60.7 tok/s 16.5 ms/tok L 59.4 tok/s 16.8 ms/tok | Z 196.2 tok/s prompt+decode L 184.8 tok/s prompt+decode |
| Gemma 4 31B Q4K M 346 tok prompt · 128 tok output · 3 runs · Compared | Z 159.2 tok/s 2174.0 ms L 229.2 tok/s 1505.2 ms | Z 17.3 tok/s 58.0 ms/tok L 16.3 tok/s 61.5 ms/tok | Z 49.4 tok/s prompt+decode L 50.5 tok/s prompt+decode |
| Qwen 3.5 9B Q4K M 322 tok prompt · 128 tok output · 3 runs · Compared | Z 629.2 tok/s 511.7 ms L 827.0 tok/s 380.9 ms | Z 55.3 tok/s 18.1 ms/tok L 53.5 tok/s 18.7 ms/tok | Z 159.2 tok/s prompt+decode L 159.6 tok/s prompt+decode |
| Qwen 3.6 35B A3B UD Q4K XL 322 tok prompt · 128 tok output · 3 runs · Compared | Z 1085.3 tok/s 296.7 ms L 785.2 tok/s 401.2 ms | Z 73.7 tok/s 13.6 ms/tok L 74.5 tok/s 13.4 ms/tok | Z 221.2 tok/s prompt+decode L 208.9 tok/s prompt+decode |
Long Coding Draft
Models
Details
Raw data
| Model | Prefill | Decode | Overall |
|---|---|---|---|
| Gemma 4 26B-A4B MoE Q4K M 70 tok prompt · 256 tok output · 3 runs · Compared | Z 612.2 tok/s 114.3 ms L 335.0 tok/s 217.9 ms | Z 63.1 tok/s 15.8 ms/tok L 61.0 tok/s 16.4 ms/tok | Z 78.2 tok/s prompt+decode L 74.5 tok/s prompt+decode |
| Gemma 4 31B Q4K M 70 tok prompt · 256 tok output · 3 runs · Compared | Z 138.8 tok/s 504.4 ms L 82.1 tok/s 889.3 ms | Z 17.6 tok/s 56.9 ms/tok L 16.9 tok/s 59.2 ms/tok | Z 21.6 tok/s prompt+decode L 20.5 tok/s prompt+decode |
| Qwen 3.5 9B Q4K M 64 tok prompt · 256 tok output · 3 runs · Compared | Z 353.3 tok/s 181.2 ms L 298.5 tok/s 211.1 ms | Z 55.5 tok/s 18.0 ms/tok L 53.6 tok/s 18.6 ms/tok | Z 66.8 tok/s prompt+decode L 64.0 tok/s prompt+decode |
| Qwen 3.6 35B A3B UD Q4K XL 64 tok prompt · 256 tok output · 3 runs · Compared | Z 252.2 tok/s 253.8 ms L 273.6 tok/s 230.2 ms | Z 74.5 tok/s 13.4 ms/tok L 74.4 tok/s 13.4 ms/tok | Z 86.7 tok/s prompt+decode L 86.9 tok/s prompt+decode |
Methodology ZINC CLI vs llama.cpp on the same Intel Arc node · Four-scenario matrix with same-file baselines 3 measured · 1 warmup
- Hardware: one Intel Arc Vulkan benchmark node. ZINC and llama.cpp run on the same Ubuntu host and use the same GGUF file for each model.
- Baseline backend: llama.cpp Vulkan (--device Vulkan0) on the same node — the same backend as ZINC.
- ZINC path: optionally sync the current source tree to the Intel node, build with zig build -Doptimize=ReleaseFast, then measure generation through the ZINC CLI.
- Baseline path: launch llama.cpp against the same model file, preferring one reusable llama-server per model across the full scenario matrix and falling back to llama-cli when the server path is unavailable or fails to start.
- 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.
- Run hygiene: published Intel runs assume a clean node with no competing ZINC, llama.cpp, or other GPU workloads.
Apple Silicon · Mac Studio
Metal backend
Apple M4 Max GPU · 64 GB · 3 measured · 1 warmup
Exact configuration
- GPU
- Apple M4 Max GPU
- Chip
- Apple M4 Max
- Memory
- 64 GB
- OS
- Darwin 24.6.0
- ZINC backend
- Metal
- llama.cpp backend
- Metal (-ngl 999)
- Prompt parity
- 4/20 rows read the same prompt tokens in both engines
- Build
zig build -Doptimize=ReleaseFast- ZINC commit
- 68a03ec6c641
- llama.cpp build
- 0.4.0-dev
- Artifact
- Sep 12, 2026, 8:37 PM
Methodology & reproducibility
- Hardware: the local Apple Silicon target shown above. ZINC and llama.cpp run on the same machine and use the same GGUF file for each model.
- ZINC path: build the current workspace with zig build -Doptimize=ReleaseFast, then measure generation through the ZINC CLI.
- Baseline backend: llama.cpp Metal (-ngl 999) on the same Apple Silicon machine — the same backend as ZINC.
- Baseline path: launch llama.cpp against the same model file, preferring one reusable 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.
- Model resolution: managed catalog models are loaded from the ZINC model cache when available; explicit GGUF paths are preserved when provided.
- Run hygiene: published local runs assume no competing workload is saturating CPU, memory bandwidth, or GPU.
No speculative decoding on this backend. The ROCm and Vulkan tab has an MTP on/off switch for the models that support it.
Choose a workload
Prefill and decode are shown separately below.
Quick Chat
Models
Details
Raw data
| Model | Prefill | Decode | Overall |
|---|---|---|---|
| Gemma 4 26B-A4B MoE Q4K M 49 tok prompt · 96 tok output · 3 runs · Compared | Z 303.6 tok/s 161.4 ms L 379.6 tok/s 137.0 ms | Z 68.4 tok/s 14.6 ms/tok L 81.7 tok/s 12.2 ms/tok | Z 92.7 tok/s prompt+decode L 112.8 tok/s prompt+decode |
| Gemma 4 31B Q4K M 49 tok prompt · 96 tok output · 3 runs · Compared | Z 123.9 tok/s 395.5 ms L 62.7 tok/s 829.2 ms | Z 20.8 tok/s 48.0 ms/tok L 22.4 tok/s 44.6 ms/tok | Z 29.0 tok/s prompt+decode L 29.0 tok/s prompt+decode |
| Qwen 3.5 9B Q4K M 48 tok prompt · 96 tok output · 3 runs · Compared | Z 546.3 tok/s 87.9 ms L 305.9 tok/s 147.1 ms | Z 67.0 tok/s 14.9 ms/tok L 65.5 tok/s 15.3 ms/tok | Z 94.8 tok/s prompt+decode L 87.5 tok/s prompt+decode |
| Qwen 3.6 35B A3B UD Q4K XL 36 tok prompt · 96 tok output · 3 runs · Compared | Z 91.0 tok/s 395.5 ms L 319.9 tok/s 109.4 ms | Z 79.8 tok/s 12.5 ms/tok L 76.4 tok/s 13.1 ms/tok | Z 82.6 tok/s prompt+decode L 95.9 tok/s prompt+decode |
| Qwen 3.8 27B Dense Q4K M 48 tok prompt · 96 tok output · 3 runs · Compared | Z 143.7 tok/s 334.0 ms L 119.9 tok/s 725.7 ms | Z 21.3 tok/s 46.9 ms/tok L 23.9 tok/s 41.9 ms/tok | Z 29.8 tok/s prompt+decode L 38.6 tok/s prompt+decode |
Coding Review
Models
Details
Raw data
| Model | Prefill | Decode | Overall |
|---|---|---|---|
| Gemma 4 26B-A4B MoE Q4K M 192 tok prompt · 160 tok output · 3 runs · Compared | Z 84.2 tok/s 2281.3 ms L 900.6 tok/s 216.5 ms | Z 60.4 tok/s 16.6 ms/tok L 80.5 tok/s 12.4 ms/tok | Z 71.4 tok/s prompt+decode L 161.1 tok/s prompt+decode |
| Gemma 4 31B Q4K M 192 tok prompt · 160 tok output · 3 runs · Compared | Z 183.8 tok/s 1044.7 ms L 138.6 tok/s 1406.9 ms | Z 19.8 tok/s 50.5 ms/tok L 21.7 tok/s 46.2 ms/tok | Z 38.6 tok/s prompt+decode L 40.4 tok/s prompt+decode |
| Qwen 3.5 9B Q4K M 193 tok prompt · 160 tok output · 3 runs · Compared | Z 648.7 tok/s 297.5 ms L 567.6 tok/s 299.5 ms | Z 62.9 tok/s 15.9 ms/tok L 65.8 tok/s 15.2 ms/tok | Z 124.2 tok/s prompt+decode L 120.8 tok/s prompt+decode |
| Qwen 3.6 35B A3B UD Q4K XL 174 tok prompt · 160 tok output · 3 runs · Compared | Z 96.1 tok/s 1810.8 ms L 870.7 tok/s 175.7 ms | Z 74.9 tok/s 13.4 ms/tok L 78.7 tok/s 12.7 ms/tok | Z 84.6 tok/s prompt+decode L 141.7 tok/s prompt+decode |
| Qwen 3.8 27B Dense Q4K M 193 tok prompt · 160 tok output · 3 runs · Compared | Z 192.4 tok/s 1003.0 ms L 170.2 tok/s 1245.6 ms | Z 23.5 tok/s 42.6 ms/tok L 23.7 tok/s 42.1 ms/tok | Z 45.2 tok/s prompt+decode L 46.6 tok/s prompt+decode |
Incident Context
Models
Details
Raw data
| Model | Prefill | Decode | Overall |
|---|---|---|---|
| Gemma 4 26B-A4B MoE Q4K M 346 tok prompt · 128 tok output · 3 runs · Compared | Z 74.1 tok/s 4667.7 ms L 1131.4 tok/s 304.9 ms | Z 63.6 tok/s 15.7 ms/tok L 81.5 tok/s 12.3 ms/tok | Z 70.9 tok/s prompt+decode L 252.3 tok/s prompt+decode |
| Gemma 4 31B Q4K M 346 tok prompt · 128 tok output · 3 runs · Compared | Z 181.6 tok/s 1905.6 ms L 158.6 tok/s 2174.8 ms | Z 19.2 tok/s 52.0 ms/tok L 21.7 tok/s 46.0 ms/tok | Z 55.4 tok/s prompt+decode L 58.6 tok/s prompt+decode |
| Qwen 3.5 9B Q4K M 345 tok prompt · 128 tok output · 3 runs · Compared | Z 714.6 tok/s 482.8 ms L 689.6 tok/s 487.2 ms | Z 60.4 tok/s 16.5 ms/tok L 65.2 tok/s 15.3 ms/tok | Z 181.9 tok/s prompt+decode L 189.3 tok/s prompt+decode |
| Qwen 3.6 35B A3B UD Q4K XL 322 tok prompt · 128 tok output · 3 runs · Compared | Z 85.0 tok/s 3787.9 ms L 1233.8 tok/s 255.3 ms | Z 71.7 tok/s 14.0 ms/tok L 79.0 tok/s 12.7 ms/tok | Z 80.7 tok/s prompt+decode L 236.1 tok/s prompt+decode |
| Qwen 3.8 27B Dense Q4K M 345 tok prompt · 128 tok output · 3 runs · Compared | Z 218.1 tok/s 1581.6 ms L 196.9 tok/s 1920.2 ms | Z 23.1 tok/s 43.4 ms/tok L 22.8 tok/s 43.9 ms/tok | Z 66.3 tok/s prompt+decode L 67.1 tok/s prompt+decode |
Long Coding Draft
Models
Details
Raw data
| Model | Prefill | Decode | Overall |
|---|---|---|---|
| Gemma 4 26B-A4B MoE Q4K M 70 tok prompt · 256 tok output · 3 runs · Compared | Z 360.1 tok/s 194.4 ms L 501.6 tok/s 145.5 ms | Z 63.2 tok/s 15.8 ms/tok L 77.9 tok/s 12.8 ms/tok | Z 76.7 tok/s prompt+decode L 95.9 tok/s prompt+decode |
| Gemma 4 31B Q4K M 70 tok prompt · 256 tok output · 3 runs · Compared | Z 126.6 tok/s 553.0 ms L 90.2 tok/s 809.5 ms | Z 19.3 tok/s 51.8 ms/tok L 22.8 tok/s 43.9 ms/tok | Z 23.6 tok/s prompt+decode L 27.3 tok/s prompt+decode |
| Qwen 3.5 9B Q4K M 70 tok prompt · 256 tok output · 3 runs · Compared | Z 498.2 tok/s 140.5 ms L 456.6 tok/s 146.7 ms | Z 63.1 tok/s 15.8 ms/tok L 65.7 tok/s 15.2 ms/tok | Z 77.7 tok/s prompt+decode L 79.9 tok/s prompt+decode |
| Qwen 3.6 35B A3B UD Q4K XL 64 tok prompt · 256 tok output · 3 runs · Compared | Z 101.3 tok/s 632.0 ms L 578.6 tok/s 108.9 ms | Z 76.2 tok/s 13.1 ms/tok L 78.4 tok/s 12.8 ms/tok | Z 80.2 tok/s prompt+decode L 94.6 tok/s prompt+decode |
| Qwen 3.8 27B Dense Q4K M 70 tok prompt · 256 tok output · 3 runs · Compared | Z 147.0 tok/s 476.1 ms L 148.7 tok/s 732.9 ms | Z 23.5 tok/s 42.6 ms/tok L 23.8 tok/s 42.1 ms/tok | Z 28.7 tok/s prompt+decode L 31.7 tok/s prompt+decode |
Methodology ZINC CLI vs llama.cpp on the same Apple Silicon machine · Four-scenario matrix with same-file baselines 3 measured · 1 warmup
- Hardware: the local Apple Silicon target shown above. ZINC and llama.cpp run on the same machine and use the same GGUF file for each model.
- ZINC path: build the current workspace with zig build -Doptimize=ReleaseFast, then measure generation through the ZINC CLI.
- Baseline backend: llama.cpp Metal (-ngl 999) on the same Apple Silicon machine — the same backend as ZINC.
- Baseline path: launch llama.cpp against the same model file, preferring one reusable 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.
- Model resolution: managed catalog models are loaded from the ZINC model cache when available; explicit GGUF paths are preserved when provided.
- Run hygiene: published local runs assume no competing workload is saturating CPU, memory bandwidth, or GPU.
NVIDIA RTX · NVIDIA CUDA bench node
CUDA backend
GeForce RTX 5090 · 32 GB VRAM · 1792 GB/s · 1–3 measured · 1 warmup
Exact configuration
- GPU
- GeForce RTX 5090
- Chip
- NVIDIA GeForce RTX 5090
- Memory
- 32 GB VRAM · 1792 GB/s
- OS
- Ubuntu (WSL2)
- ZINC backend
- CUDA (-Dbackend=cuda, NVRTC)
- llama.cpp backend
- CUDA (CUDA_VISIBLE_DEVICES (UUID-pinned))
- Prompt parity
- 6/16 rows read the same prompt tokens in both engines
- Build
zig build -Doptimize=ReleaseFast -Dbackend=cuda- ZINC commit
- 9766de66
- llama.cpp build
- 1
- Artifact
- Jul 3, 2026, 3:30 PM
Methodology & reproducibility
- Hardware: one NVIDIA GeForce RTX 5090 (32 GB VRAM, 1792 GB/s) benchmark node. ZINC and llama.cpp run on the same host and use the same GGUF file for each model.
- ZINC path: sync the current source tree to the CUDA node, build with zig build -Doptimize=ReleaseFast -Dbackend=cuda, then measure generation through the ZINC CLI. CUDA kernels compiled via nvrtcGetCUBIN (NVRTC internal ptxas) — +30% over PTX+JIT for the visible GPU.
- Baseline backend: llama.cpp CUDA on the same host; the target GPU is pinned by UUID via CUDA_VISIBLE_DEVICES for both engines.
- GPU selection: the target GPU is pinned by UUID via CUDA_VISIBLE_DEVICES for both engines, because nvidia-smi indices are unreliable on the WSL2 passthrough.
- Baseline path: launch llama.cpp against the same model file, preferring one reusable 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 for every row, then 1–3 measured runs are collected depending on the model. 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.
- Run hygiene: published CUDA runs assume a clean node with no competing ZINC, llama.cpp, or other GPU workloads.
No speculative decoding on this backend. The ROCm and Vulkan tab has an MTP on/off switch for the models that support it.
Choose a workload
Prefill and decode are shown separately below.
Quick Chat
Models
Details
Raw data
| Model | Prefill | Decode | Overall |
|---|---|---|---|
| Gemma 4 26B-A4B MoE Q4K M 49 tok prompt · 96 tok output · 1 runs · Compared | Z 343.0 tok/s 1492.7 ms L 7978.0 tok/s 64.2 ms | Z 81.0 tok/s 21.0 ms/tok L 154.2 tok/s 6.5 ms/tok | Z 109.2 tok/s prompt+decode L 235.3 tok/s prompt+decode |
| Gemma 4 31B Q4K M 49 tok prompt · 96 tok output · 1 runs · Compared | Z 517.0 tok/s 990.3 ms L 3096.0 tok/s 165.4 ms | Z 41.0 tok/s 21.3 ms/tok L 56.9 tok/s 17.6 ms/tok | Z 59.5 tok/s prompt+decode L 86.9 tok/s prompt+decode |
| Qwen 3.5 9B Q4K M 36 tok prompt · 96 tok output · 3 runs · Compared | Z 86.9 tok/s 414.4 ms L 99.7 tok/s 351.1 ms | Z 154.1 tok/s 6.5 ms/tok L 165.9 tok/s 6.0 ms/tok | Z 127.2 tok/s prompt+decode L 140.9 tok/s prompt+decode |
| Qwen 3.6 35B A3B UD Q4K XL 36 tok prompt · 96 tok output · 1 runs · Compared | Z 41.4 tok/s 12367.1 ms L 6535.0 tok/s 78.3 ms | Z 129.0 tok/s 18.9 ms/tok L 125.8 tok/s 7.9 ms/tok | Z 81.8 tok/s prompt+decode L 170.5 tok/s prompt+decode |
Coding Review
Models
Details
Raw data
| Model | Prefill | Decode | Overall |
|---|---|---|---|
| Gemma 4 26B-A4B MoE Q4K M 192 tok prompt · 160 tok output · 1 runs · Compared | Z 343.0 tok/s 1492.7 ms L 7978.0 tok/s 64.2 ms | Z 81.0 tok/s 18.6 ms/tok L 107.9 tok/s 9.3 ms/tok | Z 138.9 tok/s prompt+decode L 235.4 tok/s prompt+decode |
| Gemma 4 31B Q4K M 192 tok prompt · 160 tok output · 1 runs · Compared | Z 517.0 tok/s 990.3 ms L 3096.0 tok/s 165.4 ms | Z 41.0 tok/s 23.1 ms/tok L 49.9 tok/s 20.1 ms/tok | Z 82.4 tok/s prompt+decode L 108.5 tok/s prompt+decode |
| Qwen 3.5 9B Q4K M 174 tok prompt · 160 tok output · 3 runs · Compared | Z 294.6 tok/s 590.6 ms L 61.4 tok/s 2493.6 ms | Z 148.1 tok/s 6.8 ms/tok L 152.5 tok/s 6.6 ms/tok | Z 199.9 tok/s prompt+decode L 88.3 tok/s prompt+decode |
| Qwen 3.6 35B A3B UD Q4K XL 174 tok prompt · 160 tok output · 1 runs · Compared | Z 41.4 tok/s 12367.1 ms L 6535.0 tok/s 78.3 ms | Z 129.0 tok/s 24.3 ms/tok L 164.0 tok/s 6.1 ms/tok | Z 61.4 tok/s prompt+decode L 313.3 tok/s prompt+decode |
Incident Context
Models
Details
Raw data
| Model | Prefill | Decode | Overall |
|---|---|---|---|
| Gemma 4 26B-A4B MoE Q4K M 346 tok prompt · 128 tok output · 1 runs · Compared | Z 343.0 tok/s 1492.7 ms L 7978.0 tok/s 64.2 ms | Z 81.0 tok/s 19.2 ms/tok L 104.5 tok/s 9.6 ms/tok | Z 183.1 tok/s prompt+decode L 372.9 tok/s prompt+decode |
| Gemma 4 31B Q4K M 346 tok prompt · 128 tok output · 1 runs · Compared | Z 517.0 tok/s 990.3 ms L 3096.0 tok/s 165.4 ms | Z 41.0 tok/s 23.7 ms/tok L 51.1 tok/s 19.6 ms/tok | Z 125.0 tok/s prompt+decode L 180.7 tok/s prompt+decode |
| Qwen 3.5 9B Q4K M 322 tok prompt · 128 tok output · 3 runs · Compared | Z 928.2 tok/s 346.9 ms L 56.5 tok/s 5574.0 ms | Z 146.1 tok/s 6.8 ms/tok L 114.5 tok/s 8.7 ms/tok | Z 367.9 tok/s prompt+decode L 66.2 tok/s prompt+decode |
| Qwen 3.6 35B A3B UD Q4K XL 322 tok prompt · 128 tok output · 1 runs · Compared | Z 41.4 tok/s 12367.1 ms L 6535.0 tok/s 78.3 ms | Z 129.0 tok/s 17.4 ms/tok L 170.3 tok/s 5.9 ms/tok | Z 51.3 tok/s prompt+decode L 553.9 tok/s prompt+decode |
Long Coding Draft
Models
Details
Raw data
| Model | Prefill | Decode | Overall |
|---|---|---|---|
| Gemma 4 26B-A4B MoE Q4K M 70 tok prompt · 256 tok output · 1 runs · Compared | Z 343.0 tok/s 1492.7 ms L 7978.0 tok/s 64.2 ms | Z 81.0 tok/s 17.4 ms/tok L 105.7 tok/s 9.5 ms/tok | Z 96.9 tok/s prompt+decode L 135.3 tok/s prompt+decode |
| Gemma 4 31B Q4K M 70 tok prompt · 256 tok output · 1 runs · Compared | Z 517.0 tok/s 990.3 ms L 3096.0 tok/s 165.4 ms | Z 41.0 tok/s 21.6 ms/tok L 51.4 tok/s 19.4 ms/tok | Z 51.1 tok/s prompt+decode L 65.8 tok/s prompt+decode |
| Qwen 3.5 9B Q4K M 64 tok prompt · 256 tok output · 3 runs · Compared | Z 164.7 tok/s 388.6 ms L 53.1 tok/s 1186.3 ms | Z 150.3 tok/s 6.7 ms/tok L 113.1 tok/s 8.8 ms/tok | Z 153.0 tok/s prompt+decode L 92.5 tok/s prompt+decode |
| Qwen 3.6 35B A3B UD Q4K XL 64 tok prompt · 256 tok output · 1 runs · Compared | Z 41.4 tok/s 12367.1 ms L 6535.0 tok/s 78.3 ms | Z 129.0 tok/s 26.0 ms/tok L 168.2 tok/s 5.9 ms/tok | Z 90.6 tok/s prompt+decode L 208.3 tok/s prompt+decode |
Methodology ZINC CLI vs llama.cpp on the same CUDA node · Four-scenario matrix with same-file baselines 1–3 measured · 1 warmup
- Hardware: one NVIDIA GeForce RTX 5090 (32 GB VRAM, 1792 GB/s) benchmark node. ZINC and llama.cpp run on the same host and use the same GGUF file for each model.
- ZINC path: sync the current source tree to the CUDA node, build with zig build -Doptimize=ReleaseFast -Dbackend=cuda, then measure generation through the ZINC CLI. CUDA kernels compiled via nvrtcGetCUBIN (NVRTC internal ptxas) — +30% over PTX+JIT for the visible GPU.
- Baseline backend: llama.cpp CUDA on the same host; the target GPU is pinned by UUID via CUDA_VISIBLE_DEVICES for both engines.
- GPU selection: the target GPU is pinned by UUID via CUDA_VISIBLE_DEVICES for both engines, because nvidia-smi indices are unreliable on the WSL2 passthrough.
- Baseline path: launch llama.cpp against the same model file, preferring one reusable 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 for every row, then 1–3 measured runs are collected depending on the model. 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.
- Run hygiene: published CUDA runs assume a clean node with no competing ZINC, llama.cpp, or other GPU workloads.