The bench
Speeds from RAM alone, compared
exhibit one hundred and eight The bench
Published 2026-11-10 (UTC)
A small (human) team and a fleet of AI agents.
The CPU-only writing, prompt-reading and first-word speeds we have measured since August, like with like, as bar charts: seven language models on four machines with no graphics card in the path, what more threads do, what a longer question costs, what the memory test read, and the 180-billion-parameter mixture that 128 GB of memory can hold. Every bar is read from a named file in a kit you can download.
ask about this page → assistant.strata2signal.com · in beta, still being tested
hardware on this page: RTX PRO 6000 Blackwell (96 GB) · RTX 3090 (24 GB) · RTX 5090 Laptop GPU (24 GB) · RTX 3080 (10 GB) · Intel Core i9-10850K · Intel Core i5-12600H · AMD Ryzen 7 3700X · AMD EPYC 7532 · Intel Core Ultra 9 290HX Plus · the mini PC · the server · Rig B — the gaming laptop → research.strata2signal.com/hardware/ · the roster is in beta, still being tested
the short version
This page gathers every speed this house has measured for language models running from a computer's own memory, with no graphics card doing any of the work, as bar charts comparing machines, models, thread counts and question lengths. Four machines: a desktop with an AMD EPYC 7532 and 128 GB of eight-channel DDR4-3200, a laptop with an Intel Core Ultra 9 290HX Plus and 64 GB of DDR5-5600, a mini PC with an Intel Core i5-12600H and 32 GB of DDR5, and a desktop with an AMD Ryzen 7 3700X and 32 GB of DDR4; an older ten-core desktop with 48 GB of DDR4 stands in its own labelled figure. At the engine's default threads a 26-billion-parameter mixture of experts (gemma4:26b) wrote 12.66 to 13.64 tokens a second (a token is a little under a word) on the three machines with 32 or 64 GB and 24.68 on the EPYC; a 24-billion dense model (mistral-small3.2:24b) wrote 2.57 to 3.31 on the three and 7.09 on the EPYC. Ollama, the program that loads and runs the models, defaults to 4 threads on hybrid Intel chips: on the laptop, dense models wrote 1.75 to 1.91 times faster at 20, and both mixtures 36 to 44 per cent slower. The first word of a fresh answer to a 7,965-token question took 138.23 s on the Ryzen desktop and 146.22 s on the laptop (at 4 of its 24 threads, THROTTLED on every run), because the whole question is read first. Every figure is read from a file in a public kit; the labels a careful reader needs (THROTTLED, NOT WALL, default threads, fresh against warm) sit under each chart.
9,751 words, about 44 minutes to read.
The summary is this page’s own; what was dropped, and why, is in this page’s receipt file.
The short answer: two models on four machines
Both models serve the house's own products: Mistral reads what strangers type at RuleSage, our board-game rules helper, and Gemma 4 speaks for RealKeep, a small game. Here both run from memory alone, at default threads.
gemma4:26b, a 26B mixture mistral-small3.2:24b, 24B dense
The battery page's kit: runs/cpu-server-m5.json, cpu-laptop-m5.json, cpu-mini-m5.json and the -m4 files (derived.decode_tok_s.median; cold_load[] for the first word). Exhibit 105's kit: two-channel-desktop/summary.json arms[0] and arms[1] (decode_median, first_word_median_ms). Every value stands in this page's tables T1 and T3.
This chart and every chart above the prompt-size ladder share one recipe, the frozen prompt: Ollama 0.32.15, Q4_K_M files by digest, one 2,101-byte prompt, a 4,096-token window, 256 tokens written. Three machines on 2026-08-25: writing from five warm runs, prompt reading and the first word from two cold runs. The Ryzen desktop from three fresh loads: gemma4:26b and mistral on 2026-11-04, three dense models on 2026-11-08. Here mistral's first word sits on a 1,023-token prompt, the mixture's on 536. Not a silicon comparison: the laptop and the mini PC run 4 of their 24 and 16 threads. Files: runs/cpu-{server,laptop,mini}-m1…m6.json, cpu-server-x2.json in the battery kit (of Two Hours at 12 tok/s — On Battery, the battery page); two-channel-desktop/summary.json in 105's kit (of Speeds from RAM alone, exhibit 105) and this page's kit.
The machines
T0 · The five machines, as the charts label them; each memory speed says when, or whether, it was read.
| Machine (as the charts label it) | Processor (cores / threads) | Memory (sticks; speed rated and configured) | Engine's default threads | Triad best / worst, GB/s (date) | The card in the box, and how it was kept out |
|---|---|---|---|---|---|
| EPYC 7532, 128 GB | AMD EPYC 7532, 32 cores / 64 threads | 128 GB ECC DDR4; eight 16 GB dual-rank sticks, one per channel; 3,200 MT/s rated and configured (read 2026-11-03) | 32 | 100.69 / 100.36 (2026-08-25); 98.16 / 79.39 (2026-11-03) | an NVIDIA RTX PRO 6000 Blackwell Workstation Edition (96 GB) in 2026-11, hidden from the run and proven unused; on 2026-08-25 the engine reported 0 bytes on any card |
| 290HX Plus, 64 GB | Intel Core Ultra 9 290HX Plus, 8 P-cores + 16 E-cores / 24 threads | 64 GB DDR5; two 32 GB SO-DIMMs; 5,600 MT/s per the house's hardware record (not read by a bench run, not in the kit) | 4 of 24 | 59.31 / 49.21 (2026-08-25); 59.83 / 57.77 (2026-11-05); 59.92 / 55.77 (2026-11-08) | an NVIDIA GeForce RTX 5090 Laptop GPU (24 GB), 0 bytes on it in every run; the 2026-11 kit proves no card ran |
| i5-12600H, 32 GB | Intel Core i5-12600H, 4 P-cores (two threads each) + 8 E-cores / 16 threads | 32 GB DDR5; two 16 GB SO-DIMMs, one per controller; rated 5,600 MT/s, running 4,800 (read 2026-11-08) | 4 of 16 | 51.12 / 50.85 (2026-08-25) | no discrete card; the processor's own graphics only |
| 3700X, 32 GB DDR4 | AMD Ryzen 7 3700X, 8 cores / 16 threads, no efficiency cores | 32 GB DDR4; four 8 GB sticks, two per channel on two channels; 3,200 MT/s rated and configured (read 2026-11-08) | 8 of 16 | 21.43 / 21.37 (2026-11-04); 19.50 / 18.75 (2026-11-08) | an EVGA GeForce RTX 3090 XC3 Ultra (24 GB), hidden from the run and proven unused |
| i9-10850K, 48 GB | Intel Core i9-10850K, 10 cores / 20 threads | 48 GB DDR4 (3,200 as built; never read); 47,040 MiB as the system reports it | not recorded | none measured | a GeForce RTX 3080 (10 GB), left untouched: the engine reported 0 bytes on it in every run |
Two notes. Exhibit 105 first printed the Ryzen desktop's memory as two 16 GB sticks; the 2026-11-08 dmidecode -t 17 read (the motherboard's own report of each memory slot) found four 8 GB sticks, and that page carries its dated correction; no measured figure changes. The battery page's "server, 128G of ECC RAM" is this EPYC desktop, its "Rig B" this laptop: exhibit 105 did not join them, this page does (the house has named hardware in full since 2026-09-17).
A few words this page leans on
- Writing (decode, token generation, tg): tokens a second as the answer appears; a token is a little under a word.
- Prompt reading (prefill, prompt processing, pp): tokens a second taking in the question.
- First word (time to first token, TTFT): model already loaded, its load subtracted, nothing cached.
- Dense, mixture of experts (MoE): a dense model uses every parameter per token; a mixture wakes a fraction (gemma4:26b about 4 billion of its 26), though all of it must sit in memory.
- Threads: Ollama's num_thread; its default is half the performance-core threads on hybrid Intel parts, the physical cores elsewhere (table T0).
- Q4_K_M, Q8_0, IQ3_S: about four, eight and three bits a weight.
- STREAM triad: a memory-speed test streaming three large arrays, in GB/s. k: writing tokens a second per GB/s of triad; one over k is the GB the rule says moves per written token. Paper peak: transfer rate × 8 bytes × channels, arithmetic, not a reading.
- Fresh, warm, cached: a fresh load puts the model in memory before the run; a warm run follows other runs of that model; a cached prompt was sent before, so its reading is skipped.
- THROTTLED: the laptop's throttle counter rose, or the Ryzen desktop's control temperature reached 95 °C, between request and last token. A label, never a reason to drop the figure.
- NOT WALL: package watts and joules are the processor's own counter, not a wall meter; the whole computer draws more.
- Draft model: gemma4:26b's built-in speculative draft: a small head proposes tokens, the main model keeps those it agrees with. Every bar of the 08ae7ec1744b… build includes it; dense models have none.
How fast does each model write on each machine?
The battery page's kit, runs/cpu-{server,laptop,mini}-m1…m6.json and cpu-server-x2.json, derived.decode_tok_s.median. Exhibit 105's kit, two-channel-desktop/summary.json arms[0..1].decode_median. This page's kit, fill-in/two-channel-desktop/summary.json, the three f1- arms' decode_median. Table T1.
The frozen-prompt bench, writing. The laptop's 2026-11-05 re-read of two models (T8) drifted 2 to 16 % in writing, so a gap under about 16 % between those benches is not a finding. Default threads differ; the next chart shows what they do. Source: the bench's files, above; T1.
Should I raise the thread count?
Default threads The other setting (in the heading)
The battery page's kit: runs/cpu-laptop-m1…m6.json and cpu-mini-m1…m6.json (the default bars) beside supplement-runs/tuned-cpu-laptop-m*.json (num_thread 20) and tuned-cpu-mini-m*.json (num_thread 12), derived.decode_tok_s.median. Exhibit 105's kit: two-channel-desktop/summary.json arms[0..3].decode_median. Table T5.
The same bench at one other setting per machine: 20 threads on the laptop and 12 on the mini PC (warm runs, n = 5), 4 on the Ryzen desktop; T5b prints every ratio. Not a rule for other processors, and nothing for the EPYC (no Ollama thread sweep there). The mini PC's same-session 4-thread controls sit −5.2 % to +3.3 % from its default bars. The laptop's 2026-11-05 pair is in T5. Files: supplement-runs/tuned-cpu-{laptop,mini}-m*.json in the battery kit; two-channel-desktop/summary.json in 105's kit.
How long until the first word of the answer? (time to first token, TTFT)
The battery page's kit, runs/cpu-{server,laptop,mini}-m1…m6.json and cpu-server-x2.json, cold_load[] (ttft_ms minus load_duration_ns, its counting rule 3 item 2). Exhibit 105's kit, two-channel-desktop/summary.json arms[0..1].first_word_median_ms. This page's kit, fill-in/two-channel-desktop/summary.json, the three f1- arms' first_word_median_ms. Table T3.
Client time to the first token minus the model's load; n = 2 on 2026-08-25 (the battery page printed "median of five"; the record holds two), n = 3 on the Ryzen desktop. For a cold start add the load: 9.9 to 10.2 s for gemma4:26b on this laptop in August (page-cache-warm), 14.6 to 16.9 s in November's fresh loads. Threads are the biggest lever (Do more threads shorten the wait?, below). Source: the bench's files, cold_load[] and arms[].first_word_median_ms; T3.
How fast does each machine read the question? (prompt processing)
The battery page's kit, runs/cpu-{server,laptop,mini}-m1…m6.json and cpu-server-x2.json, cold_load[] prompt_eval_count over prompt_eval_duration_ns (its counting rule 2). Exhibit 105's kit, two-channel-desktop/summary.json arms[0..1].prefill_median. This page's kit, fill-in/two-channel-desktop/summary.json, the three f1- arms' prefill_median. Table T2.
Nothing cached, and the load subtracted, so disk is not in it; one cold run for the 70B. Not comparable per token between mistral's panel and the others: its prompt is 1,023 tokens under its tokenizer, the same 2,101 bytes. Source: the bench's files, cold_load[] (the battery kit's counting rule 2) and arms[].prefill_median; T2.
Why do some pages claim a 0.2-second first word?
The same prompt sent again (cached) A fresh prompt
The battery page's kit, runs/cpu-mini-m1…m6.json: derived.ttft_ms.median from the warm runs (the cached figure) and cold_load[] for the fresh prompt (its counting rule 3). Table T9.
Ollama keeps a prompt's computed prefix: a resent prompt reports its full token count and a near-zero reading time, a cache artifact by the battery kit's counting rule 2. The reading rate reads up to 316 times higher (mistral on the mini PC, 3,308.41 against the cold 10.4745), the first word up to 310 times sooner. Source: runs/cpu-mini-m1…m6.json, derived.ttft_ms.median (warm runs re-sending one prompt) against cold_load[], in the battery kit; T9.
Do more threads shorten the wait?
Default threads The other setting (in the heading)
Exhibit 105's kit: laptop/summary.json and two-channel-desktop/summary.json, arms[0..3].prefill_median and arms[0..3].first_word_median_ms (ms ÷ 1,000), fresh loads, three scored runs. Table T5.
The Ryzen desktop's fresh loads and the laptop's 2026-11-05 pair (n = 3; THROTTLED: gemma4:26b 3/3 at 4 and 1/3 at 20; mistral 3/3 at both); ratios in T5b. The mixture's trade at 20 threads: a third of gemma4:26b's writing speed (14.63 → 9.80) for a first word at 3.54 s instead of 8.68 s, the biggest lever on the wait the house has measured. Source: laptop/summary.json, two-channel-desktop/summary.json, arms[0..3], in 105's kit; T5.
The tables behind the frozen-prompt charts
T1 · Writing speed, tokens a second, the frozen-prompt bench: the EPYC at 32 threads, the laptop at 4 of 24, the mini PC at 4 of 16, the Ryzen desktop at 8. Q4_K_M by the digest in each row; loaded size is ps_after_load[0].size.
| Model (digest; loaded) | EPYC 7532, 128 GB | 290HX Plus, 64 GB | i5-12600H, 32 GB | 3700X, 32 GB DDR4 |
|---|---|---|---|---|
| qwen3.5:9b (6488c96fa5fa…; 6.07 GB) | 13.59 | 7.45 | 9.11 | 6.20 |
| gemma4:12b (4eb23ef187e2…; 8.90 GB) | 10.99 | 4.95 | 5.95 | 4.47 |
| phi4:14b (ac896e5b8b34…; 10.03 GB) | 11.09 | 4.41 | 5.20 | 4.06 |
| mistral-small3.2:24b (5a408ab55df5…; 15.31 GB) | 7.09 | 2.70 | 3.31 | 2.57 |
| gemma4:26b (08ae7ec1744b…; 9.54 GB) | 24.68 | 13.26 | 12.66 | 13.64 |
| nemotron-3.5-lightning:30b-a3b (e7a64ff15fb1…; 25.61 GB) | 31.47 | 15.35 | 14.61 | not run: the fill-in kit stops when under 6 GiB would stay free, and this model left the mini PC 5.35 GiB on 2026-08-25 |
| llama3.3:70b (a6eb4748fd29…; 44.10 GB; writing n = 3) | 2.70 | not run | would not fit 32 GB | would not fit 32 GB |
Note to T1, mixture over dense, from the raw fields: 26B over 24B, 3.48 · 4.91 · 3.82 · 5.31 (EPYC, laptop, mini PC, Ryzen); 30B-A3B over 9B, 2.31 · 2.06 · 1.60; the laptop at 20 threads, 8.44 over 5.14 is 1.64 and 8.53 over 13.05 is 0.65.
T2 · Prompt reading, tokens a second, nothing cached; token counts are the frozen prompt under each tokenizer.
| Model (prompt tokens) | EPYC 7532, 128 GB | 290HX Plus, 64 GB | i5-12600H, 32 GB | 3700X, 32 GB DDR4 |
|---|---|---|---|---|
| qwen3.5:9b (537) | 109.4 | 38.2 | 33.5 | 47.7 |
| gemma4:12b (536) | 78.0 | 24.2 | 20.9 | 31.3 |
| phi4:14b (505) | 62.3 | 19.1 | 14.3 | 23.9 |
| mistral-small3.2:24b (1,023) | 41.5 | 12.4 | 10.5 | 16.4 |
| gemma4:26b (536) | 143.7 | 63.0 | 46.9 | 65.0 |
| nemotron-3.5-lightning:30b-a3b (532) | 132.2 | 54.0 | 37.9 | not run |
| llama3.3:70b (505; n = 1) | 13.4 | not run | would not fit | would not fit |
T3 · First word, seconds, the model already loaded: the same runs as T2.
| Model | EPYC 7532, 128 GB | 290HX Plus, 64 GB | i5-12600H, 32 GB | 3700X, 32 GB DDR4 |
|---|---|---|---|---|
| qwen3.5:9b | 4.92 | 14.06 | 16.03 | 11.26 |
| gemma4:12b | 6.89 | 22.18 | 25.61 | 17.14 |
| phi4:14b | 8.11 | 26.42 | 35.39 | 21.10 |
| mistral-small3.2:24b (1,023 tokens) | 24.63 | 82.36 | 97.67 | 62.45 |
| gemma4:26b | 3.74 | 8.51 | 11.43 | 8.26 |
| nemotron-3.5-lightning:30b-a3b | 4.03 | 9.86 | 14.08 | not run |
| llama3.3:70b (n = 1) | 37.58 | not run | would not fit | would not fit |
T5 · Threads. A dash: not taken (the 2026-08-25 tuned arms were warm runs).
| Machine, date | Model | Threads | Writing (tok/s) | Reading (tok/s) | First word (s) |
|---|---|---|---|---|---|
| Laptop, 2026-08-25 (warm, n = 5) | qwen3.5:9b | 20 | 13.05 | — | — |
| Laptop, 2026-08-25 | gemma4:12b | 20 | 9.46 | — | — |
| Laptop, 2026-08-25 | phi4:14b | 20 | 8.21 | — | — |
| Laptop, 2026-08-25 | mistral-small3.2:24b | 20 | 5.14 | — | — |
| Laptop, 2026-08-25 | gemma4:26b | 20 | 8.44 | — | — |
| Laptop, 2026-08-25 | nemotron-3.5-lightning:30b-a3b | 20 | 8.53 | — | — |
| Mini PC, 2026-08-25 (warm, n = 5) | qwen3.5:9b | 12 | 10.12 | — | — |
| Mini PC, 2026-08-25 | gemma4:12b | 12 | 7.10 | — | — |
| Mini PC, 2026-08-25 | phi4:14b | 12 | 6.36 | — | — |
| Mini PC, 2026-08-25 | mistral-small3.2:24b | 12 | 3.99 | — | — |
| Mini PC, 2026-08-25 | gemma4:26b | 12 | 7.42 | — | — |
| Mini PC, 2026-08-25 | nemotron-3.5-lightning:30b-a3b | 12 | 7.32 | — | — |
| Laptop, 2026-11-05 (fresh, n = 3; THROTTLED 3/3) | gemma4:26b | 4 (default) | 14.63 | 61.8 | 8.68 |
| Laptop, 2026-11-05 (THROTTLED 1/3) | gemma4:26b | 20 | 9.80 | 152.1 | 3.54 |
| Laptop, 2026-11-05 (THROTTLED 3/3) | mistral-small3.2:24b | 4 (default) | 2.65 | 12.3 | 83.30 |
| Laptop, 2026-11-05 (THROTTLED 3/3) | mistral-small3.2:24b | 20 | 5.51 | 36.7 | 27.89 |
| Ryzen desktop, 2026-11-04 (fresh, n = 3; THROTTLED 0/3) | gemma4:26b | 8 (default) | 13.64 | 65.0 | 8.26 |
| Ryzen desktop, 2026-11-04 (THROTTLED 0/3) | gemma4:26b | 4 | 11.92 | 34.9 | 15.37 |
| Ryzen desktop, 2026-11-04 (THROTTLED 0/3) | mistral-small3.2:24b | 8 (default) | 2.57 | 16.4 | 62.45 |
| Ryzen desktop, 2026-11-04 (THROTTLED 0/3) | mistral-small3.2:24b | 4 | 2.67 | 8.5 | 119.75 |
T5b · Thread ratios, from the raw fields.
| Machine | Model | Setting | Writing × | Reading × | First word × |
|---|---|---|---|---|---|
| Laptop | qwen3.5:9b | 20 over 4 | 1.75 | — | — |
| Laptop | gemma4:12b | 20 over 4 | 1.91 | — | — |
| Laptop | phi4:14b | 20 over 4 | 1.86 | — | — |
| Laptop | mistral-small3.2:24b | 20 over 4 | 1.90 | — | — |
| Laptop | gemma4:26b | 20 over 4 | 0.64 | — | — |
| Laptop | nemotron-3.5-lightning:30b-a3b | 20 over 4 | 0.56 | — | — |
| Mini PC | qwen3.5:9b | 12 over 4 | 1.11 | — | — |
| Mini PC | gemma4:12b | 12 over 4 | 1.19 | — | — |
| Mini PC | phi4:14b | 12 over 4 | 1.22 | — | — |
| Mini PC | mistral-small3.2:24b | 12 over 4 | 1.20 | — | — |
| Mini PC | gemma4:26b | 12 over 4 | 0.59 | — | — |
| Mini PC | nemotron-3.5-lightning:30b-a3b | 12 over 4 | 0.50 | — | — |
| Laptop, 2026-11-05 | gemma4:26b | 20 over 4 | 0.67 | 2.46 | 0.41 |
| Laptop, 2026-11-05 | mistral-small3.2:24b | 20 over 4 | 2.08 | 2.99 | 0.33 |
| Ryzen desktop | gemma4:26b | 4 over 8 | 0.87 | 0.54 | 1.86 |
| Ryzen desktop | mistral-small3.2:24b | 4 over 8 | 1.04 | 0.52 | 1.92 |
T8 · Replication: the laptop measured twice, 2026-08-25 (no throttle counter recorded) against 2026-11-05 (fresh loads, n = 3; THROTTLED 3/3 at 4 threads, 1/3 and 3/3 at 20). The record does not say what moved (governors were not recorded alike).
| Metric | Model, threads | 2026-08-25 | 2026-11-05 | Change |
|---|---|---|---|---|
| Writing (tok/s) | gemma4:26b, 4 | 13.258 | 14.627 | +10.3 % |
| Writing (tok/s) | mistral-small3.2:24b, 4 | 2.702 | 2.65 | −1.9 % |
| Writing (tok/s) | gemma4:26b, 20 | 8.438 | 9.798 | +16.1 % |
| Writing (tok/s) | mistral-small3.2:24b, 20 | 5.140 | 5.513 | +7.3 % |
| Prompt reading (tok/s) | gemma4:26b, 4 | 63.0048 | 61.789 | −1.9 % |
| Prompt reading (tok/s) | mistral-small3.2:24b, 4 | 12.4220 | 12.281 | −1.1 % |
| First word (s) | gemma4:26b, 4 | 8.5129 | 8.6797 | +2.0 % |
| First word (s) | mistral-small3.2:24b, 4 | 82.3586 | 83.301 | +1.1 % |
T9 · The cached-prompt trap, on the mini PC.
| Model | Cached first token (ms) | Cached (s) | Fresh first word (s) | Fresh over cached |
|---|---|---|---|---|
| qwen3.5:9b | 210.78 | 0.21 | 16.03 | 76 |
| gemma4:12b | 597.6 | 0.60 | 25.61 | 43 |
| phi4:14b | 196.62 | 0.20 | 35.39 | 180 |
| mistral-small3.2:24b | 314.85 | 0.31 | 97.67 | 310 |
| gemma4:26b | 326.21 | 0.33 | 11.43 | 35 |
| nemotron-3.5-lightning:30b-a3b | 183.42 | 0.18 | 14.08 | 77 |
Is a mixture of experts (MoE) really faster from RAM?
The mixture The dense model
The battery page's kit: runs/cpu-{server,laptop,mini}-m5.json beside -m4, and -m6 beside -m1, derived.decode_tok_s.median; the third panel from supplement-runs/tuned-cpu-laptop-m5, -m4, -m6 and -m1.json (num_thread 20). Exhibit 105's kit: two-channel-desktop/summary.json arms[0] and arms[1].decode_median. Table T1 and its note.
A default-threads lead: at 20 threads on the laptop the 26B mixture leads the 24B dense model by 1.64 times, and the 30B mixture trails the 9B dense model (0.65). Not a quality comparison (none was measured), and not sparsity alone: gemma4:26b writes with its draft model (acceptance 0.60 to 0.67 on the ladder's four texts, mean draft length 2.8 to 3.0; the frozen prompt's acceptance is in no public file), and whether the 30B-A3B mixture drafts was not read. Source: the bench's files and supplement-runs/tuned-cpu-laptop-m1,m4,m5,m6.json in the battery kit; T1's note.
How long is the wait for a long question?
The next three charts are one family: four public prompts of about 500, 2,000, 4,000 and 8,000 tokens (openings of this hub's own articles, each a prefix of the next), a 16,384-token window, 256 tokens written, three fresh loads, two machines at default threads, the same Ollama and digests, 2026-11-08 (UTC). Their 0.5K point is not the frozen prompt or its 4,096 window: a labelled neighbour, never the same bar. Files: fill-in/laptop/summary.json and fill-in/two-channel-desktop/summary.json in this page's kit; T4a.
290HX Plus laptop, 4 thr 3700X desktop, 8 thr
This page's kit, fill-in/laptop/summary.json and fill-in/two-channel-desktop/summary.json, each f2- arm's first_word_median_ms (ms ÷ 1,000), fresh load before each of three scored runs, 2026-11-08. Table T4a.
The whole prompt is read before the first word, so the wait grows with it. At 20 threads this laptop read the frozen prompt 2.46 times faster; the ladder was not run at 20. Not the wait on an already-read prompt (a cache hit). Field: arms[].first_word_median_ms.
Does a longer question slow the writing?
290HX Plus laptop, 4 thr 3700X desktop, 8 thr
This page's kit, fill-in/laptop/summary.json and fill-in/two-channel-desktop/summary.json, each f2- arm's decode_median, fresh load before each of three scored runs, 2026-11-08. Table T4a.
Every gemma4:26b run on the laptop and 6 of the 9 qwen3.5:9b runs are THROTTLED; the Ryzen desktop never reached its 95 °C rule (0/3 on every arm). The mixture's steeper fall is not a property of mixtures: its draft acceptance moves across the texts (0.660 / 0.601 / 0.665 / 0.597 on the laptop) and the dense line stops at 4K. Field: arms[].decode_median.
Does a longer question slow the reading?
290HX Plus laptop, 4 thr 3700X desktop, 8 thr
This page's kit, fill-in/laptop/summary.json and fill-in/two-channel-desktop/summary.json, each f2- arm's prefill_median (prefill_n 3), 2026-11-08. Table T4a.
From 0.5K to 8K the mixture's reading rate fell 15.3 % on the laptop (64.322 → 54.488) and 11.6 % on the desktop (65.213 → 57.663); the dense model's fell 2.9 % and 3.0 % to 4K (38.337 → 37.244; 47.99 → 46.572). The laptop's hottest sensor rose with length under the mixture (98 to 100 °C at 0.5K, 104 to 105 at 8K, every run THROTTLED), so its decline cannot be separated from heat (T4c). Field: arms[].prefill_median.
The tables behind the prompt-size ladder
T4a · The ladder, the laptop (290HX Plus, 64 GB; 4 of 24 threads; fresh loads, n = 3; 2026-11-08, 02:14:27Z to 03:02:18Z).
| Model | Length (file; tokens) | Writing (tok/s) | Reading (tok/s) | First word (s) | THROTTLED |
|---|---|---|---|---|---|
| gemma4:26b | 0.5K (fillin-p0500.txt; 496) | 14.94 | 64.3 | 7.72 | 3/3 |
| gemma4:26b | 2K (fillin-p2000.txt; 1,959) | 12.32 | 60.9 | 32.16 | 3/3 |
| gemma4:26b | 4K (fillin-p4000.txt; 3,994) | 12.12 | 58.2 | 68.67 | 3/3 |
| gemma4:26b | 8K (fillin-p8000.txt; 7,965) | 8.16 | 54.5 | 146.22 | 3/3 |
| qwen3.5:9b | 0.5K (fillin-p0500.txt; 488) | 7.36 | 38.3 | 12.73 | 1/3 |
| qwen3.5:9b | 2K (fillin-p2000.txt; 1,932) | 7.21 | 37.7 | 51.27 | 2/3 |
| qwen3.5:9b | 4K (fillin-p4000.txt; 3,928) | 6.90 | 37.2 | 105.48 | 3/3 |
T4a · The ladder, the Ryzen desktop (3700X, 32 GB DDR4; 8 threads; fresh loads, n = 3; 2026-11-08, 01:00:20Z to 02:06:09Z).
| Model | Length (tokens) | Writing (tok/s) | Reading (tok/s) | First word (s) |
|---|---|---|---|---|
| gemma4:26b | 0.5K (496) | 13.93 | 65.2 | 7.61 |
| gemma4:26b | 2K (1,959) | 12.03 | 62.1 | 31.56 |
| gemma4:26b | 4K (3,994) | 11.66 | 60.4 | 66.13 |
| gemma4:26b | 8K (7,965) | 8.10 | 57.7 | 138.23 |
| qwen3.5:9b | 0.5K (488) | 6.19 | 48.0 | 10.17 |
| qwen3.5:9b | 2K (1,932) | 6.15 | 47.2 | 40.96 |
| qwen3.5:9b | 4K (3,928) | 6.06 | 46.6 | 84.37 |
T4c · The ladder, labels. Draft acceptance is accepted over proposed in each run's log, identical across a text's three runs. The laptop's 105 °C is the processor's limit, under the run's 110 °C stop; its floor was 93 °C.
| Model | Length | THROTTLED (laptop · desktop) | Hottest sensor per run, °C (laptop · desktop) | Draft acceptance (laptop · desktop) |
|---|---|---|---|---|
| gemma4:26b | 0.5K | 3/3 · 0/3 | 99, 100, 98 · 71.75, 71.5, 71.25 | 0.660 (169/256) · 0.649 (168/259) |
| gemma4:26b | 2K | 3/3 · 0/3 | 100, 100, 101 · 73.75, 73.75, 75.75 | 0.601 (164/273) · 0.601 (164/273) |
| gemma4:26b | 4K | 3/3 · 0/3 | 102, 104, 104 · 76.25, 76.5, 76.25 | 0.665 (169/254) · 0.665 (169/254) |
| gemma4:26b | 8K | 3/3 · 0/3 | 104, 105, 105 · 77, 77.5, 77.25 | 0.597 (163/273) · 0.597 (163/273) |
| qwen3.5:9b | 0.5K | 1/3 · 0/3 | 102, 93, 94 · 75.75, 73.5, 73.5 | none (a dense model) |
| qwen3.5:9b | 2K | 2/3 · 0/3 | 98, 104, 103 · 76.75, 76.5, 77 | none |
| qwen3.5:9b | 4K | 3/3 · 0/3 | 104, 105, 104 · 77.75, 78.25, 78.25 | none |
Where do more threads stop helping?
The battery page's kit, supplement-runs/sweep-cpu-mini-m6-moe.json, sweep-cpu-laptop-m1.json and sweep-cpu-mini-m1.json, rows[].decode_median at each num_thread (median of five warm runs). Table T5c.
Warm runs, median of five, 256 tokens written, 2026-08-25; the mini PC has 4 P-cores and 8 E-cores, the laptop 8 and 16. Not the kit's parent sweeps (best of two, 128 tokens, about 3 % high). Files: supplement-runs/sweep-cpu-mini-m6-moe.json, sweep-cpu-laptop-m1.json, sweep-cpu-mini-m1.json, rows[].decode_median, in the battery kit.
T5c · The sweeps, tokens a second while writing, median of five.
| Machine | Model | Threads | Writing (tok/s) |
|---|---|---|---|
| Mini PC | nemotron-3.5-lightning:30b-a3b | 4 | 14.44 |
| Mini PC | nemotron-3.5-lightning:30b-a3b | 6 | 13.60 |
| Mini PC | nemotron-3.5-lightning:30b-a3b | 8 | 12.52 |
| Mini PC | nemotron-3.5-lightning:30b-a3b | 12 | 7.28 |
| Mini PC | nemotron-3.5-lightning:30b-a3b | 16 | 1.27 |
| Laptop | qwen3.5:9b | 4 | 7.41 |
| Laptop | qwen3.5:9b | 8 | 10.48 |
| Laptop | qwen3.5:9b | 12 | 12.17 |
| Laptop | qwen3.5:9b | 16 | 12.82 |
| Laptop | qwen3.5:9b | 20 | 13.05 |
| Laptop | qwen3.5:9b | 24 | 11.98 |
| Mini PC | qwen3.5:9b | 4 | 8.80 |
| Mini PC | qwen3.5:9b | 8 | 9.15 |
| Mini PC | qwen3.5:9b | 12 | 10.09 |
| Mini PC | qwen3.5:9b | 16 | 10.07 |
What did the STREAM triad read on each machine?
Best of 9 reps Worst of 9
The battery page's kit, receipts/triad-cpu-server.txt, triad-cpu-laptop.txt and triad-cpu-mini.txt (TRIAD_BEST_GBs, TRIAD_WORST_GBs). Exhibit 105's kit and this page's kit, each machine's triad.json, receipt.TRIAD_BEST_GBs and receipt.TRIAD_WORST_GBs. Table T6a.
One recipe on every machine (a 100-million-element array, ten reps, the first discarded); the 2026-11 kits' triad.c re-creates August's. The triad scores 24 bytes per element where the hardware moves 32, so traffic can run up to a third above every figure. The EPYC's 2026-11-03 worst rep ran beside live services; the cause is not in the record. The Ryzen desktop's triad read low, its own dense models moving more than this while writing (T6c): not that machine's memory speed. Files: receipts/triad-cpu-{server,laptop,mini}.txt in the battery kit; each machine's triad.json in 105's kit and this page's kit; T6a.
Does writing speed follow the triad?
The battery page's kit: receipts/triad-cpu-{server,laptop,mini}.txt TRIAD_BEST_GBs beside runs/cpu-{server,laptop,mini}-m5.json derived.decode_tok_s.median. Exhibit 105's kit: laptop/triad.json and two-channel-desktop/triad.json receipt.TRIAD_BEST_GBs beside each summary.json arms[0].decode_median and bandwidth_rule.k. Tables T6a and T6b.
One over k is the GB the rule says moved per written token: 4.1 GB on the laptop, 1.6 GB on the Ryzen desktop. The band, 0.20 to 0.28, is the August spread widened a tenth each side, registered on exhibit 105 before its runs. Not an explanation: the Ryzen desktop's verdict stands as exhibit 105 printed it, above the band and unexplained. (Its sticks' rated speed, since read at 3,200 MT/s, does not explain it.) Source: the triad files above, runs/cpu-{server,laptop,mini}-m5.json and each 2026-11 summary.json (arms[0].decode_median, bandwidth_rule.k); T6a, T6b.
The tables behind the triad charts
T6a · The triads, GB/s, and the memory's paper peak (configured MT/s × 8 bytes × channels, from the read each row names). Nothing in the record says a BIOS held still between a 2026-08-25 triad and a 2026-11-08 read.
| Machine | Date | Best of 9 | Worst of 9 | Paper peak (arithmetic) | Configured speed, and when it was read |
|---|---|---|---|---|---|
| EPYC 7532, 128 GB | 2026-08-25 | 100.69 | 100.36 | 204.8 | 3,200 MT/s × 8 channels, from the run's own slot read, 2026-11-03 |
| EPYC 7532, 128 GB | 2026-11-03 | 98.16 | 79.39 | 204.8 | the same |
| 290HX Plus, 64 GB | 2026-08-25 | 59.31 | 49.21 | 89.6 | 5,600 MT/s × 2 channels, per the house's hardware record; not read by a bench run |
| 290HX Plus, 64 GB | 2026-11-05 | 59.83 | 57.77 | 89.6 | the same |
| 290HX Plus, 64 GB | 2026-11-08 | 59.92 | 55.77 | 89.6 | the same |
| i5-12600H, 32 GB | 2026-08-25 | 51.12 | 50.85 | 76.8 | 4,800 MT/s configured (the sticks rated 5,600) × 2 channels, read 2026-11-08 |
| 3700X, 32 GB DDR4 | 2026-11-04 | 21.43 | 21.37 | 51.2 | 3,200 MT/s × 2 channels, read 2026-11-08 |
| 3700X, 32 GB DDR4 | 2026-11-08 | 19.50 | 18.75 | 51.2 | the same |
T6b · The rule: gemma4:26b at default threads, writing over the same-day best triad (band 0.20 to 0.28). The last five rows carry no verdict: the default thread-starves the dense model on both machines, and the Ryzen desktop's three dense models were not registered under the rule.
| Machine | Date | Writing (tok/s) | Best triad (GB/s) | k | The rule |
|---|---|---|---|---|---|
| EPYC 7532, 128 GB | 2026-08-25 | 24.68 | 100.69 | 0.2451 | holds (the battery page printed 0.245) |
| 290HX Plus, 64 GB | 2026-08-25 | 13.26 | 59.31 | 0.2235 | holds (0.224 there) |
| 290HX Plus, 64 GB | 2026-11-05 | 14.63 | 59.83 | 0.2445 | holds (bandwidth_rule.k, HOLDS; THROTTLED 3/3) |
| i5-12600H, 32 GB | 2026-08-25 | 12.66 | 51.12 | 0.2476 | holds (0.248 there) |
| 3700X, 32 GB DDR4 | 2026-11-04 | 13.64 | 21.43 | 0.6366 | above the band, unexplained (bandwidth_rule.k, ABOVE) |
| 290HX Plus, 64 GB (mistral-small3.2:24b) | 2026-11-05 | 2.65 | 59.83 | 0.0443 | no verdict (4 threads starve it; THROTTLED 3/3) |
| 3700X, 32 GB DDR4 (mistral-small3.2:24b) | 2026-11-04 | 2.57 | 21.43 | 0.1199 | no verdict |
| 3700X, 32 GB DDR4 (qwen3.5:9b) | 2026-11-08 | 6.20 | 19.50 | 0.3179 | no verdict (k_no_verdict) |
| 3700X, 32 GB DDR4 (gemma4:12b) | 2026-11-08 | 4.47 | 19.50 | 0.2294 | no verdict |
| 3700X, 32 GB DDR4 (phi4:14b) | 2026-11-08 | 4.06 | 19.50 | 0.2084 | no verdict |
T6c · The dense check, arithmetic from cited fields. Loaded bytes (ps_after_load[0].size, the same digests) × writing tokens a second is the GB/s a dense model would need if it read its whole loaded size once a token; divided by the same-day triad. Two things make that generous: the loaded size also counts the context cache and working buffers (qwen3.5:9b loads 6.07 GB at a 4,096-token window and 6.60 GB at 16,384 in this page's kit), and the triad's 24-of-32-byte scoring lets real traffic run up to 1.33 times its reading. The laptop's dense models at 20 threads sit at 1.33 to 1.42, at that edge; the Ryzen desktop's need 1.83 to 2.09, 38 to 57 % past it, while the no-card verdict there reads PROVEN. So the suspect on that machine is the triad's reading, not the memory; why it reads low is not in the record, and this page guesses no cause.
| Machine, date (triad GB/s) | Model, threads | Loaded GB | Writing (tok/s) | GB/s needed | Needed over triad |
|---|---|---|---|---|---|
| 3700X, 2026-11-08 (19.50) | qwen3.5:9b, 8 | 6.07 | 6.199 | 37.64 | 1.93 |
| 3700X, 2026-11-08 (19.50) | gemma4:12b, 8 | 8.90 | 4.474 | 39.81 | 2.04 |
| 3700X, 2026-11-08 (19.50) | phi4:14b, 8 | 10.03 | 4.064 | 40.78 | 2.09 |
| 3700X, 2026-11-04 (21.43) | mistral-small3.2:24b, 8 | 15.31 | 2.569 | 39.32 | 1.83 |
| 3700X, 2026-11-04 (21.43) | mistral-small3.2:24b, 4 | 15.31 | 2.669 | 40.85 | 1.91 |
| EPYC, 2026-08-25 (100.69) | the four dense models, 32 | 6.07 to 15.31 | 7.091 to 13.594 | — | 0.82 to 1.11 |
| i5-12600H, 2026-08-25 (51.12) | the four dense models, 4 and 12 | 6.07 to 15.31 | 3.313 to 10.120 | — | 0.99 to 1.25 |
| 290HX Plus, 2026-08-25 (59.31) | the four dense models, 20 | 6.07 to 15.31 | 5.140 to 13.052 | — | 1.33 to 1.42 |
What does 128 GB of eight-channel memory buy?
Exhibit 105's kit, eight-channel-desktop/summary.json, arms[0] (8 threads), arms[2] (16) and arms[1] (32): decode_median, prefill_median, first_word_median_ms (ms ÷ 1,000) and request_kj_median; llama.cpp build 11514, 2026-11-03. Table T7a and T7b.
About 180 billion parameters by its model card (Qwen3.8-Flash-Next at IQ3_S, about 6 billion awake per token; 54.8 GB of weights and a 28.8 GB lookup table), on the EPYC desktop alone: llama.cpp build 11514, three 4,038-token prompts, an 8,192-token window, 2026-11-03 (UTC), beside its live services. A different engine, model, quantization, prompt, window and writing clock from every Ollama bar: no shared axis, and no thread advice for smaller models. The first request after each load is included; the 19.03 tokens a second ceiling is the triad over 5.159 GB a token. Files: eight-channel-desktop/summary.json, arms[0], arms[2], arms[1], in 105's kit.
T7a · The big model, speeds. The share is of the 19.03 tok/s ceiling. The 32-thread writing figure is 8.325 in the file; this page's round-half-up rule prints 8.33 where exhibit 105 printed 8.32.
| Threads | Writing (tok/s) | Share of ceiling | Reading (tok/s) | First word (s) |
|---|---|---|---|---|
| 8 | 6.51 | 0.342 | 19.6 | 205.70 |
| 16 | 7.74 | 0.407 | 33.0 | 122.28 |
| 32 | 8.33 | 0.438 | 41.1 | 98.35 |
What does the laptop's processor draw while writing? (the frozen prompt, 2026-11-05)
Exhibit 105's kit, laptop/summary.json, arms[0..3].decode_package_w_median and idle_package.mean_w (RAPL package-0, the processor package's own counter, NOT WALL). Table T4b-105.
RAPL package-0, the processor package's own counter: NOT WALL. A request's energy (T4b-105) includes its 13 to 18 s fresh load. Not beside the EPYC's watts or the ladder's, and not an electricity cost (see Electricity per million tokens, card by card). Files: laptop/summary.json, arms[0..3].decode_package_w_median, idle_package.mean_w, in 105's kit.
And on the long questions? (the prompt-size ladder, 2026-11-08)
This page's kit, fill-in/laptop/summary.json, each f2- arm's decode_package_w_median and idle_package.mean_w (RAPL package-0, NOT WALL). Table T4b.
The same counter, NOT WALL. Not beside the chart above (a different prompt, window and day); the desktop's package counter is not readable (NOT READ). Files: fill-in/laptop/summary.json, arms[].decode_package_w_median, idle_package.mean_w, in this page's kit; T4b.
And the EPYC's, on the big model?
Exhibit 105's kit, eight-channel-desktop/summary.json, arms[0], arms[2] and arms[1].decode_package_w_median and idle_package.mean_w (RAPL package-0, NOT WALL; the live services' draw is not separated). Table T7b.
Model already loaded; the live services' draw is not separated from the package counter; NOT WALL. Not beside either laptop figure. Files: eight-channel-desktop/summary.json, arms[0,2,1].decode_package_w_median, idle_package.mean_w, in 105's kit; T7b.
The tables behind the energy charts
T4b-105 · The frozen prompt, laptop energy (NOT WALL). Joules a token is package watts over writing tokens a second; kJ a request includes the fresh load.
| Arm | Package W | J a token (derived) | kJ a request | THROTTLED |
|---|---|---|---|---|
| gemma4:26b, 4 threads | 78.46 | 5.36 | 2.647 | 3/3 |
| mistral-small3.2:24b, 4 threads | 65.03 | 24.54 | 15.28 | 3/3 |
| gemma4:26b, 20 threads | 110.58 | 11.29 | 3.968 | 1/3 |
| mistral-small3.2:24b, 20 threads | 125.05 | 22.68 | 11.766 | 3/3 |
| Idle, 60 s | 13.5 | — | — | — |
T4b · The ladder, laptop energy (NOT WALL).
| Model | Length | Package W | J a token (derived) | kJ a request | THROTTLED |
|---|---|---|---|---|---|
| gemma4:26b | 0.5K | 72.56 | 4.86 | 2.384 | 3/3 |
| gemma4:26b | 2K | 73.54 | 5.97 | 5.114 | 3/3 |
| gemma4:26b | 4K | 75.36 | 6.22 | 8.802 | 3/3 |
| gemma4:26b | 8K | 71.18 | 8.72 | 16.865 | 3/3 |
| qwen3.5:9b | 0.5K | 60.51 | 8.22 | 3.401 | 1/3 |
| qwen3.5:9b | 2K | 61.31 | 8.50 | 7.128 | 2/3 |
| qwen3.5:9b | 4K | 62.15 | 9.01 | 12.657 | 3/3 |
| Idle, 60 s | — | 14.96 | — | — | — |
T7b · The big model, energy (NOT WALL; the model already loaded).
| Threads | Package W | J a token (derived) | kJ a request |
|---|---|---|---|
| 8 | 115.89 | 17.80 | 26.633 |
| 16 | 131.04 | 16.93 | 20.925 |
| 32 | 147.49 | 17.72 | 19.308 |
| Idle, 60 s | 54.24 | — | — |
An older desktop: ten cores, 48 GB of DDR4
Q4_K_M Q8_0
This page's kit, older-desktop/gpu-3080-m1…m6-cpu-box.json, -x1 and -x2, derived.decode_tok_s.median, three warm runs each under Ollama 0.32.13 on 2026-09-10; the thread count was not recorded. Table T10.
Its own figure, joined to nothing above: Ollama 0.32.13 (not 0.32.15), three warm runs, thread count not recorded, 2026-09-10; 47,040 MiB as the system reports it. Its gemma4:26b is an older build (digest 5571076f3d70…, 25.8B), not the 08ae7ec1744b… of every other bar; The 3080 Rig, Priced printed its 12.8 beside the mini PC's 12.7 without saying so. Its reading and first-word fields are cache hits, not printed; no memory speed or triad was read. Two more models it ran, qwen3.6:27b and nemotron3:33b, are not charted: this house has not read their architecture, and their files ship in the kit. Files: older-desktop/gpu-3080-m1…m6-cpu-box.json, -x1, -x2, derived.decode_tok_s.median, in this page's kit.
T10 · The older desktop, tokens a second while writing.
| Model | Quantization | Writing (tok/s) | Note |
|---|---|---|---|
| qwen3.5:9b | Q4_K_M | 6.96 | Ollama 0.32.13; three warm runs |
| qwen3.5:9b | Q8_0 | 4.39 | |
| gemma4:12b | Q4_K_M | 4.85 | |
| gemma4:12b | Q8_0 | 3.03 | |
| phi4:14b | Q4_K_M | 4.29 | Q8_0 not run |
| mistral-small3.2:24b | Q4_K_M | 2.71 | Q8_0 not run |
| gemma4:26b | Q4_K_M | 12.80 | an older model build, digest 5571076f3d70… (25.8B); Q8_0 not run |
| nemotron-3.5-lightning:30b-a3b | Q4_K_M | 13.06 | Q8_0 not run |
Embeddings on the processor (for search and RAG)
The battery page's kit, runs/cpu-server-x1.json, cpu-laptop-x1.json and cpu-mini-x1.json, embeddings_per_s (100 texts of about 51 words each, sent one at a time). Table T11.
The one non-chat row: nomic-embed-text turning 100 short texts (about 51 words each, one after another) into vectors, the operation behind search and retrieval-augmented generation; 2026-08-25, default threads. The battery page printed "12–26". Files: runs/cpu-{server,laptop,mini}-x1.json, embeddings_per_s, in the battery kit.
T11 · Embeddings a second.
| Machine | Embeddings a second | Texts |
|---|---|---|
| EPYC 7532, 128 GB | 26.50 | 100 |
| 290HX Plus, 64 GB | 15.87 | 100 |
| i5-12600H, 32 GB | 12.12 | 100 |
What the numbers do not say
- No quality reading of any model: every reply was hashed, never kept.
- No Ollama thread sweep on the Ryzen desktop, the EPYC or the i9: the matrix compares each engine's default, not silicon.
- No prompt over about 8K tokens, no window above 16,384, no 8K point for the dense model (not run, for time); the ladder ran on two machines only.
- No controlled DDR4-against-DDR5 pair: the machines differ in processor, cores, threads and memory at once.
- No nemotron-3.5-lightning:30b-a3b on the 32 GB desktop: not run under the fill-in kit's 6 GiB headroom rule, so never failed; no 70B except on the EPYC.
- No wall power anywhere, no package power on the Ryzen desktop, and no energy figure comparable across machines or families (the laptop's kJ include a fresh load, the EPYC's exclude it).
- No gemma4:26b writing speed without its draft model: the 2026-11 logs say it drafted, the 2026-08-25 files did not record it.
- The ladder's prompts are one genre: its length effect is a length effect on this text.
- No governor was recorded alike across benches (schedutil and powersave with two EPP settings in August; none in the November summaries).
- Why the Ryzen desktop's triad reads 19.5 to 21.4 GB/s against its 51.2 GB/s paper peak: not in the record; the page guesses no cause.
- The battery page and The 3080 Rig, Priced take dated notes in later cuts for the two statements corrected above.
Not on this page
- Four homes for one reranker, Small open deciders, measured and EmbeddingGemma 2, measured on release day: processor timings of other tasks, the last CONTENDED on every row by its own rule.
- The battery kit's parent thread sweeps (best of two, 128 tokens), and the mini PC's 2026-08-25 memory-fit run of the 30B mixture (15.21 tok/s with 5.35 GiB left free, under a different stop rule).
- The mini PC's 75.6 W at a UPS meter, the house's one wall reading for one of these machines alone: the battery test's different workload.
How to check our work
The data kit beside this page (CC BY 4.0; every file with its size and sha256) holds what the two earlier kits do not: the 2026-11-08 fill-in runs and receipts, the four public prompts, the dated memory slot reads, the twenty chart specs, the older desktop's files and facts/FACTS.md, one row per bar with its raw field, file, rule and gates. The battery kit's counting-rules.md governs the 2026-08-25 columns; its frozen prompt's text is held out, and its README says why. Rounding is done once, round-half-up on the file's own digits: writing to two decimals, prompt reading to one, the first word to two in seconds (so 10.985, 12.165, 8.325 and 6.055 print 10.99, 12.17, 8.33 and 6.06), watts and kJ as the file prints, k to four decimals, ratios and percentages from the raw fields.
The rest of the seminar
- Two Hours at 12 tok/s — On Battery.
- Speeds from RAM alone.
- Mixture of experts, in plain words.
- Why the first word comes sooner: the big mixture with a card helping.
- The 3080 Rig, Priced: the older desktop.
- Electricity per million tokens, card by card.
Who ran this, and thanks
The models ran on Ollama 0.32.15 (0.32.13 on the older desktop) with llama.cpp beneath it, the big mixture on llama.cpp build 11514. They are Alibaba's Qwen3.5 and Qwen3.8-Flash-Next, Google's Gemma 4, Microsoft's Phi-4, Mistral Small 3.2 from Mistral AI, NVIDIA's Nemotron 3.5 Lightning, Meta's Llama 3.3 and Nomic's nomic-embed-text; each earlier page names the licence it found. A small human team pasted the stages, read the memory slots and signed the amendments; AI agents built the kits, drew the charts and wrote this page under its rulings.
Sources
- The three kits: /two-hours-on-battery/data/, /speeds-from-ram-alone/data/ and /ram-speeds-compared/data/.
- Speeds from RAM alone: "Memory speed, and the rule this bench registered" and "The two-channel desktop: AMD Ryzen 7 3700X, 32 GB of DDR4".
- Two Hours at 12 tok/s — On Battery: "The one table to remember", "The wait", "Set the thread count".