# Speeds from RAM alone, compared

*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.*

*Published 2026-11-10 (UTC) · A small (human) team and a fleet of AI agents.*

**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 (at 220 words/min) · 21 tables · data kit: yes

https://research.strata2signal.com/ram-speeds-compared/

---

## The short answer: two models on four machines {#the-short-answer-two-models-on-four-machines}

Both models serve the house's own products: Mistral reads what strangers type at [RuleSage](https://rulesage.strata2signal.com/), our board-game rules helper, and Gemma 4 speaks for [RealKeep](https://realkeep.strata2signal.com/), a small game. Here both run from memory alone, at default threads.

**The short answer: two models on four machines, no graphics card in the path**

*Tokens a second while writing, and seconds to the first word of a fresh answer, at Ollama's default threads: 4 of the laptop's 24 and 4 of the mini PC's 16, so not a hardware ranking (at 20 threads the laptop wrote the dense model at 5.14). The 3700X row is 2026-11-04 fresh loads (n = 3); the rest are 2026-08-25, writing from warm runs (n = 5) and the first word from two cold runs; longer writes faster, shorter waits less.*

The short answer: two models on four machines, no graphics card in the path. Writing speed, tok/s. EPYC 7532, 128 GB: gemma4:26b, a 26B mixture 24.68 tok/s; mistral-small3.2:24b, 24B dense 7.09 tok/s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: gemma4:26b, a 26B mixture 13.26 tok/s; mistral-small3.2:24b, 24B dense 2.70 tok/s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: gemma4:26b, a 26B mixture 12.66 tok/s; mistral-small3.2:24b, 24B dense 3.31 tok/s. Mini PC · DDR5-4800 · 4 of 16 threads (default). 3700X, 32 GB DDR4: gemma4:26b, a 26B mixture 13.64 tok/s; mistral-small3.2:24b, 24B dense 2.57 tok/s. Desktop · 2 ch DDR4-3200 · 8 threads (default). First word (s) · mistral reads 1,023 tokens. EPYC 7532, 128 GB: gemma4:26b, a 26B mixture 3.74 s; mistral-small3.2:24b, 24B dense 24.63 s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: gemma4:26b, a 26B mixture 8.51 s; mistral-small3.2:24b, 24B dense 82.36 s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: gemma4:26b, a 26B mixture 11.43 s; mistral-small3.2:24b, 24B dense 97.67 s. Mini PC · DDR5-4800 · 4 of 16 threads (default). 3700X, 32 GB DDR4: gemma4:26b, a 26B mixture 8.26 s; mistral-small3.2:24b, 24B dense 62.45 s. Desktop · 2 ch DDR4-3200 · 8 threads (default).

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](/two-hours-on-battery/data/) (of *Two Hours at 12 tok/s — On Battery*, the battery page); `two-channel-desktop/summary.json` in [105's kit](/speeds-from-ram-alone/data/) (of *Speeds from RAM alone*, exhibit 105) and [this page's kit](/ram-speeds-compared/data/).

### The machines {#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 {#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? {#how-fast-does-each-model-write-on-each-machine}

**Writing speed: seven models on four machines, each at its engine's default threads**

*Tokens a second while writing at Ollama's default threads (32, 4 of 24, 4 of 16, 8 — printed in each row's note), so not a hardware ranking. The 3700X rows are fresh loads (n = 3, 2026-11-04 and 2026-11-08), the rest 2026-08-25 warm runs (n = 5; the 70B 3): a gap under about 16 % between the two is not a finding. A longer bar writes faster.*

