Ryzen AI MAX+ 395 / Radeon 8060S — Ryzen AI MAX+ 395, 16-core / 32-thread · Radeon 8060S gfx1151, 40 CU · Vulkan/RADV · 128 GB LPDDR5 (BIOS: 64 GB VRAM + 62 GB RAM; Vulkan VRAM+GTT ≈ 95 GB) · llama.cpp Vulkan.
21 models in this tree. A row appears only when the run used the shared
profile (temperature 0 on every trial, seed 42, one 16384-token slot, C compiled -std=gnu11).
Aya-23 clamps that context to 8192. Older sweeps used different stacks, context sizes, and a 0.7-temperature retry, so they are
not in this table. Their raw JSON is still on disk. Click any column header to sort.
Generated 2026-10-01 17:21.
Where to look: this page ranks the models and prices them by what a working answer costs. Analysis covers behaviour under load, whether the code they write is fast, whether the wording of the prompt changes the answer, and self-repair. The failing samples are split by technology — C, Python, Bash, research — and models shows how to reproduce every number. Charts is the same data as pictures.
How many times does each test run? Coding suites (C, Python, Bash — easy, hard and brutal) and the research paper: 3 trials per task, all at temperature 0 with seed 42, so a miss is the same answer again. Framing, from the older sweep: 20 trials per wording. Decode speed: median of 3 repeated 2048-token generations — the tok/s column shows ±1 std across those runs (hover a cell for the exact count), as does the dot plot on the analysis page. Quality: 6 probes × 3 trials (temp 0, then 0.7×2). Concurrency: one pass per stream level (no repeats). Self-repair: one initial attempt, then up to 5 rounds of compiler feedback. Two writing tasks that are easy to confuse: tok/s is measured on a 1500-word essay about MIT (speed only, content not graded — each model's essay is on its detail page), while the research column is a different test: extracting NFS facts from RHEL 10 documentation. All raw data is downloadable as CSV files.
| model | type | coding total | flaky ↓ | tok/s ± | RAM GB | quality | ppl-w ↓ | ppl-t ↓ | C | Py | Bash | C-hard | Py-hard | Sh-hard | C-brutal | Py-brutal | Sh-brutal | research |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| qwen3.8-flash-next 125B llama.cpp Vulkan | MoE | 115/126 | 4 | 27.8 ±0 | 28.8 | — | — | 3.63 | 46/48 | 24/24 | 20/24 | 8/9 | 8/9 | 6/9 | — | — | — | 3/3 |
| gpt-oss-120b llama.cpp Vulkan | MoE | 109/126 | 4 | 51.4 ±0 | 0.3 | — | — | 171.08 | 42/48 | 24/24 | 19/24 | 7/9 | 9/9 | 6/9 | — | — | — | 2/3 |
| laguna-s 2.1 117B llama.cpp Vulkan | MoE | 107/126 | 1 | 33.6 ±0 | 0.3 | — | — | 8.50 | 48/48 | 24/24 | 18/24 | 6/9 | 9/9 | 2/9 | — | — | — | 0/3 |
| gemma-4-26b llama.cpp Vulkan | MoE | 105/126 | 3 | 47.1 ±0 | 0.5 | — | — | 17,525 | 43/48 | 24/24 | 15/24 | 7/9 | 9/9 | 4/9 | — | — | — | 3/3 |
| qwen3-coder-next 80B llama.cpp Vulkan | MoE | 105/126 | 3 | 55.5 ±0 | 1.4 | — | — | 7.03 | 42/48 | 21/24 | 20/24 | 6/9 | 8/9 | 5/9 | — | — | — | 3/3 |
| qwen3.8-27b llama.cpp Vulkan | dense | 105/126 | 0 | 12.2 ±0 | 2.6 | — | — | 6.30 | 45/48 | 24/24 | 15/24 | 6/9 | 9/9 | 3/9 | — | — | — | 3/3 |
| gpt-oss-20b llama.cpp Vulkan | MoE | 104/126 | 6 | 72.3 ±0 | 0.2 | — | — | 123.58 | 45/48 | 24/24 | 16/24 | 6/9 | 8/9 | 5/9 | — | — | — | 0/3 |
| nemotron-3-super 120B llama.cpp Vulkan | MoE | 104/126 | 1 | 17.5 ±0 | 2.9 | — | — | 4.18 | 45/48 | 24/24 | 15/24 | 5/9 | 9/9 | 3/9 | — | — | — | 3/3 |
| glm-4.7-flash llama.cpp Vulkan | MoE | 103/126 | 1 | 63.7 ±0 | 0.3 | — | — | 17.10 | 45/48 | 24/24 | 15/24 | 6/9 | 7/9 | 3/9 | — | — | — | 3/3 |
| laguna-xs.2 llama.cpp Vulkan | MoE | 102/126 | 4 | 86.2 ±0 | 0.3 | — | — | 13.10 | 34/48 | 24/24 | 21/24 | 6/9 | 9/9 | 6/9 | — | — | — | 2/3 |
| qwen3.6-27b llama.cpp Vulkan | dense | 100/126 | 1 | 12.5 ±0 | 2.6 | — | — | 6.55 | 36/48 | 24/24 | 21/24 | 7/9 | 9/9 | 3/9 | — | — | — | 0/3 |
| devstral-2 24b llama.cpp Vulkan | dense | 96/126 | 0 | 14.7 ±0 | 0.5 | — | — | 4.82 | 36/48 | 24/24 | 18/24 | 3/9 | 6/9 | 6/9 | — | — | — | 3/3 |
| qwen3.5-35b llama.cpp Vulkan | MoE | 95/126 | 3 | 58.7 ±0 | 1.2 | — | — | 6.20 | 36/48 | 24/24 | 16/24 | 5/9 | 8/9 | 3/9 | — | — | — | 3/3 |
| qwen3.6-35b llama.cpp Vulkan | MoE | 94/126 | 1 | 58.5 ±0 | 1.2 | — | — | 6.36 | 39/48 | 21/24 | 18/24 | 6/9 | 6/9 | 3/9 | — | — | — | 1/3 |
| qwen3.5-122b-a10b llama.cpp Vulkan | MoE | 93/126 | 0 | 22.2 ±0 | 2.4 | — | — | 4.88 | 36/48 | 24/24 | 15/24 | 6/9 | 9/9 | 3/9 | — | — | — | 0/3 |
| qwen3.5-27b llama.cpp Vulkan | dense | 93/126 | 0 | 12.5 ±0 | 2.6 | — | — | 6.39 | 33/48 | 24/24 | 15/24 | 3/9 | 9/9 | 6/9 | — | — | — | 3/3 |
| k2-horizon 36B-A4B llama.cpp Vulkan | MoE | 91/126 | 1 | 48.3 ±0 | 0.4 | — | — | 7.90 | 36/48 | 21/24 | 16/24 | 6/9 | 6/9 | 3/9 | — | — | — | 3/3 |
| qwen3-coder-30b llama.cpp Vulkan | MoE | 87/126 | 3 | 85.0 ±0 | 0.3 | — | — | 9.06 | 36/48 | 24/24 | 14/24 | 6/9 | 5/9 | 0/9 | — | — | — | 2/3 |
| seed-oss 36b llama.cpp Vulkan | dense | 86/126 | 10 | 10.2 ±0 | 0.6 | — | — | 9.05 | 34/48 | 24/24 | 17/24 | 2/9 | 4/9 | 2/9 | — | — | — | 3/3 |
| mistral-small-4 119B llama.cpp Vulkan | MoE | 82/126 | 1 | 42.2 ±0 | 0.2 | — | — | 5.09 | 37/48 | 21/24 | 12/24 | 6/9 | 3/9 | 3/9 | — | — | — | 0/3 |
| aya-23 35b llama.cpp Vulkan | dense | 64/126 | 1 | 9.6 ±0 | 2.1 | — | — | 6.15 | 27/48 | 21/24 | 12/24 | 0/9 | 3/9 | 0/9 | — | — | — | 1/3 |
A dense model runs every parameter on every token; a mixture-of-experts model routes each token to a few of its experts, so only the active column does compute. That is why the 125B flash-next decodes like a 6B model and the whole top of the table is MoE — on memory-bandwidth-bound Apple silicon, active parameters are what you pay per token, and MoE buys a large total capacity at a small active cost. The last column, tok/s per active billion, is the efficiency of that trade; dense models are 1x by definition and omitted.
| model | type | total | active | experts | coding | tok/s | tok/s per act-B |
|---|---|---|---|---|---|---|---|
| qwen3.8-flash-next 125B | MoE | 125B | 6B | 512, top-10 +1 | 91% | 28 | 4.6 |
| gpt-oss-120b | MoE | 117B | 5.1B | 128, top-4 | 87% | 51 | 10.1 |
| laguna-s 2.1 117B | MoE | 117B | 3B | 256, top-10 +1 shared | 85% | 34 | 11.2 |
| gemma-4-26b | MoE | 25.2B | 3.8B | 128, top-8 +1 | 83% | 47 | 12.4 |
| qwen3-coder-next 80B | MoE | 80B | 3B | 512, top-10 +1 | 83% | 56 | 18.5 |
| qwen3.8-27b | dense | 27B | 27B | — | 83% | 12 | — |
| gpt-oss-20b | MoE | 21B | 3.6B | 32, top-4 | 83% | 72 | 20.1 |
| nemotron-3-super 120B | MoE | 120B | 12B | 512, top-22 +1 | 83% | 17 | 1.5 |
| glm-4.7-flash | MoE | 30B | 3B | 64, top-4 +1 | 82% | 64 | 21.2 |
| laguna-xs.2 | MoE | 33.4B | 3B | 256 +1 shared | 81% | 86 | 28.7 |
| qwen3.6-27b | dense | 27B | 27B | — | 79% | 12 | — |
| devstral-2 24b | dense | 24B | 24B | — | 76% | 15 | — |
| qwen3.5-35b | MoE | 35B | 3B | 256, top-8 +1 | 75% | 59 | 19.6 |
| qwen3.6-35b | MoE | 35B | 3B | 256, top-8 +1 | 75% | 59 | 19.5 |
| qwen3.5-122b-a10b | MoE | 122B | 10B | 256, top-8 +1 | 74% | 22 | 2.2 |
| qwen3.5-27b | dense | 27B | 27B | — | 74% | 13 | — |
| k2-horizon 36B-A4B | MoE | 36B | 4B | — | 72% | 48 | 12.1 |
| qwen3-coder-30b | MoE | 30B | 3B | 128, top-8 | 69% | 85 | 28.3 |
| seed-oss 36b | dense | 36B | 36B | — | 68% | 10 | — |
| mistral-small-4 119B | MoE | 119B | 6B | 128, top-4 | 65% | 42 | 7.0 |
| aya-23 35b | dense | 35B | 35B | — | 51% | 10 | — |
Green cells are strong, red weak — shaded by percentage so a column can be scanned without reading every number. Perplexity is llama-perplexity on WikiText-2 (50 chunks). It is not comparable to the MLX numbers on the other machine. Gemma's absurd PPL is a tokenizer artifact — trust the coding score.
Correctness alone picks a model that is right and unusably slow; tok/s alone picks one that is fast and wrong. The number that decides it is the two divided: seconds of wall clock per solution that passes. Across the 41 coding tasks (research excluded), 3 trials each at temperature 0 — timed end to end, failures included, because a wrong answer costs you its generation time too.
| model | type | C min | Python min | Bash min | total min | per attempt |
|---|---|---|---|---|---|---|
| qwen3-coder-30b | MoE | 2.1 | 0.9 | 0.7 | 3.7 | 1.8 |
| laguna-xs.2 | MoE | 2.4 | 0.9 | 0.9 | 4.2 | 2.0 |
| glm-4.7-flash | MoE | 2.7 | 1.2 | 1.3 | 5.2 | 2.6 |
| k2-horizon 36B-A4B | MoE | 3.1 | 1.2 | 1.3 | 5.7 | 2.8 |
| mistral-small-4 119B | MoE | 3.6 | 1.4 | 1.5 | 6.5 | 3.2 |
| qwen3.6-35b | MoE | 3.7 | 1.4 | 1.7 | 6.8 | 3.3 |
| gemma-4-26b | MoE | 4.2 | 1.8 | 1.3 | 7.3 | 3.6 |
| qwen3-coder-next 80B | MoE | 3.8 | 2.0 | 1.7 | 7.5 | 3.6 |
| qwen3.5-35b | MoE | 4.3 | 1.4 | 1.7 | 7.5 | 3.6 |
| laguna-s 2.1 117B | MoE | 5.7 | 2.0 | 2.0 | 9.7 | 4.7 |
| qwen3.5-122b-a10b | MoE | 8.6 | 3.3 | 3.2 | 15.1 | 7.4 |
| nemotron-3-super 120B | MoE | 8.7 | 3.8 | 3.2 | 15.7 | 7.7 |
| qwen3.8-flash-next 125B | MoE | 8.6 | 4.1 | 3.1 | 15.8 | 7.7 |
| devstral-2 24b | dense | 11.1 | 4.2 | 2.9 | 18.3 | 8.9 |
| gpt-oss-120b | MoE | 9.0 | 4.3 | 6.4 | 19.7 | 9.6 |
| gpt-oss-20b | MoE | 10.4 | 4.0 | 8.2 | 22.6 | 11.0 |
| aya-23 35b | dense | 15.1 | 5.9 | 6.9 | 27.8 | 13.6 |
| qwen3.8-27b | dense | 15.5 | 7.6 | 5.7 | 28.7 | 14.0 |
| qwen3.6-27b | dense | 17.3 | 6.5 | 6.4 | 30.2 | 14.7 |
| qwen3.5-27b | dense | 19.8 | 7.3 | 7.1 | 34.3 | 16.7 |
| seed-oss 36b | dense | 228.4 | 103.1 | 110.6 | 442.0 | 215.6 |
Those totals are everything the model spent, right or wrong. Dividing by the answers that actually worked gives the figure below. first try is trial 1 alone, the honest number if you paste the first thing you get. with retry re-asks only when the previous attempt failed and stops at the first pass, so unused retries cost nothing — what a loop around the model really costs.
| model | type | first try | sec/solution | with retry | sec/solution | retry gain | rank |
|---|---|---|---|---|---|---|---|
| qwen3.8-flash-next 125B | MoE | 38/41 | 8.7s | 39/41 | 9.5s | +1 | 1 frontier |
| gemma-4-26b | MoE | 35/41 | 4.2s | 36/41 | 5.5s | +1 | 2 frontier |
| laguna-xs.2 | MoE | 34/41 | 2.7s | 35/41 | 3.6s | +1 | 3 frontier |
| gpt-oss-120b | MoE | 34/41 | 12.2s | 37/41 | 14.7s | +3 | 4 beaten |
| gpt-oss-20b | MoE | 36/41 | 13.3s | 37/41 | 19.5s | +1 | 5 beaten |
| laguna-s 2.1 117B | MoE | 36/41 | 6.1s | 36/41 | 7.3s | +0 | 6 beaten |
| qwen3-coder-next 80B | MoE | 32/41 | 4.8s | 35/41 | 6.8s | +3 | 7 beaten |
| glm-4.7-flash | MoE | 34/41 | 3.2s | 34/41 | 4.7s | +0 | 8 beaten |
| nemotron-3-super 120B | MoE | 34/41 | 10.2s | 34/41 | 13.1s | +0 | 9 beaten |
| qwen3.8-27b | dense | 34/41 | 16.9s | 34/41 | 24.1s | +0 | 10 beaten |
| qwen3.6-27b | dense | 33/41 | 18.6s | 34/41 | 27.4s | +1 | 11 beaten |
| qwen3.5-35b | MoE | 31/41 | 4.9s | 32/41 | 7.8s | +1 | 12 beaten |
| seed-oss 36b | dense | 28/41 | 292.3s | 32/41 | 487.3s | +4 | 13 beaten |
| qwen3.6-35b | MoE | 31/41 | 4.5s | 31/41 | 7.1s | +0 | 14 beaten |
| qwen3.5-122b-a10b | MoE | 31/41 | 10.5s | 31/41 | 15.1s | +0 | 15 beaten |
| devstral-2 24b | dense | 31/41 | 11.8s | 31/41 | 21.5s | +0 | 16 beaten |
| k2-horizon 36B-A4B | MoE | 29/41 | 4.2s | 30/41 | 6.6s | +1 | 17 beaten |
| qwen3.5-27b | dense | 30/41 | 23.4s | 30/41 | 39.2s | +0 | 18 beaten |
| qwen3-coder-30b | MoE | 29/41 | 2.7s | 29/41 | 4.7s | +0 | 19 beaten |
| mistral-small-4 119B | MoE | 28/41 | 5.5s | 28/41 | 9.1s | +0 | 20 beaten |
| aya-23 35b | dense | 21/41 | 26.8s | 21/41 | 61.9s | +0 | 21 beaten |
Rank is the frontier first (most solutions, then cheapest), then everyone else. beaten means another model is at least as accurate and cheaper — drop it.
kimi-k3 (referee) is not in these tables: the cost here is generation wall-clock, and the referee is a hosted cloud model whose solutions were written in-session, not generated through the harness — there is no timing to report.