Writing speed: seven models on four machines, each at its engine's default threads. qwen3.5:9b, dense 9B · 537-token prompt. EPYC 7532, 128 GB: Writing speed 13.59 tok/s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: Writing speed 7.45 tok/s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: Writing speed 9.11 tok/s. Mini PC · DDR5-4800 · 4 of 16 threads (default). 3700X, 32 GB DDR4: Writing speed 6.20 tok/s. Desktop · 2 ch DDR4-3200 · 8 threads (default). gemma4:12b, dense 12B · 536-token prompt. EPYC 7532, 128 GB: Writing speed 10.99 tok/s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: Writing speed 4.95 tok/s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: Writing speed 5.95 tok/s. Mini PC · DDR5-4800 · 4 of 16 threads (default). 3700X, 32 GB DDR4: Writing speed 4.47 tok/s. Desktop · 2 ch DDR4-3200 · 8 threads (default). phi4:14b, dense 14B · 505-token prompt. EPYC 7532, 128 GB: Writing speed 11.09 tok/s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: Writing speed 4.41 tok/s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: Writing speed 5.20 tok/s. Mini PC · DDR5-4800 · 4 of 16 threads (default). 3700X, 32 GB DDR4: Writing speed 4.06 tok/s. Desktop · 2 ch DDR4-3200 · 8 threads (default). mistral-small3.2:24b, dense · 1,023 tokens. EPYC 7532, 128 GB: Writing speed 7.09 tok/s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: Writing speed 2.70 tok/s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: Writing speed 3.31 tok/s. Mini PC · DDR5-4800 · 4 of 16 threads (default). 3700X, 32 GB DDR4: Writing speed 2.57 tok/s. Desktop · 2 ch DDR4-3200 · 8 threads (default). gemma4:26b, mixture · 536-token prompt. EPYC 7532, 128 GB: Writing speed 24.68 tok/s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: Writing speed 13.26 tok/s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: Writing speed 12.66 tok/s. Mini PC · DDR5-4800 · 4 of 16 threads (default). 3700X, 32 GB DDR4: Writing speed 13.64 tok/s. Desktop · 2 ch DDR4-3200 · 8 threads (default). Nemotron 30B-A3B, mixture · 532 tokens. EPYC 7532, 128 GB: Writing speed 31.47 tok/s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: Writing speed 15.35 tok/s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: Writing speed 14.61 tok/s. Mini PC · DDR5-4800 · 4 of 16 threads (default). llama3.3:70b, dense 70B · EPYC only. EPYC 7532, 128 GB: Writing speed 2.70 tok/s. Desktop · 8 ch DDR4-3200 · 32 threads (default).

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? {#should-i-raise-the-thread-count}

**Should I raise the thread count? Writing speed at the default and one other setting**

*Tokens a second while writing at Ollama's default thread count and at one other setting, named in each heading; a longer bar writes faster.*

Should I raise the thread count? Writing speed at the default and one other setting. Laptop: 4 → 20 threads (more). qwen3.5:9b: Default threads 7.45 tok/s; The other setting (in the heading) 13.05 tok/s. gemma4:12b: Default threads 4.95 tok/s; The other setting (in the heading) 9.46 tok/s. phi4:14b: Default threads 4.41 tok/s; The other setting (in the heading) 8.21 tok/s. mistral-small3.2: Default threads 2.70 tok/s; The other setting (in the heading) 5.14 tok/s. gemma4:26b: Default threads 13.26 tok/s; The other setting (in the heading) 8.44 tok/s. Nemotron 30B-A3B: Default threads 15.35 tok/s; The other setting (in the heading) 8.53 tok/s. Mini PC: 4 → 12 threads (more). qwen3.5:9b: Default threads 9.11 tok/s; The other setting (in the heading) 10.12 tok/s. gemma4:12b: Default threads 5.95 tok/s; The other setting (in the heading) 7.10 tok/s. phi4:14b: Default threads 5.20 tok/s; The other setting (in the heading) 6.36 tok/s. mistral-small3.2: Default threads 3.31 tok/s; The other setting (in the heading) 3.99 tok/s. gemma4:26b: Default threads 12.66 tok/s; The other setting (in the heading) 7.42 tok/s. Nemotron 30B-A3B: Default threads 14.61 tok/s; The other setting (in the heading) 7.32 tok/s. Ryzen 7 3700X: 8 → 4 threads (FEWER). gemma4:26b: Default threads 13.64 tok/s; The other setting (in the heading) 11.92 tok/s. mistral-small3.2: Default threads 2.57 tok/s; The other setting (in the heading) 2.67 tok/s.

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-hours-on-battery/data/); `two-channel-desktop/summary.json` in [105's kit](/speeds-from-ram-alone/data/).

## How long until the first word of the answer? (time to first token, TTFT) {#how-long-until-the-first-word-of-the-answer-time-to-first}

**How long until the first word of the answer? A fresh question, the model already loaded**

*Seconds from sending a fresh question to the first word of the answer, the model already loaded and nothing cached, at default threads; a shorter bar is a shorter wait. The 3700X rows are three fresh runs (2026-11-04 and 2026-11-08), the rest two cold runs on 2026-08-25 (the 70B one).*

How long until the first word of the answer? A fresh question, the model already loaded. qwen3.5:9b, dense 9B · 537-token prompt. EPYC 7532, 128 GB: First word 4.92 s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: First word 14.06 s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: First word 16.03 s. Mini PC · DDR5-4800 · 4 of 16 threads (default). 3700X, 32 GB DDR4: First word 11.26 s. Desktop · 2 ch DDR4-3200 · 8 threads (default). gemma4:12b, dense 12B · 536-token prompt. EPYC 7532, 128 GB: First word 6.89 s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: First word 22.18 s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: First word 25.61 s. Mini PC · DDR5-4800 · 4 of 16 threads (default). 3700X, 32 GB DDR4: First word 17.14 s. Desktop · 2 ch DDR4-3200 · 8 threads (default). phi4:14b, dense 14B · 505-token prompt. EPYC 7532, 128 GB: First word 8.11 s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: First word 26.42 s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: First word 35.39 s. Mini PC · DDR5-4800 · 4 of 16 threads (default). 3700X, 32 GB DDR4: First word 21.10 s. Desktop · 2 ch DDR4-3200 · 8 threads (default). mistral-small3.2:24b, dense · 1,023 tokens. EPYC 7532, 128 GB: First word 24.63 s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: First word 82.36 s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: First word 97.67 s. Mini PC · DDR5-4800 · 4 of 16 threads (default). 3700X, 32 GB DDR4: First word 62.45 s. Desktop · 2 ch DDR4-3200 · 8 threads (default). gemma4:26b, mixture · 536-token prompt. EPYC 7532, 128 GB: First word 3.74 s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: First word 8.51 s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: First word 11.43 s. Mini PC · DDR5-4800 · 4 of 16 threads (default). 3700X, 32 GB DDR4: First word 8.26 s. Desktop · 2 ch DDR4-3200 · 8 threads (default). Nemotron 30B-A3B, mixture · 532 tokens. EPYC 7532, 128 GB: First word 4.03 s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: First word 9.86 s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: First word 14.08 s. Mini PC · DDR5-4800 · 4 of 16 threads (default). llama3.3:70b, dense 70B · EPYC only. EPYC 7532, 128 GB: First word 37.58 s. Desktop · 8 ch DDR4-3200 · 32 threads (default).

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) {#how-fast-does-each-machine-read-the-question-prompt}

**How fast does each machine read the question? Prompt processing with nothing cached**

*Prompt tokens read a second with the model just loaded and nothing cached, at default threads; a longer bar reads faster. The 3700X rows are three fresh runs (2026-11-04 and 2026-11-08), the rest two cold runs on 2026-08-25 (the 70B one), the same construction.*

How fast does each machine read the question? Prompt processing with nothing cached. qwen3.5:9b, dense 9B · 537-token prompt. EPYC 7532, 128 GB: Prompt reading 109.4 tok/s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: Prompt reading 38.2 tok/s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: Prompt reading 33.5 tok/s. Mini PC · DDR5-4800 · 4 of 16 threads (default). 3700X, 32 GB DDR4: Prompt reading 47.7 tok/s. Desktop · 2 ch DDR4-3200 · 8 threads (default). gemma4:12b, dense 12B · 536-token prompt. EPYC 7532, 128 GB: Prompt reading 78.0 tok/s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: Prompt reading 24.2 tok/s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: Prompt reading 20.9 tok/s. Mini PC · DDR5-4800 · 4 of 16 threads (default). 3700X, 32 GB DDR4: Prompt reading 31.3 tok/s. Desktop · 2 ch DDR4-3200 · 8 threads (default). phi4:14b, dense 14B · 505-token prompt. EPYC 7532, 128 GB: Prompt reading 62.3 tok/s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: Prompt reading 19.1 tok/s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: Prompt reading 14.3 tok/s. Mini PC · DDR5-4800 · 4 of 16 threads (default). 3700X, 32 GB DDR4: Prompt reading 23.9 tok/s. Desktop · 2 ch DDR4-3200 · 8 threads (default). mistral-small3.2:24b, dense · 1,023 tokens. EPYC 7532, 128 GB: Prompt reading 41.5 tok/s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: Prompt reading 12.4 tok/s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: Prompt reading 10.5 tok/s. Mini PC · DDR5-4800 · 4 of 16 threads (default). 3700X, 32 GB DDR4: Prompt reading 16.4 tok/s. Desktop · 2 ch DDR4-3200 · 8 threads (default). gemma4:26b, mixture · 536-token prompt. EPYC 7532, 128 GB: Prompt reading 143.7 tok/s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: Prompt reading 63.0 tok/s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: Prompt reading 46.9 tok/s. Mini PC · DDR5-4800 · 4 of 16 threads (default). 3700X, 32 GB DDR4: Prompt reading 65.0 tok/s. Desktop · 2 ch DDR4-3200 · 8 threads (default). Nemotron 30B-A3B, mixture · 532 tokens. EPYC 7532, 128 GB: Prompt reading 132.2 tok/s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: Prompt reading 54.0 tok/s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: Prompt reading 37.9 tok/s. Mini PC · DDR5-4800 · 4 of 16 threads (default). llama3.3:70b, dense 70B · EPYC only. EPYC 7532, 128 GB: Prompt reading 13.4 tok/s. Desktop · 8 ch DDR4-3200 · 32 threads (default).

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? {#why-do-some-pages-claim-a-0-2-second-first-word}

**Why some pages claim a 0.2-second first word: the same prompt sent again, against a fresh one**

*Seconds to the first word on the mini PC when the same prompt is sent again to a loaded model, against a fresh prompt; the short bars are cache hits.*

Why some pages claim a 0.2-second first word: the same prompt sent again, against a fresh one. qwen3.5:9b: The same prompt sent again (cached) 0.21 s; A fresh prompt 16.03 s. gemma4:12b: The same prompt sent again (cached) 0.60 s; A fresh prompt 25.61 s. phi4:14b: The same prompt sent again (cached) 0.20 s; A fresh prompt 35.39 s. mistral-small3.2: The same prompt sent again (cached) 0.31 s; A fresh prompt 97.67 s. gemma4:26b: The same prompt sent again (cached) 0.33 s; A fresh prompt 11.43 s. Nemotron 30B-A3B: The same prompt sent again (cached) 0.18 s; A fresh prompt 14.08 s.

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](/two-hours-on-battery/data/); T9.

## Do more threads shorten the wait? {#do-more-threads-shorten-the-wait}

**Do more threads shorten the wait? Prompt reading and the first word at two thread settings**

*Prompt tokens read a second, and seconds to the first word, at Ollama's default threads and one other setting (named in each heading); longer reads faster, shorter waits less.*

Do more threads shorten the wait? Prompt reading and the first word at two thread settings. Laptop, 4 → 20 threads · prompt reading. gemma4:26b: Default threads 61.8 tok/s; The other setting (in the heading) 152.1 tok/s. THROTTLED 3/3 at 4 thr · 1/3 at 20 thr. mistral-small3.2: Default threads 12.3 tok/s; The other setting (in the heading) 36.7 tok/s. THROTTLED 3/3 at 4 thr · 3/3 at 20 thr. Ryzen 7 3700X, 8 → 4 threads · prompt reading. gemma4:26b: Default threads 65.0 tok/s; The other setting (in the heading) 34.9 tok/s. THROTTLED 0/3 at 8 thr · 0/3 at 4 thr. mistral-small3.2: Default threads 16.4 tok/s; The other setting (in the heading) 8.5 tok/s. THROTTLED 0/3 at 8 thr · 0/3 at 4 thr. Laptop, 4 → 20 threads · first word. gemma4:26b: Default threads 8.68 s; The other setting (in the heading) 3.54 s. THROTTLED 3/3 at 4 thr · 1/3 at 20 thr. mistral-small3.2: Default threads 83.30 s; The other setting (in the heading) 27.89 s. THROTTLED 3/3 at 4 thr · 3/3 at 20 thr. Ryzen 7 3700X, 8 → 4 threads · first word. gemma4:26b: Default threads 8.26 s; The other setting (in the heading) 15.37 s. THROTTLED 0/3 at 8 thr · 0/3 at 4 thr. mistral-small3.2: Default threads 62.45 s; The other setting (in the heading) 119.75 s. THROTTLED 0/3 at 8 thr · 0/3 at 4 thr.

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](/speeds-from-ram-alone/data/); T5.

### The tables behind the frozen-prompt charts {#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? {#is-a-mixture-of-experts-moe-really-faster-from-ram}

**Is a mixture of experts (MoE) really faster from RAM? A mixture beside a dense model on the same machine**

*Tokens a second while writing, a mixture of experts beside a dense model on the same machine, at default threads and (third panel) at 20; a longer bar writes faster. Every gemma4:26b bar includes its built-in draft model; no dense model has one.*

Is a mixture of experts (MoE) really faster from RAM? A mixture beside a dense model on the same machine. 26B mixture vs 24B dense, default threads. EPYC 7532, 128 GB: The mixture 24.68 tok/s; The dense model 7.09 tok/s. Mixture over dense: 3.48. 290HX Plus, 64 GB: The mixture 13.26 tok/s; The dense model 2.70 tok/s. Mixture over dense: 4.91. i5-12600H, 32 GB: The mixture 12.66 tok/s; The dense model 3.31 tok/s. Mixture over dense: 3.82. 3700X, 32 GB DDR4: The mixture 13.64 tok/s; The dense model 2.57 tok/s. Mixture over dense: 5.31. 30B-A3B mixture vs 9B dense, default threads. EPYC 7532, 128 GB: The mixture 31.47 tok/s; The dense model 13.59 tok/s. Mixture over dense: 2.31. 290HX Plus, 64 GB: The mixture 15.35 tok/s; The dense model 7.45 tok/s. Mixture over dense: 2.06. i5-12600H, 32 GB: The mixture 14.61 tok/s; The dense model 9.11 tok/s. Mixture over dense: 1.60. The laptop at 20 threads (2026-08-25). 26B vs 24B dense: The mixture 8.44 tok/s; The dense model 5.14 tok/s. Mixture over dense: 1.64. 30B-A3B vs 9B: The mixture 8.53 tok/s; The dense model 13.05 tok/s. Mixture over dense: 0.65.

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](/two-hours-on-battery/data/); T1's note.

## How long is the wait for a long question? {#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](/ram-speeds-compared/data/); T4a.

**How long is the wait for a long question? The first word as the prompt grows from 0.5K to 8K tokens**

*Seconds to the first word of a fresh answer as the question grows from about 500 to about 8,000 tokens, at default threads; a shorter bar is a shorter wait.*

How long is the wait for a long question? The first word as the prompt grows from 0.5K to 8K tokens. gemma4:26b, a 26B mixture. 0.5K (496 tok): 290HX Plus laptop, 4 thr 7.72 s; 3700X desktop, 8 thr 7.61 s. Laptop THROTTLED 3/3 · desktop THROTTLED 0/3. 2K (1,959 tok): 290HX Plus laptop, 4 thr 32.16 s; 3700X desktop, 8 thr 31.56 s. Laptop THROTTLED 3/3 · desktop THROTTLED 0/3. 4K (3,994 tok): 290HX Plus laptop, 4 thr 68.67 s; 3700X desktop, 8 thr 66.13 s. Laptop THROTTLED 3/3 · desktop THROTTLED 0/3. 8K (7,965 tok): 290HX Plus laptop, 4 thr 146.22 s; 3700X desktop, 8 thr 138.23 s. Laptop THROTTLED 3/3 · desktop THROTTLED 0/3. qwen3.5:9b, dense 9B. 0.5K (488 tok): 290HX Plus laptop, 4 thr 12.73 s; 3700X desktop, 8 thr 10.17 s. Laptop THROTTLED 1/3 · desktop THROTTLED 0/3. 2K (1,932 tok): 290HX Plus laptop, 4 thr 51.27 s; 3700X desktop, 8 thr 40.96 s. Laptop THROTTLED 2/3 · desktop THROTTLED 0/3. 4K (3,928 tok): 290HX Plus laptop, 4 thr 105.48 s; 3700X desktop, 8 thr 84.37 s. Laptop THROTTLED 3/3 · desktop THROTTLED 0/3.

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? {#does-a-longer-question-slow-the-writing}

**Does a longer question slow the writing? Writing speed after prompts of four lengths**

*Tokens a second while writing 256 tokens after questions of four lengths, at default threads; a longer bar writes faster.*

Does a longer question slow the writing? Writing speed after prompts of four lengths. gemma4:26b, a 26B mixture. 0.5K (496 tok): 290HX Plus laptop, 4 thr 14.94 tok/s; 3700X desktop, 8 thr 13.93 tok/s. Laptop THROTTLED 3/3 · desktop THROTTLED 0/3. 2K (1,959 tok): 290HX Plus laptop, 4 thr 12.32 tok/s; 3700X desktop, 8 thr 12.03 tok/s. Laptop THROTTLED 3/3 · desktop THROTTLED 0/3. 4K (3,994 tok): 290HX Plus laptop, 4 thr 12.12 tok/s; 3700X desktop, 8 thr 11.66 tok/s. Laptop THROTTLED 3/3 · desktop THROTTLED 0/3. 8K (7,965 tok): 290HX Plus laptop, 4 thr 8.16 tok/s; 3700X desktop, 8 thr 8.10 tok/s. Laptop THROTTLED 3/3 · desktop THROTTLED 0/3. qwen3.5:9b, dense 9B. 0.5K (488 tok): 290HX Plus laptop, 4 thr 7.36 tok/s; 3700X desktop, 8 thr 6.19 tok/s. Laptop THROTTLED 1/3 · desktop THROTTLED 0/3. 2K (1,932 tok): 290HX Plus laptop, 4 thr 7.21 tok/s; 3700X desktop, 8 thr 6.15 tok/s. Laptop THROTTLED 2/3 · desktop THROTTLED 0/3. 4K (3,928 tok): 290HX Plus laptop, 4 thr 6.90 tok/s; 3700X desktop, 8 thr 6.06 tok/s. Laptop THROTTLED 3/3 · desktop THROTTLED 0/3.

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? {#does-a-longer-question-slow-the-reading}

**Does a longer question slow the reading? Prompt reading at four lengths**

*Prompt tokens read a second at four question lengths, at default threads; a longer bar reads faster.*

Does a longer question slow the reading? Prompt reading at four lengths. gemma4:26b, a 26B mixture. 0.5K (496 tok): 290HX Plus laptop, 4 thr 64.3 tok/s; 3700X desktop, 8 thr 65.2 tok/s. Laptop THROTTLED 3/3 · desktop THROTTLED 0/3. 2K (1,959 tok): 290HX Plus laptop, 4 thr 60.9 tok/s; 3700X desktop, 8 thr 62.1 tok/s. Laptop THROTTLED 3/3 · desktop THROTTLED 0/3. 4K (3,994 tok): 290HX Plus laptop, 4 thr 58.2 tok/s; 3700X desktop, 8 thr 60.4 tok/s. Laptop THROTTLED 3/3 · desktop THROTTLED 0/3. 8K (7,965 tok): 290HX Plus laptop, 4 thr 54.5 tok/s; 3700X desktop, 8 thr 57.7 tok/s. Laptop THROTTLED 3/3 · desktop THROTTLED 0/3. qwen3.5:9b, dense 9B. 0.5K (488 tok): 290HX Plus laptop, 4 thr 38.3 tok/s; 3700X desktop, 8 thr 48.0 tok/s. Laptop THROTTLED 1/3 · desktop THROTTLED 0/3. 2K (1,932 tok): 290HX Plus laptop, 4 thr 37.7 tok/s; 3700X desktop, 8 thr 47.2 tok/s. Laptop THROTTLED 2/3 · desktop THROTTLED 0/3. 4K (3,928 tok): 290HX Plus laptop, 4 thr 37.2 tok/s; 3700X desktop, 8 thr 46.6 tok/s. Laptop THROTTLED 3/3 · desktop THROTTLED 0/3.

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 {#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? {#where-do-more-threads-stop-helping}

**Where do more threads stop helping? Writing speed by thread count**

*Tokens a second while writing at each thread count, one model per panel; a longer bar writes faster.*

Where do more threads stop helping? Writing speed by thread count. i5-12600H mini PC · Nemotron 30B-A3B. 4 threads: Writing speed 14.44 tok/s. 6 threads: Writing speed 13.60 tok/s. 8 threads: Writing speed 12.52 tok/s. 12 threads: Writing speed 7.28 tok/s. 16 threads: Writing speed 1.27 tok/s. 290HX Plus laptop · qwen3.5:9b. 4 threads: Writing speed 7.41 tok/s. 8 threads: Writing speed 10.48 tok/s. 12 threads: Writing speed 12.17 tok/s. 16 threads: Writing speed 12.82 tok/s. 20 threads: Writing speed 13.05 tok/s. 24 threads: Writing speed 11.98 tok/s. i5-12600H mini PC · qwen3.5:9b. 4 threads: Writing speed 8.80 tok/s. 8 threads: Writing speed 9.15 tok/s. 12 threads: Writing speed 10.09 tok/s. 16 threads: Writing speed 10.07 tok/s.

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](/two-hours-on-battery/data/).

**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? {#what-did-the-stream-triad-read-on-each-machine}

**What did the STREAM triad read on each machine? Best and worst of nine reps**

*What the STREAM triad memory test read on each machine, best and worst of nine reps, in GB/s; a longer bar read more.*

What did the STREAM triad read on each machine? Best and worst of nine reps. EPYC 7532, 128 GB: Best of 9 reps 100.69 GB/s; Worst of 9 100.36 GB/s. 2026-08-25, idle box. EPYC 7532, 128 GB: Best of 9 reps 98.16 GB/s; Worst of 9 79.39 GB/s. 2026-11-03, live services beside it. 290HX Plus, 64 GB: Best of 9 reps 59.31 GB/s; Worst of 9 49.21 GB/s. 2026-08-25. 290HX Plus, 64 GB: Best of 9 reps 59.83 GB/s; Worst of 9 57.77 GB/s. 2026-11-05. 290HX Plus, 64 GB: Best of 9 reps 59.92 GB/s; Worst of 9 55.77 GB/s. 2026-11-08. i5-12600H, 32 GB: Best of 9 reps 51.12 GB/s; Worst of 9 50.85 GB/s. 2026-08-25. 3700X, 32 GB DDR4: Best of 9 reps 21.43 GB/s; Worst of 9 21.37 GB/s. 2026-11-04 · triad read low here (next chart). 3700X, 32 GB DDR4: Best of 9 reps 19.50 GB/s; Worst of 9 18.75 GB/s. 2026-11-08 · triad read low here (next chart).

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](/two-hours-on-battery/data/); each machine's `triad.json` in [105's kit](/speeds-from-ram-alone/data/) and [this page's kit](/ram-speeds-compared/data/); T6a.

## Does writing speed follow the triad? {#does-writing-speed-follow-the-triad}

**Does writing speed follow the triad? What the triad read, and what gemma4:26b wrote the same day**

*What the triad read, and what gemma4:26b wrote on the same machine the same day; the ratio in each writing row's note is the house's bandwidth rule (band 0.20–0.28).*

Does writing speed follow the triad? What the triad read, and what gemma4:26b wrote the same day. Best triad, GB/s (best of 9 reps). EPYC 7532, 128 GB: Measured 100.69 GB/s. 2026-08-25, idle box. 290HX Plus, 64 GB: Measured 59.31 GB/s. 2026-08-25. 290HX Plus, 64 GB: Measured 59.83 GB/s. 2026-11-05 · THROTTLED 3/3 on its runs. i5-12600H, 32 GB: Measured 51.12 GB/s. 2026-08-25. 3700X, 32 GB DDR4: Measured 21.43 GB/s. 2026-11-04 · triad read low here (text). gemma4:26b writing, tok/s, same machine and day. EPYC 7532, 128 GB: Measured 24.68 tok/s. Ratio k 0.2451 · holds. 290HX Plus, 64 GB: Measured 13.26 tok/s. Ratio k 0.2235 · holds. 290HX Plus, 64 GB: Measured 14.63 tok/s. Ratio k 0.2445 · holds · THROTTLED 3/3. i5-12600H, 32 GB: Measured 12.66 tok/s. Ratio k 0.2476 · holds. 3700X, 32 GB DDR4: Measured 13.64 tok/s. Ratio k 0.6366 · above the band, unexplained.

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 {#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? {#what-does-128-gb-of-eight-channel-memory-buy}

**What does 128 GB of eight-channel memory buy? A 180B mixture from memory alone, at three thread counts**

*One 180-billion-parameter mixture, Qwen3.8-Flash-Next at IQ3\_S (about three bits a weight; about 6 billion parameters awake per token), from 128 GB of memory alone beside that machine's live services, at three thread counts: writing, prompt reading, the first word and the energy per request (NOT WALL).*

What does 128 GB of eight-channel memory buy? A 180B mixture from memory alone, at three thread counts. Writing speed, tok/s (client clock). 8 threads: Measured 6.51 tok/s. 16 threads: Measured 7.74 tok/s. 32 threads: Measured 8.33 tok/s. Prompt reading, tok/s (4,038-token prompts). 8 threads: Measured 19.6 tok/s. 16 threads: Measured 33.0 tok/s. 32 threads: Measured 41.1 tok/s. First word, s. 8 threads: Measured 205.70 s. 16 threads: Measured 122.28 s. 32 threads: Measured 98.35 s. Energy a request, kJ (NOT WALL, model loaded). 8 threads: Measured 26.633 kJ. 16 threads: Measured 20.925 kJ. 32 threads: Measured 19.308 kJ.

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](/speeds-from-ram-alone/data/).

**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) {#what-does-the-laptops-processor-draw-while-writing-the}

**What does the laptop's processor draw while writing? The frozen prompt, 2026-11-05 (NOT WALL)**

*Watts drawn by the laptop's processor package while writing, two models at two thread counts, and at idle; a shorter bar draws less; NOT WALL, the whole computer draws more.*

What does the laptop's processor draw while writing? The frozen prompt, 2026-11-05 (NOT WALL). gemma4:26b 4 thr: Package watts 78.46 W. THROTTLED 3/3. mistral 24B 4 thr: Package watts 65.03 W. THROTTLED 3/3. gemma4:26b 20 thr: Package watts 110.58 W. THROTTLED 1/3. mistral 24B 20 thr: Package watts 125.05 W. THROTTLED 3/3. Idle, 60 s: Package watts 13.5 W.

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*](/electricity-per-million-tokens/)). Files: `laptop/summary.json`, `arms[0..3].decode_package_w_median`, `idle_package.mean_w`, in [105's kit](/speeds-from-ram-alone/data/).

## And on the long questions? (the prompt-size ladder, 2026-11-08) {#and-on-the-long-questions-the-prompt-size-ladder-2026-11-08}

**And on the long questions? The laptop's processor package on the prompt-size ladder, 2026-11-08 (NOT WALL)**

*Watts drawn by the laptop's processor package while writing after questions of four lengths, and at idle; a shorter bar draws less; NOT WALL.*

And on the long questions? The laptop's processor package on the prompt-size ladder, 2026-11-08 (NOT WALL). gemma4:26b, a 26B mixture. 0.5K (496 tok): Package watts 72.56 W. THROTTLED 3/3. 2K (1,959 tok): Package watts 73.54 W. THROTTLED 3/3. 4K (3,994 tok): Package watts 75.36 W. THROTTLED 3/3. 8K (7,965 tok): Package watts 71.18 W. THROTTLED 3/3. qwen3.5:9b, dense 9B. 0.5K (488 tok): Package watts 60.51 W. THROTTLED 1/3. 2K (1,932 tok): Package watts 61.31 W. THROTTLED 2/3. 4K (3,928 tok): Package watts 62.15 W. THROTTLED 3/3. Idle. Idle, 60 s: Package watts 14.96 W.

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](/ram-speeds-compared/data/); T4b.

## And the EPYC's, on the big model? {#and-the-epycs-on-the-big-model}

**And the EPYC's, on the big model? Package watts at three thread counts, 2026-11-03 (NOT WALL)**

*Watts drawn by the eight-channel desktop's processor package while writing the 180B mixture at three thread counts, and at idle; a shorter bar draws less; NOT WALL.*

And the EPYC's, on the big model? Package watts at three thread counts, 2026-11-03 (NOT WALL). 8 threads: Package watts 115.89 W. 16 threads: Package watts 131.04 W. 32 threads: Package watts 147.49 W. Idle, 60 s: Package watts 54.24 W.

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](/speeds-from-ram-alone/data/); T7b.

### The tables behind the energy charts {#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 {#an-older-desktop-ten-cores-48-gb-of-ddr4}

**An older desktop: ten cores, 48 GB of DDR4, six models at Q4\_K\_M and two at Q8\_0 (2026-09-10)**

*Tokens a second while writing on an older ten-core desktop, six models at Q4\_K\_M and two of them at Q8\_0; a longer bar writes faster; an older engine build.*

An older desktop: ten cores, 48 GB of DDR4, six models at Q4\_K\_M and two at Q8\_0 (2026-09-10). qwen3.5:9b: Q4\_K\_M 6.96 tok/s; Q8\_0 4.39 tok/s. gemma4:12b: Q4\_K\_M 4.85 tok/s; Q8\_0 3.03 tok/s. phi4:14b: Q4\_K\_M 4.29 tok/s; Q8\_0 no value. Q8\_0 not run. mistral-small3.2: Q4\_K\_M 2.71 tok/s; Q8\_0 no value. Q8\_0 not run. gemma4:26b: Q4\_K\_M 12.80 tok/s; Q8\_0 no value. Older model build (digest 5571076f3d70…). Nemotron 30B-A3B: Q4\_K\_M 13.06 tok/s; Q8\_0 no value. Q8\_0 not run.

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](/ram-speeds-compared/data/).

**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) {#embeddings-on-the-processor-for-search-and-rag}

**Embeddings on the processor (for search and RAG): nomic-embed-text on three machines**

*Embeddings a second (emb/s) for 100 short texts sent one after another to nomic-embed-text, at default threads, 2026-08-25; a longer bar embeds faster.*

Embeddings on the processor (for search and RAG): nomic-embed-text on three machines. EPYC 7532, 128 GB: Embeddings a second 26.50 emb/s. Desktop · 8 ch DDR4-3200 · 32 threads (default). 290HX Plus, 64 GB: Embeddings a second 15.87 emb/s. Laptop · DDR5-5600 · 4 of 24 threads (default). i5-12600H, 32 GB: Embeddings a second 12.12 emb/s. Mini PC · DDR5-4800 · 4 of 16 threads (default).

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](/two-hours-on-battery/data/).

**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 {#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 {#not-on-this-page}

- [*Four homes for one reranker*](/four-homes-for-one-reranker/), [*Small open deciders, measured*](/small-open-deciders-measured/) and [*EmbeddingGemma 2, measured on release day*](/embeddinggemma-2-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 {#how-to-check-our-work}

[The data kit](/ram-speeds-compared/data/) 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](/two-hours-on-battery/data/)'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 {#the-rest-of-the-seminar}

- [*Two Hours at 12 tok/s — On Battery*](/two-hours-on-battery/).
- [*Speeds from RAM alone*](/speeds-from-ram-alone/).
- [*Mixture of experts, in plain words*](/mixture-of-experts-in-plain-words/).
- [*Why the first word comes sooner*](/flash-next-why-the-first-word-comes-sooner/): the big mixture with a card helping.
- [*The 3080 Rig, Priced*](/the-3080-rig-priced/): the older desktop.
- [*Electricity per million tokens, card by card*](/electricity-per-million-tokens/).

## Who ran this, and thanks {#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 {#sources}

- The three kits: [/two-hours-on-battery/data/](/two-hours-on-battery/data/), [/speeds-from-ram-alone/data/](/speeds-from-ram-alone/data/) and [/ram-speeds-compared/data/](/ram-speeds-compared/data/).
- [*Speeds from RAM alone*](/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*](/two-hours-on-battery/): "The one table to remember", "The wait", "Set the thread count".

<!-- derived 2026-11-10 (UTC) by tools/derive_md.py from the pour source.
     source html sha256: 01897263f80999a3d0674b06ef7630223d6819a9121dc973511f7e9acb274973
     derivation sha256:  5f5021958ced3839a1a397aa88a9b8a7a482814ce3b90efc61b9c587c9f6a06c
     the {#id} on each heading is the anchor that heading carries on the page. -->
